From ad0b2ad37aff0700b5b52dbfb34f1fbe54a80d4f Mon Sep 17 00:00:00 2001 From: Ahmed Date: Wed, 25 Mar 2026 13:25:10 +0200 Subject: [PATCH 01/10] ci: Update Node.js to version 22 in release workflow This fixes Vite build requirement for Node.js >= 20.19.0 during the release GitHub Actions workflow. --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1fb00f..629f545 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,10 +22,10 @@ jobs: distribution: 'temurin' cache: gradle - - name: Set up Node.js 18 + - name: Set up Node.js 22 uses: actions/setup-node@v6 with: - node-version: '18' + node-version: '22' - name: Give execute permission for gradlew run: chmod +x gradlew From 432bf984a9f86daf1a9b73c205bd03164ddbeddd Mon Sep 17 00:00:00 2001 From: Ahmed Date: Wed, 25 Mar 2026 13:29:23 +0200 Subject: [PATCH 02/10] ci: Update Node.js to version 22 in CodeQL workflow --- .github/workflows/codeql.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0bb86d0..0946dfc 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,6 +38,12 @@ jobs: with: java-version: '21' distribution: 'temurin' + + - name: Set up Node.js 22 + if: matrix.language == 'java' + uses: actions/setup-node@v6 + with: + node-version: '22' - name: Build Java if: matrix.language == 'java' From f1ea03abed59fcd6abca54aedc40e100bab6a1ef Mon Sep 17 00:00:00 2001 From: Ahmed Date: Wed, 25 Mar 2026 16:15:53 +0200 Subject: [PATCH 03/10] feat(v4): implement initial gap-closure pass --- .../io/eventlens/api/EventLensServer.java | 4 + .../api/routes/StatisticsRoutes.java | 31 + .../eventlens/api/source/SourceRegistry.java | 19 +- .../api/websocket/LiveTailWebSocket.java | 108 +++- .../resources/web/assets/index-B-pPVu7c.js | 14 - .../resources/web/assets/index-DNgDBNrF.js | 14 + ...{index-Cw0Fu2da.css => index-DjroUjh3.css} | 2 +- .../web/assets/json-diff.worker-ClgOBOoF.js | 1 + .../src/main/resources/web/index.html | 4 +- .../eventlens/api/V4ReadinessApiE2ETest.java | 18 + .../mysql/MySqlEventSourcePlugin.java | 41 +- .../mysql/MySqlEventStoreReader.java | 197 +++++- .../io/eventlens/pg/PgEventStoreReader.java | 309 +++++----- .../pg/PostgresEventSourcePlugin.java | 7 + .../io/eventlens/spi/EventSourcePlugin.java | 4 + .../io/eventlens/spi/EventStatistics.java | 34 ++ .../eventlens/spi/EventStatisticsQuery.java | 16 + .../spi/SpiTypesSerializationTest.java | 19 + eventlens-ui/package-lock.json | 88 +++ eventlens-ui/package.json | 6 +- eventlens-ui/playwright.config.ts | 15 + eventlens-ui/src/App.tsx | 441 ++++---------- eventlens-ui/src/api/client.ts | 32 +- eventlens-ui/src/api/types.ts | 17 + .../src/components/CommandPalette.tsx | 107 ++++ eventlens-ui/src/components/KeyboardHints.tsx | 28 +- .../src/components/KeyboardManager.tsx | 38 ++ .../src/components/ReplayDebugger.tsx | 37 ++ eventlens-ui/src/components/StateDiff.tsx | 121 ++-- eventlens-ui/src/components/StateViewer.tsx | 133 ++-- .../src/components/StatisticsPanel.tsx | 57 ++ eventlens-ui/src/components/Timeline.tsx | 566 +++++++++--------- eventlens-ui/src/hooks/useJsonDiffWorker.ts | 37 ++ eventlens-ui/src/hooks/useReplay.ts | 1 + eventlens-ui/src/hooks/useStatistics.ts | 10 + eventlens-ui/src/hooks/useTimeline.ts | 1 + eventlens-ui/src/index.css | 151 +++++ eventlens-ui/src/workers/json-diff.worker.ts | 67 +++ 38 files changed, 1785 insertions(+), 1010 deletions(-) create mode 100644 eventlens-api/src/main/java/io/eventlens/api/routes/StatisticsRoutes.java delete mode 100644 eventlens-api/src/main/resources/web/assets/index-B-pPVu7c.js create mode 100644 eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js rename eventlens-api/src/main/resources/web/assets/{index-Cw0Fu2da.css => index-DjroUjh3.css} (95%) create mode 100644 eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js create mode 100644 eventlens-spi/src/main/java/io/eventlens/spi/EventStatistics.java create mode 100644 eventlens-spi/src/main/java/io/eventlens/spi/EventStatisticsQuery.java create mode 100644 eventlens-ui/playwright.config.ts create mode 100644 eventlens-ui/src/components/CommandPalette.tsx create mode 100644 eventlens-ui/src/components/KeyboardManager.tsx create mode 100644 eventlens-ui/src/components/ReplayDebugger.tsx create mode 100644 eventlens-ui/src/components/StatisticsPanel.tsx create mode 100644 eventlens-ui/src/hooks/useJsonDiffWorker.ts create mode 100644 eventlens-ui/src/hooks/useStatistics.ts create mode 100644 eventlens-ui/src/workers/json-diff.worker.ts diff --git a/eventlens-api/src/main/java/io/eventlens/api/EventLensServer.java b/eventlens-api/src/main/java/io/eventlens/api/EventLensServer.java index 31a8f81..b5f9e67 100644 --- a/eventlens-api/src/main/java/io/eventlens/api/EventLensServer.java +++ b/eventlens-api/src/main/java/io/eventlens/api/EventLensServer.java @@ -120,6 +120,7 @@ public EventLensServer( Duration.ofSeconds(config.getQueryCache().getTimelineTtlSeconds())); var datasourceRoutes = new DatasourceRoutes(sourceRegistry); var pluginRoutes = new PluginRoutes(sourceRegistry); + var statisticsRoutes = new StatisticsRoutes(sourceRegistry); var bisectRoutes = new BisectRoutes(bisectEngine); var anomalyRoutes = new AnomalyRoutes(sourceRegistry, config.getAnomaly(), auditLogger); var exportRoutes = new ExportRoutes(exportEngine, auditLogger); @@ -334,6 +335,7 @@ public EventLensServer( cfg.routes.get("/api/v1/datasources", datasourceRoutes::list); cfg.routes.get("/api/v1/datasources/{id}/health", datasourceRoutes::health); cfg.routes.get("/api/v1/plugins", pluginRoutes::list); + cfg.routes.get("/api/v1/statistics", statisticsRoutes::get); // Legacy aggregate routes (no redirect, but marked deprecated) cfg.routes.get("/api/aggregates/search", ctx -> { @@ -498,3 +500,5 @@ private static String extractClientIp(io.javalin.http.Context ctx) { } } + + diff --git a/eventlens-api/src/main/java/io/eventlens/api/routes/StatisticsRoutes.java b/eventlens-api/src/main/java/io/eventlens/api/routes/StatisticsRoutes.java new file mode 100644 index 0000000..e2ff47c --- /dev/null +++ b/eventlens-api/src/main/java/io/eventlens/api/routes/StatisticsRoutes.java @@ -0,0 +1,31 @@ +package io.eventlens.api.routes; + +import io.eventlens.api.source.SourceRegistry; +import io.eventlens.spi.EventStatisticsQuery; +import io.javalin.http.Context; + +public final class StatisticsRoutes { + + private final SourceRegistry sourceRegistry; + + public StatisticsRoutes(SourceRegistry sourceRegistry) { + this.sourceRegistry = sourceRegistry; + } + + public void get(Context ctx) { + int bucketHours = parsePositiveInt(ctx.queryParam("bucketHours"), 1); + int maxBuckets = parsePositiveInt(ctx.queryParam("maxBuckets"), 24); + ctx.json(sourceRegistry.statistics(ctx.queryParam("source"), new EventStatisticsQuery(bucketHours, maxBuckets))); + } + + private static int parsePositiveInt(String value, int fallback) { + if (value == null || value.isBlank()) { + return fallback; + } + int parsed = Integer.parseInt(value); + if (parsed <= 0) { + throw new IllegalArgumentException("Expected a positive integer"); + } + return parsed; + } +} diff --git a/eventlens-api/src/main/java/io/eventlens/api/source/SourceRegistry.java b/eventlens-api/src/main/java/io/eventlens/api/source/SourceRegistry.java index 05cf4bf..756e461 100644 --- a/eventlens-api/src/main/java/io/eventlens/api/source/SourceRegistry.java +++ b/eventlens-api/src/main/java/io/eventlens/api/source/SourceRegistry.java @@ -4,10 +4,13 @@ import io.eventlens.core.engine.ReplayEngine; import io.eventlens.core.plugin.DatasourceListingModel; import io.eventlens.core.plugin.PluginInstance; -import io.eventlens.spi.HealthStatus; import io.eventlens.core.plugin.PluginListingModel; import io.eventlens.core.plugin.PluginManager; import io.eventlens.core.spi.EventStoreReader; +import io.eventlens.spi.EventSourcePlugin; +import io.eventlens.spi.EventStatistics; +import io.eventlens.spi.EventStatisticsQuery; +import io.eventlens.spi.HealthStatus; import io.eventlens.spi.PluginLifecycle; import java.util.Comparator; @@ -15,7 +18,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; public final class SourceRegistry { @@ -104,6 +106,19 @@ public List listPlugins() { .toList(); } + public EventStatistics statistics(String requestedSourceId, EventStatisticsQuery query) { + if (requestedSourceId == null || requestedSourceId.isBlank() || requestedSourceId.equals(defaultSourceId)) { + return pluginManager.getEventSource(defaultSourceId) + .or(() -> pluginManager.getFirstReadyEventSource()) + .map(plugin -> plugin.statistics(query)) + .orElse(EventStatistics.unavailable("Statistics not available for the primary datasource")); + } + + EventSourcePlugin plugin = pluginManager.getEventSource(requestedSourceId) + .orElseThrow(() -> new IllegalArgumentException("Unknown datasource: " + requestedSourceId)); + return plugin.statistics(query); + } + public record ResolvedSource( String id, String displayName, diff --git a/eventlens-api/src/main/java/io/eventlens/api/websocket/LiveTailWebSocket.java b/eventlens-api/src/main/java/io/eventlens/api/websocket/LiveTailWebSocket.java index 2d4a2e3..52b9ee9 100644 --- a/eventlens-api/src/main/java/io/eventlens/api/websocket/LiveTailWebSocket.java +++ b/eventlens-api/src/main/java/io/eventlens/api/websocket/LiveTailWebSocket.java @@ -19,19 +19,27 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; /** - * WebSocket live tail - streams events to connected browser clients in - * real-time. + * WebSocket live tail with bounded buffering and batched flushes. */ public class LiveTailWebSocket { private static final Logger log = LoggerFactory.getLogger(LiveTailWebSocket.class); private static final int MAX_CONNECTIONS = 500; private static final int BACKFILL_EVENT_COUNT = 100; + private static final int MAX_BUFFERED_MESSAGES = 200; + private static final int MAX_MESSAGES_PER_FLUSH = 50; + private static final long FLUSH_DELAY_MS = 100; private final Map> sessionsBySource = new ConcurrentHashMap<>(); + private final Map sessionStates = new ConcurrentHashMap<>(); private final Set subscribedSources = ConcurrentHashMap.newKeySet(); private final ObjectMapper mapper = new ObjectMapper() .findAndRegisterModules() @@ -41,8 +49,13 @@ public class LiveTailWebSocket { private final AuditLogger auditLogger; private final String defaultSourceId; private final Map sourceStreamBindings; - private final ExecutorService backfillExecutor = java.util.concurrent.Executors.newCachedThreadPool( + private final ExecutorService backfillExecutor = Executors.newCachedThreadPool( Thread.ofVirtual().name("eventlens-backfill-", 0).factory()); + private final ScheduledExecutorService flushExecutor = Executors.newSingleThreadScheduledExecutor(r -> { + Thread thread = new Thread(r, "eventlens-live-flush"); + thread.setDaemon(true); + return thread; + }); public LiveTailWebSocket( SourceRegistry sourceRegistry, @@ -69,6 +82,7 @@ public void configureHandlers(WsConfig ws) { ctx.attribute("eventlensSourceId", sourceId); ctx.enableAutomaticPings(); sessionsBySource.computeIfAbsent(sourceId, ignored -> ConcurrentHashMap.newKeySet()).add(ctx); + sessionStates.put(ctx.sessionId(), new SessionState(ctx)); EventLensMetrics.setWebsocketConnections(totalSessions()); log.debug("WebSocket client connected: {} on source {} ({} active)", ctx.sessionId(), sourceId, totalSessions()); @@ -91,7 +105,7 @@ public void configureHandlers(WsConfig ws) { ensureSubscribed(sourceId, streamAdapter.get()); backfillExecutor.submit(() -> backfill(ctx, sourceId)); } else { - sendControl(ctx, new ControlMessage("NO_LIVE_STREAM", sourceId)); + enqueueControl(ctx, new ControlMessage("NO_LIVE_STREAM", sourceId)); } }); @@ -104,7 +118,7 @@ private void backfill(WsContext ctx, String sourceId) { Thread.sleep(250); var recent = sourceRegistry.resolve(sourceId).reader().getRecentEvents(BACKFILL_EVENT_COUNT); for (var event : recent) { - if (!trySend(ctx, event)) { + if (!enqueue(ctx, event)) { break; } } @@ -127,10 +141,63 @@ public void broadcast(String sourceId, StoredEvent event) { if (sessions == null || sessions.isEmpty()) { return; } - sessions.removeIf(session -> !trySend(session, event)); + sessions.removeIf(session -> !enqueue(session, event)); EventLensMetrics.setWebsocketConnections(totalSessions()); } + private boolean enqueue(WsContext ctx, Object payload) { + SessionState state = sessionStates.get(ctx.sessionId()); + if (state == null || state.closed.get()) { + return false; + } + try { + String json = mapper.writeValueAsString(payload); + while (state.queue.size() >= MAX_BUFFERED_MESSAGES) { + state.queue.pollFirst(); + state.droppedCount++; + } + state.queue.addLast(json); + scheduleFlush(state); + return true; + } catch (Exception e) { + log.debug("WebSocket enqueue failed for {}: {}", ctx.sessionId(), e.getMessage()); + return false; + } + } + + private void enqueueControl(WsContext ctx, ControlMessage message) { + enqueue(ctx, message); + } + + private void scheduleFlush(SessionState state) { + if (!state.flushScheduled.compareAndSet(false, true)) { + return; + } + flushExecutor.schedule(() -> flush(state), FLUSH_DELAY_MS, TimeUnit.MILLISECONDS); + } + + private void flush(SessionState state) { + state.flushScheduled.set(false); + if (state.closed.get()) { + return; + } + int sent = 0; + while (sent < MAX_MESSAGES_PER_FLUSH) { + String next = state.queue.pollFirst(); + if (next == null) { + break; + } + if (!trySendRaw(state.ctx, next)) { + removeSession(state.ctx); + return; + } + sent++; + } + if (!state.queue.isEmpty()) { + scheduleFlush(state); + } + } + private Optional streamForSource(String sourceId) { String explicit = sourceStreamBindings.get(sourceId); if (explicit != null) { @@ -173,6 +240,11 @@ private void removeSession(WsContext ctx) { } else { sessionsBySource.values().forEach(sessions -> sessions.remove(ctx)); } + SessionState state = sessionStates.remove(ctx.sessionId()); + if (state != null) { + state.closed.set(true); + state.queue.clear(); + } EventLensMetrics.setWebsocketConnections(totalSessions()); log.debug("WebSocket session ended: {}", ctx.sessionId()); } @@ -181,9 +253,9 @@ private int totalSessions() { return sessionsBySource.values().stream().mapToInt(Set::size).sum(); } - private boolean trySend(WsContext ctx, StoredEvent event) { + private boolean trySendRaw(WsContext ctx, String json) { try { - ctx.send(mapper.writeValueAsString(event)); + ctx.send(json); return true; } catch (Exception e) { log.debug("WebSocket send failed for {}: {}", ctx.sessionId(), e.getMessage()); @@ -191,14 +263,6 @@ private boolean trySend(WsContext ctx, StoredEvent event) { } } - private void sendControl(WsContext ctx, ControlMessage message) { - try { - ctx.send(mapper.writeValueAsString(message)); - } catch (Exception e) { - log.debug("WebSocket control send failed for {}: {}", ctx.sessionId(), e.getMessage()); - } - } - private StoredEvent toStoredEvent(Event event) { return new StoredEvent( event.eventId(), @@ -224,4 +288,16 @@ private static String extractIp(WsContext ctx) { private record ControlMessage(String type, String source) { } + + private static final class SessionState { + private final WsContext ctx; + private final ConcurrentLinkedDeque queue = new ConcurrentLinkedDeque<>(); + private final AtomicBoolean flushScheduled = new AtomicBoolean(false); + private final AtomicBoolean closed = new AtomicBoolean(false); + private volatile long droppedCount = 0; + + private SessionState(WsContext ctx) { + this.ctx = ctx; + } + } } diff --git a/eventlens-api/src/main/resources/web/assets/index-B-pPVu7c.js b/eventlens-api/src/main/resources/web/assets/index-B-pPVu7c.js deleted file mode 100644 index e9fa2fb..0000000 --- a/eventlens-api/src/main/resources/web/assets/index-B-pPVu7c.js +++ /dev/null @@ -1,14 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():S=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function O(e,t){fe++,de[fe]=e.current,e.current=t}var he=pe(null),ge=pe(null),_e=pe(null),ve=pe(null);function ye(e,t){switch(O(_e,t),O(ge,e),O(he,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}me(he),O(he,e)}function be(){me(he),me(ge),me(_e)}function xe(e){e.memoizedState!==null&&O(ve,e);var t=he.current,n=Hd(t,e.type);t!==n&&(O(ge,e),O(he,n))}function Se(e){ge.current===e&&(me(he),me(ge)),ve.current===e&&(me(ve),Qf._currentValue=ue)}var k,Ce;function we(e){if(k===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);k=t&&t[1]||``,Ce=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Te=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?we(n):``}function De(e,t){switch(e.tag){case 26:case 27:case 5:return we(e.type);case 16:return we(`Lazy`);case 13:return e.child!==t&&t!==null?we(`Suspense Fallback`):we(`Suspense`);case 19:return we(`SuspenseList`);case 0:case 15:return Ee(e.type,!1);case 11:return Ee(e.type.render,!1);case 1:return Ee(e.type,!0);case 31:return we(`Activity`);default:return``}}function Oe(e){try{var t=``,n=null;do t+=De(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var ke=Object.prototype.hasOwnProperty,Ae=t.unstable_scheduleCallback,je=t.unstable_cancelCallback,Me=t.unstable_shouldYield,Ne=t.unstable_requestPaint,Pe=t.unstable_now,Fe=t.unstable_getCurrentPriorityLevel,Ie=t.unstable_ImmediatePriority,Le=t.unstable_UserBlockingPriority,Re=t.unstable_NormalPriority,ze=t.unstable_LowPriority,Be=t.unstable_IdlePriority,Ve=t.log,He=t.unstable_setDisableYieldValue,Ue=null,We=null;function Ge(e){if(typeof Ve==`function`&&He(e),We&&typeof We.setStrictMode==`function`)try{We.setStrictMode(Ue,e)}catch{}}var Ke=Math.clz32?Math.clz32:Ye,qe=Math.log,Je=Math.LN2;function Ye(e){return e>>>=0,e===0?32:31-(qe(e)/Je|0)|0}var Xe=256,Ze=262144,Qe=4194304;function $e(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function A(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=$e(n))):i=$e(o):i=$e(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=$e(n))):i=$e(o)):i=$e(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function j(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function et(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function tt(){var e=Qe;return Qe<<=1,!(Qe&62914560)&&(Qe=4194304),e}function nt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function rt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function it(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),gn=!1;if(hn)try{var _n={};Object.defineProperty(_n,`passive`,{get:function(){gn=!0}}),window.addEventListener(`test`,_n,_n),window.removeEventListener(`test`,_n,_n)}catch{gn=!1}var vn=null,yn=null,bn=null;function xn(){if(bn)return bn;var e,t=yn,n=t.length,r,i=`value`in vn?vn.value:vn.textContent,a=i.length;for(e=0;e=Zn),er=` `,tr=!1;function nr(e,t){switch(e){case`keyup`:return Yn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function rr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var ir=!1;function ar(e,t){switch(e){case`compositionend`:return rr(t);case`keypress`:return t.which===32?(tr=!0,er):null;case`textInput`:return e=t.data,e===er&&tr?null:e;default:return null}}function or(e,t){if(ir)return e===`compositionend`||!Xn&&nr(e,t)?(e=xn(),bn=yn=vn=null,ir=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Or(n)}}function Ar(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ar(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ht(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ht(e.document)}return t}function Mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Nr=hn&&`documentMode`in document&&11>=document.documentMode,Pr=null,Fr=null,Ir=null,Lr=!1;function Rr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Lr||Pr==null||Pr!==Ht(r)||(r=Pr,`selectionStart`in r&&Mr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ir&&Dr(Ir,r)||(Ir=r,r=Ed(Fr,`onSelect`),0>=o,i-=o,ki=1<<32-Ke(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),L&&ji(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),L&&ji(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return L&&ji(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),L&&ji(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&ka(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ia(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=gi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=hi(o.type,o.key,o.props,null,e.mode,c),Ia(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=yi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=ka(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Fa(o),c);if(o.$$typeof===C)return b(e,r,ia(e,o),c);La(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=_i(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Pa=0;var i=b(e,t,n,r);return Na=null,i}catch(t){if(t===Ca||t===Ta)throw t;var a=di(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var za=Ra(!0),Ba=Ra(!1),Va=!1;function Ha(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Wa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ga(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=li(e),ci(e,null,n),t}return ai(e,r,t,n),li(e)}function Ka(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}function qa(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ja=!1;function Ya(){if(Ja){var e=ma;if(e!==null)throw e}}function Xa(e,t,n,r){Ja=!1;var i=e.updateQueue;Va=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===pa&&(Ja=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Va=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Za(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Fs(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ps(e,t,_a(c,r),pu(e)):Ps(e,t,r,pu(e))}catch(n){Ps(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function ws(){}function Ts(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Es(e).queue;Cs(e,a,t,ue,n===null?ws:function(){return Ds(e),n(r)})}function Es(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ds(e){var t=Es(e);t.next===null&&(t=e.alternate.memoizedState),Ps(e,t.next.queue,{},pu())}function Os(){return ra(Qf)}function ks(){return jo().memoizedState}function As(){return jo().memoizedState}function js(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Wa(n);var r=Ga(t,e,n);r!==null&&(hu(r,t,n),Ka(r,t,n)),t={cache:la()},e.payload=t;return}t=t.return}}function Ms(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Is(e)?Ls(t,n):(n=oi(e,t,n,r),n!==null&&(hu(n,e,r),Rs(n,t,r)))}function Ns(e,t,n){Ps(e,t,n,pu())}function Ps(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Is(e))Ls(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Er(s,o))return ai(e,t,i,0),K===null&&ii(),!1}catch{}if(n=oi(e,t,i,r),n!==null)return hu(n,e,r),Rs(n,t,r),!0}return!1}function Fs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Is(e)){if(t)throw Error(i(479))}else t=oi(e,n,r,2),t!==null&&hu(t,e,2)}function Is(e){var t=e.alternate;return e===B||t!==null&&t===B}function Ls(e,t){go=ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Rs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}var zs={readContext:ra,use:Po,useCallback:H,useContext:H,useEffect:H,useImperativeHandle:H,useLayoutEffect:H,useInsertionEffect:H,useMemo:H,useReducer:H,useRef:H,useState:H,useDebugValue:H,useDeferredValue:H,useTransition:H,useSyncExternalStore:H,useId:H,useHostTransitionStatus:H,useFormState:H,useActionState:H,useOptimistic:H,useMemoCache:H,useCacheRefresh:H};zs.useEffectEvent=H;var Bs={readContext:ra,use:Po,useCallback:function(e,t){return Ao().memoizedState=[e,t===void 0?null:t],e},useContext:ra,useEffect:us,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),cs(4194308,4,gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cs(4194308,4,e,t)},useInsertionEffect:function(e,t){cs(4,2,e,t)},useMemo:function(e,t){var n=Ao();t=t===void 0?null:t;var r=e();if(_o){Ge(!0);try{e()}finally{Ge(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Ao();if(n!==void 0){var i=n(t);if(_o){Ge(!0);try{n(t)}finally{Ge(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ms.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Ao();return e={current:e},t.memoizedState=e},useState:function(e){e=Ko(e);var t=e.queue,n=Ns.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:vs,useDeferredValue:function(e,t){return xs(Ao(),e,t)},useTransition:function(){var e=Ko(!1);return e=Cs.bind(null,B,e.queue,!0,!1),Ao().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=Ao();if(L){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Vo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,us(Uo.bind(null,r,o,e),[e]),r.flags|=2048,os(9,{destroy:void 0},Ho.bind(null,r,o,n,t),null),n},useId:function(){var e=Ao(),t=K.identifierPrefix;if(L){var n=Ai,r=ki;n=(r&~(1<<32-Ke(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=vo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[pt]=t,o[mt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Pc(t)}}return U(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Pc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=_e.current,Ui(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ii,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[pt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||Bi(t,!0)}else e=Bd(e).createTextNode(r),e[pt]=t,t.stateNode=e}return U(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Ui(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[pt]=t}else Wi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),e=!1}else n=Gi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(uo(t),t):(uo(t),null);if(t.flags&128)throw Error(i(558))}return U(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Ui(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[pt]=t}else Wi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),a=!1}else a=Gi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(uo(t),t):(uo(t),null)}return uo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Lc(t,t.updateQueue),U(t),null);case 4:return be(),e===null&&Sd(t.stateNode.containerInfo),U(t),null;case 10:return Zi(t.type),U(t),null;case 19:if(me(z),r=t.memoizedState,r===null)return U(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Rc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,Rc(r,!1),e=o.updateQueue,t.updateQueue=e,Lc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)mi(n,e),n=n.sibling;return O(z,z.current&1|2),L&&ji(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Pe()>tu&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Lc(t,e),Rc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!L)return U(t),null}else 2*Pe()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(U(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Pe(),e.sibling=null,n=z.current,O(z,a?n&1|2:n&1),L&&ji(t,r.treeForkCount),e);case 22:case 23:return uo(t),ro(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(U(t),t.subtreeFlags&6&&(t.flags|=8192)):U(t),n=t.updateQueue,n!==null&&Lc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&me(ya),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Zi(R),U(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Pi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Zi(R),be(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Se(t),null;case 31:if(t.memoizedState!==null){if(uo(t),t.alternate===null)throw Error(i(340));Wi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(uo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Wi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return me(z),null;case 4:return be(),null;case 10:return Zi(t.type),null;case 22:case 23:return uo(t),ro(),e!==null&&me(ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Zi(R),null;case 25:return null;default:return null}}function Vc(e,t){switch(Pi(t),t.tag){case 3:Zi(R),be();break;case 26:case 27:case 5:Se(t);break;case 4:be();break;case 31:t.memoizedState!==null&&uo(t);break;case 13:uo(t);break;case 19:me(z);break;case 10:Zi(t.type);break;case 22:case 23:uo(t),ro(),e!==null&&me(ya);break;case 24:Zi(R)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Qa(t,n)}catch(t){Z(e,e.return,t)}}}function Gc(e,t,n){n.props=qs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[mt]=t}catch(t){Z(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=on));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[pt]=e,t[mt]=n}catch(t){Z(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=jr(e),Mr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[pt]=e,M(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=kr(s,h),v=kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),We&&typeof We.onPostCommitFiberRoot==`function`)try{We.onPostCommitFiberRoot(Ue,o)}catch{}return!0}finally{D.p=a,E.T=r,Vu(e,t)}}function Wu(e,t,n){t=xi(n,t),t=$s(e.stateNode,t,2),e=Ga(e,t,2),e!==null&&(rt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=xi(n,e),n=ec(2),r=Ga(t,n,2),r!==null&&(tc(n,r,t,e),rt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Pe()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=tt()),e=si(e,t),e!==null&&(rt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return Ae(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ke(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=A(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||j(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Pe(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Wt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),M(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Wt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Wt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Wt(n.imageSizes)+`"]`)):i+=`[href="`+Wt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),M(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Wt(r)+`"][href="`+Wt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),M(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=Tt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);M(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),M(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),M(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=_e.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=Tt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=Tt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=Tt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Wt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),M(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Wt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Wt(n.href)+`"]`);if(r)return t.instance=r,M(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),M(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,M(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),M(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,M(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),M(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,M(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),M(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function ee(e){return typeof e==`number`&&e>=0&&e!==1/0}function te(e,t){return Math.max(e+(t||0)-Date.now(),0)}function ne(e,t){return typeof e==`function`?e(t):e}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==ae(o,t.options))return!1}else if(!se(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ie(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(oe(t.options.mutationKey)!==oe(a))return!1}else if(!se(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function ae(e,t){return(t?.queryKeyHashFn||oe)(e)}function oe(e){return JSON.stringify(e,(e,t)=>ue(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function se(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>se(e[n],t[n])):!1}var ce=Object.prototype.hasOwnProperty;function le(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=D(e)&&D(t);if(!r&&!(ue(e)&&ue(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{b.setTimeout(t,e)})}function pe(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:le(e,t)}function me(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function O(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var he=Symbol();function ge(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===he?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function _e(e,t){return typeof e==`function`?e(...t):!!e}function ve(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var ye=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(!S&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}};function be(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var xe=x;function Se(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=xe,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var k=Se(),Ce=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(!S&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function we(e){return Math.min(1e3*2**e,3e4)}function Te(e){return(e??`online`)===`online`?Ce.isOnline():!0}var Ee=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function De(e){let t=!1,n=0,r,i=be(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Ee(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>ye.isFocused()&&(e.networkMode===`always`||Ce.isOnline())&&e.canRun(),u=()=>Te(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(S?0:3),o=e.retryDelay??we,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var Oe=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),ee(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(S?1/0:300*1e3))}clearGcTimeout(){this.#e&&=(b.clearTimeout(this.#e),void 0)}},ke=class extends Oe{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Me(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Me(this.options);e.data!==void 0&&(this.setState(je(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=pe(this.state.data,e,this.options);return this.#s({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#s({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#e)}isActive(){return this.observers.some(e=>T(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===he||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>ne(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!te(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#s({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=ge(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#s({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=De({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Ee&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#s({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#s({type:`pause`})},onContinue:()=>{this.#s({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Ee){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#s({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#s(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Ae(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...je(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),k.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function Ae(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Te(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function je(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Me(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ne=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=be(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Fe(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Ie(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Ie(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof T(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!E(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Le(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||T(this.options.enabled,this.#t)!==T(t.enabled,this.#t)||ne(this.options.staleTime,this.#t)!==ne(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||T(this.options.enabled,this.#t)!==T(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return ze(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(C)),t}#g(){this.#b();let e=ne(this.options.staleTime,this.#t);if(S||this.#r.isStale||!ee(e))return;let t=te(this.#r.dataUpdatedAt,e)+1;this.#d=b.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(S||T(this.options.enabled,this.#t)===!1||!ee(this.#p)||this.#p===0)&&(this.#f=b.setInterval(()=>{(this.options.refetchIntervalInBackground||ye.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d&&=(b.clearTimeout(this.#d),void 0)}#x(){this.#f&&=(b.clearInterval(this.#f),void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Fe(e,t),o=i&&Le(e,n,t,r);(a||o)&&(l={...l,...Ae(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=pe(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=pe(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:l.dataUpdateCount>0||l.errorUpdateCount>0,isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Re(e,t),refetch:this.refetch,promise:this.#o,isEnabled:T(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=be())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!E(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){k.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Pe(e,t){return T(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Fe(e,t){return Pe(e,t)||e.state.data!==void 0&&Ie(e,t,t.refetchOnMount)}function Ie(e,t,n){if(T(t.enabled,e)!==!1&&ne(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Re(e,t)}return!1}function Le(e,t,n,r){return(e!==t||T(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Re(e,n)}function Re(e,t){return T(t.enabled,e)!==!1&&e.isStaleByTime(ne(t.staleTime,e))}function ze(e,t){return!E(e.getCurrentResult(),t)}function Be(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ve(e,()=>t.signal,()=>n=!0)},u=ge(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?O:me;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?He:Ve,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Ve(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function Ve(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function He(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Ue=class extends Oe{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||We(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=De({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),k.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function We(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Ge=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ue({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=Ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){k.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){return this.getAll().filter(t=>ie(e,t))}notify(e){k.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return k.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function Ke(e){return e.options.scope?.id}function qe(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Je(e,t,n){let r=e.slice(0);return r[t]=n,r}var Ye=class extends v{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,k.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!E(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(qe(e,n).forEach(e=>{e.destroy()}),qe(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=le(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new Ne(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Je(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&k.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Xe=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??ae(r,t),a=this.get(i);return a||(a=new ke({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){k.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>re(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>re(e,t)):t}notify(e){k.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){k.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){k.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Ze=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Xe,this.#t=e.mutationCache||new Ge,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=ye.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Ce.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(ne(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return k.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;k.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return k.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=k.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return k.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=k.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(ne(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e.behavior=Be(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e.behavior=Be(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Ce.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(oe(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{se(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(oe(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{se(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=ae(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===he&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Qe=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),$e=o(((e,t)=>{t.exports=Qe()})),A=l(d(),1),j=$e(),et=A.createContext(void 0),tt=e=>{let t=A.useContext(et);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},nt=({client:e,children:t})=>(A.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,j.jsx)(et.Provider,{value:e,children:t})),rt=A.createContext(!1),it=()=>A.useContext(rt);rt.Provider;function at(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var ot=A.createContext(at()),st=()=>A.useContext(ot),ct=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?_e(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},lt=e=>{A.useEffect(()=>{e.clearReset()},[e])},ut=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||_e(n,[e.error,r])),dt=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},ft=(e,t)=>e.isLoading&&e.isFetching&&!t,pt=(e,t)=>e?.suspense&&t.isPending,mt=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function ht({queries:e,...t},n){let r=tt(n),i=it(),a=st(),o=A.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{dt(e),ct(e,a,r.getQueryCache().get(e.queryHash))}),lt(a);let[s]=A.useState(()=>new Ye(r,o,t)),[c,l,u]=s.getOptimisticResult(o,t.combine),d=!i&&t.subscribed!==!1;A.useSyncExternalStore(A.useCallback(e=>d?s.subscribe(k.batchCalls(e)):C,[s,d]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),A.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let f=c.some((e,t)=>pt(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&pt(n,e)?mt(n,new Ne(r,n),a):[]}):[];if(f.length>0)throw Promise.all(f);let p=c.find((e,t)=>{let n=o[t];return n&&ut({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(p?.error)throw p.error;return l(u())}function gt(e,t,n){let r=it(),i=st(),a=tt(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,dt(o),ct(o,i,s),lt(i);let c=!a.getQueryCache().get(o.queryHash),[l]=A.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(A.useSyncExternalStore(A.useCallback(e=>{let t=d?l.subscribe(k.batchCalls(e)):C;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),A.useEffect(()=>{l.setOptions(o)},[o,l]),pt(o,u))throw mt(o,l,i);if(ut({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!S&&ft(u,r)&&(c?mt(o,l,i):s?.promise)?.catch(C).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function _t(e,t){return gt(e,Ne,t)}function vt(e,t){return function(){return e.apply(t,arguments)}}var{toString:yt}=Object.prototype,{getPrototypeOf:bt}=Object,{iterator:xt,toStringTag:St}=Symbol,Ct=(e=>t=>{let n=yt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),wt=e=>(e=e.toLowerCase(),t=>Ct(t)===e),Tt=e=>t=>typeof t===e,{isArray:M}=Array,Et=Tt(`undefined`);function Dt(e){return e!==null&&!Et(e)&&e.constructor!==null&&!Et(e.constructor)&&jt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Ot=wt(`ArrayBuffer`);function kt(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ot(e.buffer),t}var At=Tt(`string`),jt=Tt(`function`),Mt=Tt(`number`),Nt=e=>typeof e==`object`&&!!e,Pt=e=>e===!0||e===!1,Ft=e=>{if(Ct(e)!==`object`)return!1;let t=bt(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(St in e)&&!(xt in e)},It=e=>{if(!Nt(e)||Dt(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Lt=wt(`Date`),Rt=wt(`File`),zt=e=>!!(e&&e.uri!==void 0),Bt=e=>e&&e.getParts!==void 0,Vt=wt(`Blob`),Ht=wt(`FileList`),Ut=e=>Nt(e)&&jt(e.pipe);function Wt(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var Gt=Wt(),Kt=Gt.FormData===void 0?void 0:Gt.FormData,qt=e=>{let t;return e&&(Kt&&e instanceof Kt||jt(e.append)&&((t=Ct(e))===`formdata`||t===`object`&&jt(e.toString)&&e.toString()===`[object FormData]`))},Jt=wt(`URLSearchParams`),[Yt,Xt,Zt,Qt]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(wt),$t=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function en(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),M(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}var nn=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,rn=e=>!Et(e)&&e!==nn;function an(){let{caseless:e,skipUndefined:t}=rn(this)&&this||{},n={},r=(r,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=e&&tn(n,i)||i;Ft(n[a])&&Ft(r)?n[a]=an(n[a],r):Ft(r)?n[a]=an({},r):M(r)?n[a]=r.slice():(!t||!Et(r))&&(n[a]=r)};for(let e=0,t=arguments.length;e(en(t,(t,r)=>{n&&jt(t)?Object.defineProperty(e,r,{value:vt(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),sn=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),cn=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{value:t.prototype}),n&&Object.assign(e.prototype,n)},ln=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&bt(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},un=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},dn=e=>{if(!e)return null;if(M(e))return e;let t=e.length;if(!Mt(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},fn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&bt(Uint8Array)),pn=(e,t)=>{let n=(e&&e[xt]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},mn=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},hn=wt(`HTMLFormElement`),gn=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),_n=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),vn=wt(`RegExp`),yn=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};en(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},bn=e=>{yn(e,(t,n)=>{if(jt(e)&&[`arguments`,`caller`,`callee`].indexOf(n)!==-1)return!1;let r=e[n];if(jt(r)){if(t.enumerable=!1,`writable`in t){t.writable=!1;return}t.set||=()=>{throw Error(`Can not rewrite read-only method '`+n+`'`)}}})},xn=(e,t)=>{let n={},r=e=>{e.forEach(e=>{n[e]=!0})};return M(e)?r(e):r(String(e).split(t)),n},Sn=()=>{},Cn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function wn(e){return!!(e&&jt(e.append)&&e[St]===`FormData`&&e[xt])}var Tn=e=>{let t=Array(10),n=(e,r)=>{if(Nt(e)){if(t.indexOf(e)>=0)return;if(Dt(e))return e;if(!(`toJSON`in e)){t[r]=e;let i=M(e)?[]:{};return en(e,(e,t)=>{let a=n(e,r+1);!Et(a)&&(i[t]=a)}),t[r]=void 0,i}}return e};return n(e,0)},En=wt(`AsyncFunction`),Dn=e=>e&&(Nt(e)||jt(e))&&jt(e.then)&&jt(e.catch),On=((e,t)=>e?setImmediate:t?((e,t)=>(nn.addEventListener(`message`,({source:n,data:r})=>{n===nn&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),nn.postMessage(e,`*`)}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate==`function`,jt(nn.postMessage)),N={isArray:M,isArrayBuffer:Ot,isBuffer:Dt,isFormData:qt,isArrayBufferView:kt,isString:At,isNumber:Mt,isBoolean:Pt,isObject:Nt,isPlainObject:Ft,isEmptyObject:It,isReadableStream:Yt,isRequest:Xt,isResponse:Zt,isHeaders:Qt,isUndefined:Et,isDate:Lt,isFile:Rt,isReactNativeBlob:zt,isReactNative:Bt,isBlob:Vt,isRegExp:vn,isFunction:jt,isStream:Ut,isURLSearchParams:Jt,isTypedArray:fn,isFileList:Ht,forEach:en,merge:an,extend:on,trim:$t,stripBOM:sn,inherits:cn,toFlatObject:ln,kindOf:Ct,kindOfTest:wt,endsWith:un,toArray:dn,forEachEntry:pn,matchAll:mn,isHTMLForm:hn,hasOwnProperty:_n,hasOwnProp:_n,reduceDescriptors:yn,freezeMethods:bn,toObjectSet:xn,toCamelCase:gn,noop:Sn,toFiniteNumber:Cn,findKey:tn,global:nn,isContextDefined:rn,isSpecCompliantForm:wn,toJSONObject:Tn,isAsyncFn:En,isThenable:Dn,setImmediate:On,asap:typeof queueMicrotask<`u`?queueMicrotask.bind(nn):typeof process<`u`&&process.nextTick||On,isIterable:e=>e!=null&&jt(e[xt])},P=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:N.toJSONObject(this.config),code:this.code,status:this.status}}};P.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,P.ERR_BAD_OPTION=`ERR_BAD_OPTION`,P.ECONNABORTED=`ECONNABORTED`,P.ETIMEDOUT=`ETIMEDOUT`,P.ERR_NETWORK=`ERR_NETWORK`,P.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,P.ERR_DEPRECATED=`ERR_DEPRECATED`,P.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,P.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,P.ERR_CANCELED=`ERR_CANCELED`,P.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,P.ERR_INVALID_URL=`ERR_INVALID_URL`;function kn(e){return N.isPlainObject(e)||N.isArray(e)}function An(e){return N.endsWith(e,`[]`)?e.slice(0,-2):e}function jn(e,t,n){return e?e.concat(t).map(function(e,t){return e=An(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function Mn(e){return N.isArray(e)&&!e.some(kn)}var Nn=N.toFlatObject(N,{},null,function(e){return/^is[A-Z]/.test(e)});function Pn(e,t,n){if(!N.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=N.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!N.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||l,a=n.dots,o=n.indexes,s=(n.Blob||typeof Blob<`u`&&Blob)&&N.isSpecCompliantForm(t);if(!N.isFunction(i))throw TypeError(`visitor must be a function`);function c(e){if(e===null)return``;if(N.isDate(e))return e.toISOString();if(N.isBoolean(e))return e.toString();if(!s&&N.isBlob(e))throw new P(`Blob is not supported. Use a Buffer instead.`);return N.isArrayBuffer(e)||N.isTypedArray(e)?s&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function l(e,n,i){let s=e;if(N.isReactNative(t)&&N.isReactNativeBlob(e))return t.append(jn(i,n,a),c(e)),!1;if(e&&!i&&typeof e==`object`){if(N.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(N.isArray(e)&&Mn(e)||(N.isFileList(e)||N.endsWith(n,`[]`))&&(s=N.toArray(e)))return n=An(n),s.forEach(function(e,r){!(N.isUndefined(e)||e===null)&&t.append(o===!0?jn([n],r,a):o===null?n:n+`[]`,c(e))}),!1}return kn(e)?!0:(t.append(jn(i,n,a),c(e)),!1)}let u=[],d=Object.assign(Nn,{defaultVisitor:l,convertValue:c,isVisitable:kn});function f(e,n){if(!N.isUndefined(e)){if(u.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));u.push(e),N.forEach(e,function(e,r){(!(N.isUndefined(e)||e===null)&&i.call(t,e,N.isString(r)?r.trim():r,n,d))===!0&&f(e,n?n.concat(r):[r])}),u.pop()}}if(!N.isObject(e))throw TypeError(`data must be an object`);return f(e),t}function Fn(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`,"%00":`\0`};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function In(e,t){this._pairs=[],e&&Pn(e,this,t)}var Ln=In.prototype;Ln.append=function(e,t){this._pairs.push([e,t])},Ln.toString=function(e){let t=e?function(t){return e.call(this,t,Fn)}:Fn;return this._pairs.map(function(e){return t(e[0])+`=`+t(e[1])},``).join(`&`)};function Rn(e){return encodeURIComponent(e).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`).replace(/%20/g,`+`)}function zn(e,t,n){if(!t)return e;let r=n&&n.encode||Rn,i=N.isFunction(n)?{serialize:n}:n,a=i&&i.serialize,o;if(o=a?a(t,i):N.isURLSearchParams(t)?t.toString():new In(t,i).toString(r),o){let t=e.indexOf(`#`);t!==-1&&(e=e.slice(0,t)),e+=(e.indexOf(`?`)===-1?`?`:`&`)+o}return e}var Bn=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&=[]}forEach(e){N.forEach(this.handlers,function(t){t!==null&&e(t)})}},Vn={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Hn={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<`u`?URLSearchParams:In,FormData:typeof FormData<`u`?FormData:null,Blob:typeof Blob<`u`?Blob:null},protocols:[`http`,`https`,`file`,`blob`,`url`,`data`]},Un=s({hasBrowserEnv:()=>Wn,hasStandardBrowserEnv:()=>Kn,hasStandardBrowserWebWorkerEnv:()=>qn,navigator:()=>Gn,origin:()=>Jn}),Wn=typeof window<`u`&&typeof document<`u`,Gn=typeof navigator==`object`&&navigator||void 0,Kn=Wn&&(!Gn||[`ReactNative`,`NativeScript`,`NS`].indexOf(Gn.product)<0),qn=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope&&typeof self.importScripts==`function`,Jn=Wn&&window.location.href||`http://localhost`,Yn={...Un,...Hn};function Xn(e,t){return Pn(e,new Yn.classes.URLSearchParams,{visitor:function(e,t,n,r){return Yn.isNode&&N.isBuffer(e)?(this.append(t,e.toString(`base64`)),!1):r.defaultVisitor.apply(this,arguments)},...t})}function Zn(e){return N.matchAll(/\w+|\[(\w*)]/g,e).map(e=>e[0]===`[]`?``:e[1]||e[0])}function Qn(e){let t={},n=Object.keys(e),r,i=n.length,a;for(r=0;r=e.length;return a=!a&&N.isArray(r)?r.length:a,s?(N.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!o):((!r[a]||!N.isObject(r[a]))&&(r[a]=[]),t(e,n,r[a],i)&&N.isArray(r[a])&&(r[a]=Qn(r[a])),!o)}if(N.isFormData(e)&&N.isFunction(e.entries)){let n={};return N.forEachEntry(e,(e,r)=>{t(Zn(e),r,n,0)}),n}return null}function er(e,t,n){if(N.isString(e))try{return(t||JSON.parse)(e),N.trim(e)}catch(e){if(e.name!==`SyntaxError`)throw e}return(n||JSON.stringify)(e)}var tr={transitional:Vn,adapter:[`xhr`,`http`,`fetch`],transformRequest:[function(e,t){let n=t.getContentType()||``,r=n.indexOf(`application/json`)>-1,i=N.isObject(e);if(i&&N.isHTMLForm(e)&&(e=new FormData(e)),N.isFormData(e))return r?JSON.stringify($n(e)):e;if(N.isArrayBuffer(e)||N.isBuffer(e)||N.isStream(e)||N.isFile(e)||N.isBlob(e)||N.isReadableStream(e))return e;if(N.isArrayBufferView(e))return e.buffer;if(N.isURLSearchParams(e))return t.setContentType(`application/x-www-form-urlencoded;charset=utf-8`,!1),e.toString();let a;if(i){if(n.indexOf(`application/x-www-form-urlencoded`)>-1)return Xn(e,this.formSerializer).toString();if((a=N.isFileList(e))||n.indexOf(`multipart/form-data`)>-1){let t=this.env&&this.env.FormData;return Pn(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||r?(t.setContentType(`application/json`,!1),er(e)):e}],transformResponse:[function(e){let t=this.transitional||tr.transitional,n=t&&t.forcedJSONParsing,r=this.responseType===`json`;if(N.isResponse(e)||N.isReadableStream(e))return e;if(e&&N.isString(e)&&(n&&!this.responseType||r)){let n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n)throw e.name===`SyntaxError`?P.from(e,P.ERR_BAD_RESPONSE,this,null,this.response):e}}return e}],timeout:0,xsrfCookieName:`XSRF-TOKEN`,xsrfHeaderName:`X-XSRF-TOKEN`,maxContentLength:-1,maxBodyLength:-1,env:{FormData:Yn.classes.FormData,Blob:Yn.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:`application/json, text/plain, */*`,"Content-Type":void 0}}};N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`],e=>{tr.headers[e]={}});var nr=N.toObjectSet([`age`,`authorization`,`content-length`,`content-type`,`etag`,`expires`,`from`,`host`,`if-modified-since`,`if-unmodified-since`,`last-modified`,`location`,`max-forwards`,`proxy-authorization`,`referer`,`retry-after`,`user-agent`]),rr=e=>{let t={},n,r,i;return e&&e.split(` -`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&nr[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t},ir=Symbol(`internals`);function ar(e){return e&&String(e).trim().toLowerCase()}function or(e){return e===!1||e==null?e:N.isArray(e)?e.map(or):String(e)}function sr(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var cr=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function lr(e,t,n,r,i){if(N.isFunction(r))return r.call(this,t,n);if(i&&(t=n),N.isString(t)){if(N.isString(r))return t.indexOf(r)!==-1;if(N.isRegExp(r))return r.test(t)}}function ur(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function dr(e,t){let n=N.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var fr=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=ar(t);if(!i)throw Error(`header name must be a non-empty string`);let a=N.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=or(e))}let a=(e,t)=>N.forEach(e,(e,n)=>i(e,n,t));if(N.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(N.isString(e)&&(e=e.trim())&&!cr(e))a(rr(e),t);else if(N.isObject(e)&&N.isIterable(e)){let n={},r,i;for(let t of e){if(!N.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?N.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=ar(e),e){let n=N.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return sr(e);if(N.isFunction(t))return t.call(this,e,n);if(N.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=ar(e),e){let n=N.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||lr(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=ar(e),e){let i=N.findKey(n,e);i&&(!t||lr(n,n[i],i,t))&&(delete n[i],r=!0)}}return N.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||lr(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return N.forEach(this,(r,i)=>{let a=N.findKey(n,i);if(a){t[a]=or(r),delete t[i];return}let o=e?ur(i):String(i).trim();o!==i&&delete t[i],t[o]=or(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return N.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&N.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(` -`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[ir]=this[ir]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=ar(e);t[r]||(dr(n,e),t[r]=!0)}return N.isArray(e)?e.forEach(r):r(e),this}};fr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),N.reduceDescriptors(fr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),N.freezeMethods(fr);function pr(e,t){let n=this||tr,r=t||n,i=fr.from(r.headers),a=r.data;return N.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function mr(e){return!!(e&&e.__CANCEL__)}var hr=class extends P{constructor(e,t,n){super(e??`canceled`,P.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function gr(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new P(`Request failed with status code `+n.status,[P.ERR_BAD_REQUEST,P.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function _r(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function vr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var br=(e,t,n=3)=>{let r=0,i=vr(50,250);return yr(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},xr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Sr=e=>(...t)=>N.asap(()=>e(...t)),Cr=Yn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Yn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Yn.origin),Yn.navigator&&/(msie|trident)/i.test(Yn.navigator.userAgent)):()=>!0,wr=Yn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];N.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),N.isString(r)&&s.push(`path=${r}`),N.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),N.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Tr(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Er(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function Dr(e,t,n){let r=!Tr(t);return e&&(r||n==0)?Er(e,t):t}var Or=e=>e instanceof fr?{...e}:e;function kr(e,t){t||={};let n={};function r(e,t,n,r){return N.isPlainObject(e)&&N.isPlainObject(t)?N.merge.call({caseless:r},e,t):N.isPlainObject(t)?N.merge({},t):N.isArray(t)?t.slice():t}function i(e,t,n,i){if(!N.isUndefined(t))return r(e,t,n,i);if(!N.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!N.isUndefined(t))return r(void 0,t)}function o(e,t){if(!N.isUndefined(t))return r(void 0,t);if(!N.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(Or(e),Or(t),n,!0)};return N.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=N.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);N.isUndefined(o)&&a!==s||(n[r]=o)}),n}var Ar=e=>{let t=kr({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=fr.from(o),t.url=zn(Dr(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),N.isFormData(n)){if(Yn.hasStandardBrowserEnv||Yn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(N.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Yn.hasStandardBrowserEnv&&(r&&N.isFunction(r)&&(r=r(t)),r||r!==!1&&Cr(t.url))){let e=i&&a&&wr.read(a);e&&o.set(i,e)}return t},jr=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=Ar(e),i=r.data,a=fr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=fr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());gr(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new P(`Request aborted`,P.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new P(t&&t.message?t.message:`Network Error`,P.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Vn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new P(t,i.clarifyTimeoutError?P.ETIMEDOUT:P.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&N.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),N.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=br(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=br(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new hr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=_r(r.url);if(_&&Yn.protocols.indexOf(_)===-1){n(new P(`Unsupported protocol `+_+`:`,P.ERR_BAD_REQUEST,e));return}h.send(i||null)})},Mr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof P?t:new hr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new P(`timeout of ${t}ms exceeded`,P.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>N.asap(o),s}},Nr=function*(e,t){let n=e.byteLength;if(!t||n{let i=Pr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Lr=64*1024,{isFunction:Rr}=N,zr=(({Request:e,Response:t})=>({Request:e,Response:t}))(N.global),{ReadableStream:Br,TextEncoder:Vr}=N.global,Hr=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Ur=e=>{e=N.merge.call({skipUndefined:!0},zr,e);let{fetch:t,Request:n,Response:r}=e,i=t?Rr(t):typeof fetch==`function`,a=Rr(n),o=Rr(r);if(!i)return!1;let s=i&&Rr(Br),c=i&&(typeof Vr==`function`?(e=>t=>e.encode(t))(new Vr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&Hr(()=>{let e=!1,t=new n(Yn.origin,{body:new Br,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&Hr(()=>N.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new P(`Response type '${e}' is not supported`,P.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(N.isBlob(e))return e.size;if(N.isSpecCompliantForm(e))return(await new n(Yn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(N.isArrayBufferView(e)||N.isArrayBuffer(e))return e.byteLength;if(N.isURLSearchParams(e)&&(e+=``),N.isString(e))return(await c(e)).byteLength},p=async(e,t)=>N.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=Ar(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=Mr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(N.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=xr(ee,br(Sr(g)));s=Ir(e.body,Lr,t,n)}}N.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=N.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&xr(t,br(Sr(h),!0))||[];f=new r(Ir(f.body,Lr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[N.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{gr(t,n,{data:te,headers:fr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new P(`Network Error`,P.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):P.from(t,t&&t.code,e,C,t&&t.response)}}},Wr=new Map,Gr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Wr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Ur(t)),l=c;return c};Gr();var Kr={http:null,xhr:jr,fetch:{get:Gr}};N.forEach(Kr,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var qr=e=>`- ${e}`,Jr=e=>N.isFunction(e)||e===null||e===!1;function Yr(e,t){e=N.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new P(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : -`+e.map(qr).join(` -`):` `+qr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var Xr={getAdapter:Yr,adapters:Kr};function Zr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new hr(null,e)}function Qr(e){return Zr(e),e.headers=fr.from(e.headers),e.data=pr.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),Xr.getAdapter(e.adapter||tr.adapter,e)(e).then(function(t){return Zr(e),t.data=pr.call(e,e.transformResponse,t),t.headers=fr.from(t.headers),t},function(t){return mr(t)||(Zr(e),t&&t.response&&(t.response.data=pr.call(e,e.transformResponse,t.response),t.response.headers=fr.from(t.response.headers))),Promise.reject(t)})}var $r=`1.13.6`,ei={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{ei[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var ti={};ei.transitional=function(e,t,n){function r(e,t){return`[Axios v`+$r+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new P(r(i,` has been removed`+(t?` in `+t:``)),P.ERR_DEPRECATED);return t&&!ti[i]&&(ti[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},ei.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function ni(e,t,n){if(typeof e!=`object`)throw new P(`options must be an object`,P.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new P(`option `+a+` must be `+n,P.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new P(`Unknown option `+a,P.ERR_BAD_OPTION)}}var ri={assertOptions:ni,validators:ei},ii=ri.validators,ai=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Bn,response:new Bn}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` -`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=kr(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ri.assertOptions(n,{silentJSONParsing:ii.transitional(ii.boolean),forcedJSONParsing:ii.transitional(ii.boolean),clarifyTimeoutError:ii.transitional(ii.boolean),legacyInterceptorReqResOrdering:ii.transitional(ii.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:ri.assertOptions(r,{encode:ii.function,serialize:ii.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ri.assertOptions(t,{baseUrl:ii.spelling(`baseURL`),withXsrfToken:ii.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=fr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Vn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Qr.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new hr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function si(e){return function(t){return e.apply(null,t)}}function ci(e){return N.isObject(e)&&e.isAxiosError===!0}var li={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(li).forEach(([e,t])=>{li[t]=e});function ui(e){let t=new ai(e),n=vt(ai.prototype.request,t);return N.extend(n,ai.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return ui(kr(e,t))},n}var F=ui(tr);F.Axios=ai,F.CanceledError=hr,F.CancelToken=oi,F.isCancel=mr,F.VERSION=$r,F.toFormData=Pn,F.AxiosError=P,F.Cancel=F.CanceledError,F.all=function(e){return Promise.all(e)},F.spread=si,F.isAxiosError=ci,F.mergeConfig=kr,F.AxiosHeaders=fr,F.formToJSON=e=>$n(N.isHTMLForm(e)?new FormData(e):e),F.getAdapter=Xr.getAdapter,F.HttpStatusCode=li,F.default=F;var di=l(_()),fi=`order-demo-001`;function pi(e,t,n,r,i,a){return{eventId:e,aggregateId:fi,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function mi(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(pi(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var hi=mi();function gi(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:fi,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var _i=gi(hi);function vi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function yi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function bi(e){let t=[],n={};for(let r of e){let e={...n};n=vi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:yi(e,i)})}return t}var xi=bi(hi);function Si(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function Ci(e){return Si(e)?[fi]:[]}function wi(e){let t=Math.min(Math.max(e,1),500);return[...hi].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,t)}function Ti(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=hi.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:hi.slice(i,i+a),totalEvents:r}}function Ei(e){return e===`order-demo-001`?xi:[]}function Di(e){let t=Math.min(Math.max(e,1),500);return _i.slice(0,t)}function Oi(){return[...hi].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function ki(){return{status:`UP`,version:`demo`,demo:!0}}function Ai(){return!1}var ji=F.create({baseURL:`/api`});function Mi(e){return new Promise(t=>{setTimeout(t,e)})}function Ni(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var Pi=async(e,t=20,n)=>{let r=Ni(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(Ai()){await Mi(40);let n=Ci(e);try{let e=await ji.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return ji.get(r).then(e=>e.data)},Fi=async(e,t=500,n=0,r,i=`full`)=>{if(Ai()&&e===`order-demo-001`)return await Mi(50),Ti(e,t,n);let a=Ni(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return ji.get(a).then(e=>e.data)},Ii=async(e,t)=>Ai()&&e===`order-demo-001`?(await Mi(50),Ei(e)):ji.get(Ni(`/aggregates/${e}/transitions`,t)).then(e=>e.data),I=async(e=100,t)=>Ai()?(await Mi(45),Di(e)):ji.get(Ni(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),L=async(e=50,t)=>Ai()?(await Mi(35),wi(e)):ji.get(Ni(`/events/recent?limit=${e}`,t)).then(e=>e.data),Li=async()=>Ai()?(await Mi(20),ki()):ji.get(`/health`).then(e=>e.data),Ri=async()=>ji.get(`/v1/datasources`).then(e=>e.data),zi=async e=>ji.get(`/v1/datasources/${encodeURIComponent(e)}/health`).then(e=>e.data),Bi=async()=>ji.get(`/v1/plugins`).then(e=>e.data);function Vi(e,t){let[n,r]=(0,A.useState)(e);return(0,A.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function Hi({onSelect:e,source:t}){let[n,r]=(0,A.useState)(``),[i,a]=(0,A.useState)(!1),o=(0,A.useRef)(null),s=Vi(n,300),{data:c=[]}=_t({queryKey:[`search`,s,t??`default`],queryFn:()=>Pi(s,20,t),enabled:s.length>=2,staleTime:5e3});(0,A.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let l=(0,A.useRef)(null),u=(0,A.useCallback)(()=>{l.current?.focus(),l.current?.select()},[]);(0,A.useEffect)(()=>{document.getElementById(`aggregate-search`)?.addEventListener(`focus`,u)},[u]);let d=t=>{r(t),a(!1),e(t)};return(0,j.jsxs)(`div`,{className:`search-wrapper`,ref:o,children:[(0,j.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,j.jsx)(`input`,{id:`aggregate-search`,ref:l,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:n,onChange:e=>{r(e.target.value),a(!0)},onFocus:()=>n.length>=2&&a(!0),onKeyDown:e=>{e.key===`Enter`&&n.trim()&&d(n.trim()),e.key===`Escape`&&a(!1)},autoComplete:`off`}),i&&c.length>0&&(0,j.jsx)(`div`,{className:`search-results`,role:`listbox`,children:c.map(e=>(0,j.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>d(e),role:`option`,children:[(0,j.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,j.jsxs)(`span`,{className:`search-result-body`,children:[(0,j.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,j.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,j.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Ui(e,t){return _t({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Fi(e,500,0,t,`metadata`)})}function Wi(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}var Gi=4;function Ki(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:t.includes(`line_item`)||t.includes(`item`)&&t.includes(`add`)?`item`:t.includes(`payment`)||t.includes(`progress`)?`progress`:`default`}function qi(e){let t=[],n=0;for(;n=Gi)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n}),n=i;else{for(let r=n;rr(e.sequenceNumber),title:`${e.eventType}\n${Wi(e.timestamp).toLocaleString()}`,"aria-current":o?`step`:void 0,"aria-label":`Event ${t}, sequence ${e.sequenceNumber}, ${e.eventType}`,children:[(0,j.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,t]}),(0,j.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,e.sequenceNumber]}),(0,j.jsx)(`span`,{className:`timeline-step-type`,children:e.eventType})]})}function Xi({aggregateId:e,selectedSequence:t,onSelectEvent:n,source:r}){let{data:i,isLoading:a}=Ui(e,r),o=i?.events??[],s=i?.totalEvents??0,[c,l]=(0,A.useState)(null),[u,d]=(0,A.useState)(``),[f,p]=(0,A.useState)(``),m=(0,A.useMemo)(()=>o.length?qi(o):[],[o]),h=(0,A.useMemo)(()=>o.length?[...new Set(o.map(e=>e.eventType))].sort():[],[o]),g=(0,A.useMemo)(()=>f?o.filter(e=>e.eventType===f):o,[o,f]),_=(0,A.useMemo)(()=>g.length?qi(g):[],[g]),v=f?_:m,y=f?g:o,b=t==null?-1:y.findIndex(e=>e.sequenceNumber===t),x=b>=0?b+1:null,S=y[0]?.sequenceNumber??0,C=y[y.length-1]?.sequenceNumber??0,w=(0,A.useMemo)(()=>{if(!c)return null;for(let e of v)if(e.kind===`group`&&Ji(e.startIndex,e.items.length)===c)return e;return null},[c,v]);(0,A.useEffect)(()=>{if(!(t==null||b<0)){for(let e of v){if(e.kind!==`group`)continue;let t=e.startIndex+e.items.length-1;if(b>=e.startIndex&&b<=t){l(Ji(e.startIndex,e.items.length));return}}l(null)}},[t,b,v]),(0,A.useEffect)(()=>{if(t==null)return;let e=requestAnimationFrame(()=>{let e=document.querySelector(`[data-timeline-seq="${t}"]`),n=document.querySelector(`[data-timeline-group-anchor="1"]`);(e??n)?.scrollIntoView({inline:`center`,block:`nearest`,behavior:`smooth`})});return()=>cancelAnimationFrame(e)},[t,c,v]);let ee=(e,t)=>{let n=Ji(e,t);l(e=>e===n?null:n)},te=(0,A.useCallback)(e=>{if(!y.length)return;let t=e.target;if(t.tagName!==`INPUT`){if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let t=e.key===`ArrowLeft`?-1:1;if(e.shiftKey){let e=b>=0?v.find(e=>e.kind===`group`?b>=e.startIndex&&b=0&&e{let e=e=>ne.current(e);return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let T=()=>{let e=parseInt(u,10);!Number.isNaN(e)&&y.some(t=>t.sequenceNumber===e)&&(n(e),d(``))};return a?(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Event sequence`}),(0,j.jsx)(`div`,{className:`skeleton`,style:{height:64}})]}):o.length?(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,j.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Event sequence`,(0,j.jsxs)(`span`,{className:`timeline-count-pill`,children:[f?`${y.length} / ${s}`:s,` events`]})]}),(0,j.jsxs)(`div`,{className:`timeline-jump-group`,children:[(0,j.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>e.key===`Enter`&&T(),"aria-label":`Jump to sequence number`}),(0,j.jsx)(`button`,{type:`button`,className:`timeline-jump-btn`,onClick:T,children:`Go`})]})]}),h.length>1&&(0,j.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${f?``:`active`}`,onClick:()=>p(``),children:`All`}),h.map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(t=>t===e?``:e),children:e},e))]}),(0,j.jsxs)(`div`,{className:`timeline-rail`,children:[(0,j.jsx)(`div`,{className:`timeline-stepper`,role:`navigation`,"aria-label":`Events in order`,children:(0,j.jsx)(`div`,{className:`timeline-stepper-track`,children:v.map((e,r)=>(0,j.jsxs)(A.Fragment,{children:[r>0&&(0,j.jsx)(`span`,{className:`timeline-step-arrow`,"aria-hidden":!0,children:`>`}),e.kind===`single`?(0,j.jsx)(Yi,{event:e.event,stepNumber:e.index+1,selectedSequence:t,onSelectEvent:n}):(0,j.jsx)(Zi,{segment:e,selectedSequence:t,expanded:c===Ji(e.startIndex,e.items.length),onToggle:()=>ee(e.startIndex,e.items.length)})]},e.kind===`group`?`g-${e.startIndex}`:`s-${e.event.sequenceNumber}`))})}),w&&(0,j.jsxs)(`div`,{className:`timeline-expanded-deck`,children:[(0,j.jsxs)(`div`,{className:`timeline-expanded-head`,children:[(0,j.jsx)(`span`,{className:`timeline-expanded-title`,children:w.eventType}),(0,j.jsxs)(`span`,{className:`timeline-expanded-meta`,children:[w.items.length,` events steps `,w.startIndex+1,`-`,w.startIndex+w.items.length]}),(0,j.jsx)(`button`,{type:`button`,className:`timeline-expanded-close`,onClick:()=>l(null),children:`Collapse`})]}),(0,j.jsx)(`div`,{className:`timeline-expanded-strip`,children:w.items.map((e,r)=>(0,j.jsxs)(A.Fragment,{children:[r>0&&(0,j.jsx)(`span`,{className:`timeline-step-arrow timeline-step-arrow-compact`,"aria-hidden":!0,children:`>`}),(0,j.jsx)(Yi,{event:e,stepNumber:w.startIndex+r+1,selectedSequence:t,onSelectEvent:n,compact:!0})]},e.sequenceNumber))})]})]}),(0,j.jsx)(`input`,{type:`range`,className:`timeline-slider`,min:S,max:C,value:t??C,onChange:e=>n(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,j.jsxs)(`div`,{className:`timeline-info`,children:[(0,j.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,S]}),(0,j.jsx)(`span`,{className:`timeline-info-center`,children:x==null?`Select an event above or drag the scrubber`:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`strong`,{children:[`Step `,x]}),` of `,y.length,(0,j.jsxs)(`span`,{className:`timeline-info-muted`,children:[` sequence #`,t]}),(0,j.jsx)(`br`,{}),(0,j.jsx)(`span`,{className:`timeline-info-type`,children:y.find(e=>e.sequenceNumber===t)?.eventType??``})]})}),(0,j.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,C]})]})]}):(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Event sequence`}),(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`No events found for this aggregate.`})]})}function Zi({segment:e,selectedSequence:t,expanded:n,onToggle:r}){let{items:i,startIndex:a,eventType:o}=e,s=i[0],c=i[i.length-1],l=Ki(o),u=t!=null&&i.some(e=>e.sequenceNumber===t),d=u&&!n;return(0,j.jsxs)(`button`,{type:`button`,className:`timeline-group-chip timeline-step-${l} ${u?`has-selection`:``} ${n?`expanded`:``} ${u&&!n?`active`:``}`,onClick:r,"aria-expanded":n,"data-timeline-group-anchor":d?`1`:void 0,title:`${i.length} x ${o}. Click to ${n?`collapse`:`show every step`}.`,children:[(0,j.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,j.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,i.length]}),(0,j.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:n?`v`:`>`})]}),(0,j.jsx)(`span`,{className:`timeline-group-type`,children:o}),(0,j.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,a+1,`-`,a+i.length,` seq #`,s.sequenceNumber,`-#`,c.sequenceNumber]})]})}function Qi(e,t){return _t({queryKey:[`transitions`,e,t??`default`],queryFn:()=>Ii(e,t)})}function $i({diff:e}){let t=Object.entries(e),n=t.length>0,[r,i]=(0,A.useState)(`inline`);return n?(0,j.jsxs)(`div`,{className:`diff-panel`,children:[(0,j.jsxs)(`div`,{className:`diff-toolbar`,children:[(0,j.jsxs)(`div`,{className:`diff-toolbar-title`,children:[`Changes`,(0,j.jsxs)(`span`,{className:`diff-count-badge`,children:[t.length,` `,t.length===1?`field`:`fields`,` modified`]})]}),(0,j.jsxs)(`div`,{className:`diff-view-toggle`,role:`group`,"aria-label":`Diff layout`,children:[(0,j.jsx)(`button`,{type:`button`,className:r===`inline`?`active`:``,onClick:()=>i(`inline`),children:`Inline`}),(0,j.jsx)(`button`,{type:`button`,className:r===`split`?`active`:``,onClick:()=>i(`split`),children:`Side by side`})]})]}),(0,j.jsx)(`div`,{className:`diff-body`,children:(0,j.jsx)(`div`,{className:`diff-scroll`,children:r===`inline`?(0,j.jsx)(`div`,{className:`diff-list diff-list-inline`,children:t.map(([e,t],n)=>(0,j.jsxs)(`div`,{className:`diff-row`,children:[(0,j.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:n+1}),(0,j.jsxs)(`div`,{className:`diff-row-body`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e}),(0,j.jsxs)(`span`,{className:`diff-values-inline`,children:[(0,j.jsx)(`span`,{className:`diff-old`,children:JSON.stringify(t.oldValue)}),(0,j.jsx)(`span`,{className:`diff-arrow`,children:`→`}),(0,j.jsx)(`span`,{className:`diff-new`,children:JSON.stringify(t.newValue)})]})]})]},e))}):(0,j.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,j.jsxs)(`div`,{className:`diff-split-head`,children:[(0,j.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,j.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),t.map(([e,t],n)=>(0,j.jsxs)(`div`,{className:`diff-split-row`,children:[(0,j.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:n+1}),(0,j.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,j.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e}),(0,j.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(t.oldValue)})]}),(0,j.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e}),(0,j.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(t.newValue)})]})]})]},e))]})})})]}):null}function ea({open:e,onToggle:t}){return(0,j.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function ta({value:e}){return e===null?(0,j.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,j.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,j.jsx)(`span`,{className:`json-number`,children:e}):(0,j.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function na({value:e,changedKeys:t}){return(0,j.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,j.jsx)(ra,{value:e,depth:0,changedKeys:t,keyPath:``})})}function ra({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,A.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(ta,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,j.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,j.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,j.jsx)(ea,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,j.jsxs)(j.Fragment,{children:[e.map((e,n)=>(0,j.jsx)(ra,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,j.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,j.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,j.jsx)(ea,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,j.jsxs)(j.Fragment,{children:[i.map(([e,n])=>(0,j.jsx)(ra,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var ia=[{id:`changes`,label:`Changes`,emoji:`±`},{id:`before-after`,label:`Before / After`,emoji:`⇄`},{id:`raw`,label:`Raw JSON`,emoji:`{ }`}];function aa({aggregateId:e,sequence:t,activeTab:n,onTabChange:r,source:i}){let{data:a,isLoading:o}=Qi(e,i),[s,c]=(0,A.useState)(`changes`),l=n??s,u=e=>{c(e),r?.(e)};if(o)return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`🔬 State at Event`}),(0,j.jsx)(`div`,{className:`skeleton`,style:{height:120}})]});let d=a?.find(e=>e.event.sequenceNumber===t);if(!d)return null;let{event:f,stateBefore:p,stateAfter:m,diff:h}=d,g=Object.entries(h),_=g.length>0,v=new Set(g.map(([e])=>e));return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`card-title`,children:[`🔬 State at Event #`,f.sequenceNumber,(0,j.jsx)(`span`,{style:{color:`var(--accent-blue)`,background:`var(--accent-blue-dim)`,padding:`2px 8px`,borderRadius:4,fontSize:12},children:f.eventType}),_&&(0,j.jsxs)(`span`,{className:`diff-count-badge`,children:[g.length,` `,g.length===1?`change`:`changes`]})]}),(0,j.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:ia.map(e=>(0,j.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":l===e.id,className:`state-tab ${l===e.id?`active`:``}`,onClick:()=>u(e.id),children:[(0,j.jsx)(`span`,{className:`state-tab-emoji`,"aria-hidden":!0,children:e.emoji}),e.label]},e.id))}),(0,j.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[l===`changes`&&(0,j.jsx)(`div`,{children:_?(0,j.jsx)($i,{diff:h}):(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),l===`before-after`&&(0,j.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,j.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,j.jsx)(`h4`,{children:`Before`}),(0,j.jsx)(na,{value:p,changedKeys:v})]}),(0,j.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,j.jsx)(`h4`,{children:`After`}),(0,j.jsx)(na,{value:m,changedKeys:v})]})]}),l===`raw`&&(0,j.jsxs)(`div`,{style:{marginTop:12},children:[(0,j.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(f,null,2)}),(0,j.jsx)(`button`,{className:`copy-btn`,type:`button`,onClick:()=>navigator.clipboard.writeText(JSON.stringify(f,null,2)),children:`📋 Copy Event JSON`})]})]})]})}var oa=1e3,sa=3e4;function ca(e,t,n){let r=n?.enabled??!0,[i,a]=(0,A.useState)(()=>r?`connecting`:`connected`),o=(0,A.useRef)(null),s=(0,A.useRef)(t),c=(0,A.useRef)(oa);return s.current=t,(0,A.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=oa,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,sa),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var R=(0,A.createContext)(void 0);function la({children:e}){let[t,n]=(0,A.useState)([]),r=(0,A.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,j.jsxs)(R.Provider,{value:{notify:r},children:[e,(0,j.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,j.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function ua(){let e=(0,A.useContext)(R);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function da(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function fa(e){return da(e)}var pa=100;function ma(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function ha({source:e}){return(0,j.jsx)(va,{source:e})}function ga(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function _a(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function va({source:e}){let t=Ai(),[n,r]=(0,A.useState)(()=>t?Oi():[]),[i,a]=(0,A.useState)(!1),[o,s]=(0,A.useState)(null),c=(0,A.useRef)(null),l=(0,A.useRef)(i);l.current=i;let{notify:u}=ua();(0,A.useEffect)(()=>{s(null),r(t?Oi():[])},[e,t]);let d=ca(_a(e),e=>{if(ga(e)){s(e.source),r([]);return}s(null),!l.current&&r(t=>[...t.slice(-(pa-1)),e])},{enabled:!t}),f=(0,A.useRef)(u);f.current=u;let p=(0,A.useRef)(0);return(0,A.useEffect)(()=>{t||(d===`disconnected`?(p.current++,p.current<=1&&f.current(`Live stream disconnected. Retrying…`)):d===`connected`&&(p.current=0))},[d,t]),(0,A.useEffect)(()=>{!i&&c.current&&(c.current.scrollTop=c.current.scrollHeight)},[n,i]),(0,A.useEffect)(()=>{let e=()=>a(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`live-header`,children:[(0,j.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,j.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,j.jsxs)(`div`,{className:`live-indicator`,children:[(0,j.jsx)(`span`,{className:`dot ${d===`connected`?`dot-green`:d===`connecting`?`dot-yellow`:`dot-red`}`}),(0,j.jsx)(`span`,{style:{color:d===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:d===`connected`?i?`Paused`:`Live`:d})]}),(0,j.jsx)(`button`,{className:`pause-btn`,onClick:()=>a(!i),children:i?`▶ Resume`:`⏸ Pause`})]})]}),(0,j.jsxs)(`div`,{className:`event-stream`,ref:c,children:[o&&(0,j.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:o?` (${o})`:``,`.`]}),n.length===0&&(0,j.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:o?null:t?`Demo stream (static sample events)`:`Waiting for events…`}),n.map(e=>(0,j.jsxs)(`div`,{className:`event-row ${fa(e.eventType)}`,children:[(0,j.jsx)(`span`,{className:`event-icon`,children:ma(e.eventType)}),(0,j.jsx)(`span`,{className:`event-time`,children:Wi(e.timestamp).toLocaleTimeString()}),(0,j.jsx)(`span`,{className:`event-type ${da(e.eventType)}`,children:e.eventType}),(0,j.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function ya(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function ba(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function xa(){return(0,j.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,j.jsx)(`defs`,{children:(0,j.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,j.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,j.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,j.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function Sa({color:e}){return(0,j.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,j.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Ca({source:e}){let{data:t,isLoading:n}=_t({queryKey:[`anomalies`,e??`default`],queryFn:()=>I(100,e),refetchInterval:3e4}),r=t&&t.length>0;return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,j.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!n&&r&&(0,j.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${t.length} anomalies`,children:t.length})]}),n&&(0,j.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!n&&!r&&(0,j.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,j.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,j.jsx)(`div`,{className:`shield-icon`,children:(0,j.jsx)(xa,{})}),(0,j.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,j.jsxs)(`div`,{className:`gauge-row`,children:[(0,j.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,j.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,j.jsx)(Sa,{color:`green`})]}),(0,j.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,j.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,j.jsx)(Sa,{color:`cyan`})]}),(0,j.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,j.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,j.jsx)(Sa,{color:`green`})]})]})]}),!n&&r&&(0,j.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,j.jsx)(`div`,{className:`anomaly-list-inner`,children:t.map((e,t)=>(0,j.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,j.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,j.jsx)(`span`,{className:`anomaly-severity-badge ${ya(e.severity)}`,children:ba(e.severity)}),(0,j.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,j.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,j.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),(0,j.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,j.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,j.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,j.jsx)(`span`,{className:`anomaly-meta-value`,children:Wi(e.timestamp).toLocaleString()})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,j.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${t}`))})})]})}var wa=[{keys:`← →`,desc:`Navigate events`},{keys:`Shift+← →`,desc:`Jump to group boundary`},{keys:`1 – 3`,desc:`Switch tabs (Changes / ⇄ Before-After / Raw)`},{keys:`Cmd+K`,desc:`Focus search`},{keys:`Space`,desc:`Pause / resume live stream`},{keys:`?`,desc:`Toggle this hint bar`}];function Ta(){let[e,t]=(0,A.useState)(!1);return(0,A.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,j.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,j.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[wa.map(e=>(0,j.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,j.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,j.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`✕ Close`})]}):(0,j.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`← →`}),` Navigate`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`1–3`}),` Tabs`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Space`}),` Pause stream`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}function Ea(){return(0,j.jsxs)(`svg`,{viewBox:`0 0 40 40`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,j.jsx)(`defs`,{children:(0,j.jsxs)(`linearGradient`,{id:`lens-grad`,x1:`0`,y1:`0`,x2:`40`,y2:`40`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#00f0ff`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#ff00e5`})]})}),(0,j.jsx)(`circle`,{cx:`18`,cy:`18`,r:`11`,stroke:`url(#lens-grad)`,strokeWidth:`2.5`,fill:`none`}),(0,j.jsx)(`circle`,{cx:`18`,cy:`18`,r:`6`,stroke:`#00f0ff`,strokeWidth:`1`,fill:`none`,opacity:`0.5`}),(0,j.jsx)(`line`,{x1:`26`,y1:`26`,x2:`36`,y2:`36`,stroke:`url(#lens-grad)`,strokeWidth:`3`,strokeLinecap:`round`}),(0,j.jsx)(`polygon`,{points:`18,12 21,18 18,24 15,18`,fill:`#00f0ff`,opacity:`0.3`})]})}function Da(){return(0,j.jsx)(`div`,{className:`mini-wave`,children:[6,12,8,16,10,14,7,11,15,9].map((e,t)=>(0,j.jsx)(`div`,{className:`mini-wave-bar`,style:{height:e,animationDelay:`${t*.1}s`}},t))})}function Oa(e){let t=e.toLowerCase();return t===`ready`||t===`up`?`#00ff88`:t===`degraded`||t===`initializing`?`#ffd166`:`#ff6b6b`}function ka(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Aa(e){return e.toLowerCase()===`ready`}function ja({isUp:e,source:t}){let[n,r]=(0,A.useState)(0),[i,a]=(0,A.useState)(null),o=(0,A.useRef)(void 0);return(0,A.useEffect)(()=>{let e=Date.now();return o.current=setInterval(()=>{r(Math.floor((Date.now()-e)/1e3))},1e3),()=>clearInterval(o.current)},[]),(0,A.useEffect)(()=>{let e=()=>{L(500,t).then(e=>a(e.length)).catch(()=>{})};e();let n=setInterval(e,15e3);return()=>clearInterval(n)},[t]),(0,j.jsxs)(`div`,{className:`conn-stats`,children:[(0,j.jsx)(Da,{}),(0,j.jsxs)(`div`,{className:`conn-stat`,children:[(0,j.jsx)(`span`,{className:`conn-stat-label`,children:`API`}),(0,j.jsx)(`span`,{className:`conn-stat-value ${e?`green`:``}`,children:e?`Healthy`:`Down`})]}),(0,j.jsxs)(`div`,{className:`conn-stat conn-stat--metric`,children:[(0,j.jsx)(`span`,{className:`conn-stat-label`,children:`Events`}),(0,j.jsx)(`span`,{className:`conn-stat-value`,children:i??`...`})]}),(0,j.jsxs)(`div`,{className:`conn-stat conn-stat--uptime`,children:[(0,j.jsx)(`span`,{className:`conn-stat-label`,children:`Uptime`}),(0,j.jsx)(`span`,{className:`conn-stat-value green conn-stat-value--uptime`,children:(e=>{let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t}h ${String(n).padStart(2,`0`)}m`:n>0?`${String(n).padStart(2,`0`)}m ${String(r).padStart(2,`0`)}s`:`${String(r).padStart(2,`0`)}s`})(n)})]})]})}function Ma({aggregateId:e,sequence:t,totalEvents:n,source:r}){let{data:i}=_t({queryKey:[`transitions`,e,r??`default`],queryFn:()=>Ii(e,r),staleTime:3e4}),a=i?.find(e=>e.event.sequenceNumber===t);if(!a)return null;let{event:o,diff:s}=a,c=Object.keys(s).length,l=i?i.findIndex(e=>e.event.sequenceNumber===t)+1:null;return(0,j.jsxs)(`div`,{className:`event-summary-bar`,children:[(0,j.jsxs)(`div`,{className:`event-summary-left`,children:[(0,j.jsx)(`span`,{className:`event-summary-type`,children:o.eventType}),(0,j.jsxs)(`span`,{className:`event-summary-meta`,children:[`seq #`,t,l!==null&&` step ${l} of ${n}`,` `,Wi(o.timestamp).toLocaleTimeString(),r?` source ${r}`:``]})]}),c>0&&(0,j.jsxs)(`span`,{className:`event-summary-changes`,children:[c,` `,c===1?`field`:`fields`,` changed`]})]})}function Na({datasources:e,datasourceHealth:t,plugins:n}){return(0,j.jsxs)(`div`,{className:`plugin-dashboard`,children:[(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Datasources`}),(0,j.jsx)(`div`,{className:`plugin-cards-grid`,children:e.map((e,n)=>{let r=t[n],i=Oa(e.status);return(0,j.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,style:{borderLeft:`3px solid ${i}`},children:[(0,j.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,j.jsx)(`strong`,{children:e.displayName}),(0,j.jsx)(`span`,{className:`plugin-pill`,style:{color:i,borderColor:`${i}55`},children:e.status})]}),(0,j.jsx)(`div`,{className:`plugin-card-meta`,children:e.id}),r&&(0,j.jsxs)(`div`,{className:`plugin-card-detail`,children:[r.health.message,r.failureReason?` | ${r.failureReason}`:``]})]},e.id)})})]}),(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`All Plugins`}),(0,j.jsx)(`div`,{className:`plugin-cards-grid plugin-cards-grid--dense`,children:n.map(e=>(0,j.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,children:[(0,j.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,j.jsx)(`strong`,{children:e.displayName}),(0,j.jsx)(`span`,{className:`plugin-pill`,style:{color:Oa(e.lifecycle),borderColor:`${Oa(e.lifecycle)}55`},children:e.lifecycle})]}),(0,j.jsxs)(`div`,{className:`plugin-card-meta`,children:[e.pluginType,` | `,e.typeId]}),(0,j.jsx)(`div`,{className:`plugin-card-meta`,children:e.instanceId}),(0,j.jsxs)(`div`,{className:`plugin-card-detail`,children:[e.health.message,e.failureReason?` | ${e.failureReason}`:``]})]},e.instanceId))})]})]})}function Pa(){let[e,t]=(0,A.useState)(null),[n,r]=(0,A.useState)(null),[i,a]=(0,A.useState)(`changes`),[o,s]=(0,A.useState)(``),[c,l]=(0,A.useState)(window.location.hash||``),[u,d]=(0,A.useState)(!1);(0,A.useEffect)(()=>{let e=e=>{let t=e.detail;t&&a(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,A.useEffect)(()=>{let e=()=>l(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,A.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`tab`),c=e.get(`source`);if(n&&t(n),i!==null){let e=Number(i);Number.isNaN(e)||r(e)}o&&[`changes`,`before-after`,`raw`].includes(o)&&a(o),c&&s(c)},[]),(0,A.useEffect)(()=>{let t=new URLSearchParams(window.location.search);e?t.set(`aggregateId`,e):t.delete(`aggregateId`),n==null?t.delete(`seq`):t.set(`seq`,String(n)),t.set(`tab`,i),o?t.set(`source`,o):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[e,n,i,o]);let{data:f}=_t({queryKey:[`health`],queryFn:Li,refetchInterval:3e4}),{data:p=[]}=_t({queryKey:[`datasources`],queryFn:Ri,staleTime:1e4}),{data:m=[]}=_t({queryKey:[`plugins`],queryFn:Bi,staleTime:1e4}),h=ht({queries:p.map(e=>({queryKey:[`datasource-health`,e.id],queryFn:()=>zi(e.id),staleTime:1e4}))}).map(e=>e.data),g=f?.status===`UP`,_=e=>{t(e),r(null)},{data:v}=_t({queryKey:[`timeline-summary`,e,o||`default`],queryFn:()=>Fi(e,500,0,o||null,`metadata`),enabled:!!e,staleTime:3e4}),y=v?.totalEvents??0,b=c===`#/plugins`,x=p.filter(e=>ka(e.status)).length,S=m.filter(e=>ka(e.lifecycle)).length,C=p.length-x+(m.length-S);return(0,j.jsxs)(`div`,{className:`app`,children:[(0,j.jsxs)(`header`,{className:`app-header`,children:[(0,j.jsxs)(`div`,{className:`brand`,children:[(0,j.jsx)(`div`,{className:`brand-logo`,children:(0,j.jsx)(Ea,{})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,j.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})]}),(0,j.jsxs)(`div`,{className:`header-center`,children:[Ai()&&(0,j.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,j.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,j.jsxs)(`div`,{className:`header-actions`,children:[(0,j.jsx)(ja,{isUp:g,source:o||null}),(0,j.jsxs)(`div`,{className:`header-status`,children:[(0,j.jsx)(`span`,{className:`dot ${g?`dot-green`:`dot-red`}`}),(0,j.jsx)(`span`,{className:`status-text ${g?``:`offline`}`,children:g?`Connected`:f?.status??`Connecting`})]})]})]}),(0,j.jsxs)(`aside`,{className:`workspace-dock${u?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,j.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!u,children:[(0,j.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,j.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,j.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,j.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:o,onChange:e=>{s(e.target.value),r(null)},children:[(0,j.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),p.map(e=>(0,j.jsxs)(`option`,{value:e.id,disabled:!Aa(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,j.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Datasources Healthy`}),(0,j.jsxs)(`strong`,{children:[x,`/`,p.length||0]})]}),(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Plugins Healthy`}),(0,j.jsxs)(`strong`,{children:[S,`/`,m.length||0]})]}),(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Issues`}),(0,j.jsx)(`strong`,{children:C})]})]}),(0,j.jsxs)(`div`,{className:`workspace-sidebar-links`,children:[(0,j.jsx)(`span`,{children:`Datasources`}),(0,j.jsx)(`span`,{children:`All Plugins`})]})]}),(0,j.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>d(e=>!e),"aria-expanded":u,"aria-controls":`workspace-dock-panel`,"aria-label":u?`Collapse workspace`:`Expand workspace`,title:u?`Collapse workspace`:`Expand workspace`,children:(0,j.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:u?`›`:`‹`})})]}),u&&(0,j.jsx)(`button`,{type:`button`,className:`workspace-dock-scrim`,"aria-label":`Close workspace panel`,onClick:()=>d(!1)}),(0,j.jsx)(`main`,{className:`app-main`,children:(0,j.jsxs)(`div`,{className:`workspace-content`,children:[!b&&(0,j.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,j.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,j.jsx)(Hi,{onSelect:_,source:o||null}),e&&(0,j.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,j.jsx)(`span`,{style:{color:`var(--neon-cyan)`,textShadow:`0 0 6px rgba(0,240,255,0.3)`},children:e}),o?(0,j.jsxs)(`span`,{children:[` on `,o]}):(0,j.jsx)(`span`,{children:` on primary datasource`}),(0,j.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>t(null),children:`× clear`})]})]}),b?(0,j.jsx)(Na,{datasources:p,datasourceHealth:h,plugins:m}):(0,j.jsxs)(j.Fragment,{children:[e&&(0,j.jsx)(Xi,{aggregateId:e,selectedSequence:n,onSelectEvent:r,source:o||null}),e&&n!==null&&(0,j.jsx)(Ma,{aggregateId:e,sequence:n,totalEvents:y,source:o||null}),e&&n!==null&&(0,j.jsx)(aa,{aggregateId:e,sequence:n,activeTab:i,onTabChange:a,source:o||null}),(0,j.jsxs)(`div`,{className:`bottom-grid`,children:[(0,j.jsx)(ha,{source:o||null}),(0,j.jsx)(Ca,{source:o||null})]})]})]})}),(0,j.jsx)(Ta,{})]})}var Fa=class extends A.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,j.jsx)(`div`,{className:`app`,children:(0,j.jsx)(`main`,{className:`app-main`,children:(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Ia=new Ze({defaultOptions:{queries:{staleTime:3e4,retry:2}}});di.createRoot(document.getElementById(`root`)).render((0,j.jsx)(A.StrictMode,{children:(0,j.jsx)(nt,{client:Ia,children:(0,j.jsx)(la,{children:(0,j.jsx)(Fa,{children:(0,j.jsx)(Pa,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js b/eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js new file mode 100644 index 0000000..abbcc76 --- /dev/null +++ b/eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js @@ -0,0 +1,14 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():S=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function k(e,t){fe++,de[fe]=e.current,e.current=t}var me=pe(null),he=pe(null),ge=pe(null),_e=pe(null);function ve(e,t){switch(k(ge,t),k(he,e),k(me,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}O(me),k(me,e)}function ye(){O(me),O(he),O(ge)}function be(e){e.memoizedState!==null&&k(_e,e);var t=me.current,n=Hd(t,e.type);t!==n&&(k(he,e),k(me,n))}function xe(e){he.current===e&&(O(me),O(he)),_e.current===e&&(O(_e),Qf._currentValue=ue)}var Se,A;function Ce(e){if(Se===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Se=t&&t[1]||``,A=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{we=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ce(n):``}function Ee(e,t){switch(e.tag){case 26:case 27:case 5:return Ce(e.type);case 16:return Ce(`Lazy`);case 13:return e.child!==t&&t!==null?Ce(`Suspense Fallback`):Ce(`Suspense`);case 19:return Ce(`SuspenseList`);case 0:case 15:return Te(e.type,!1);case 11:return Te(e.type.render,!1);case 1:return Te(e.type,!0);case 31:return Ce(`Activity`);default:return``}}function De(e){try{var t=``,n=null;do t+=Ee(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var Oe=Object.prototype.hasOwnProperty,ke=t.unstable_scheduleCallback,Ae=t.unstable_cancelCallback,je=t.unstable_shouldYield,Me=t.unstable_requestPaint,Ne=t.unstable_now,Pe=t.unstable_getCurrentPriorityLevel,Fe=t.unstable_ImmediatePriority,Ie=t.unstable_UserBlockingPriority,Le=t.unstable_NormalPriority,Re=t.unstable_LowPriority,ze=t.unstable_IdlePriority,Be=t.log,Ve=t.unstable_setDisableYieldValue,He=null,Ue=null;function We(e){if(typeof Be==`function`&&Ve(e),Ue&&typeof Ue.setStrictMode==`function`)try{Ue.setStrictMode(He,e)}catch{}}var Ge=Math.clz32?Math.clz32:Je,Ke=Math.log,qe=Math.LN2;function Je(e){return e>>>=0,e===0?32:31-(Ke(e)/qe|0)|0}var Ye=256,Xe=262144,Ze=4194304;function Qe(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function $e(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Qe(n))):i=Qe(o):i=Qe(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Qe(n))):i=Qe(o)):i=Qe(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function j(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function M(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function et(){var e=Ze;return Ze<<=1,!(Ze&62914560)&&(Ze=4194304),e}function tt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function nt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function rt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),hn=!1;if(mn)try{var gn={};Object.defineProperty(gn,`passive`,{get:function(){hn=!0}}),window.addEventListener(`test`,gn,gn),window.removeEventListener(`test`,gn,gn)}catch{hn=!1}var _n=null,vn=null,yn=null;function bn(){if(yn)return yn;var e,t=vn,n=t.length,r,i=`value`in _n?_n.value:_n.textContent,a=i.length;for(e=0;e=Xn),$n=` `,er=!1;function tr(e,t){switch(e){case`keyup`:return Jn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function nr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var rr=!1;function ir(e,t){switch(e){case`compositionend`:return nr(t);case`keypress`:return t.which===32?(er=!0,$n):null;case`textInput`:return e=t.data,e===$n&&er?null:e;default:return null}}function ar(e,t){if(rr)return e===`compositionend`||!Yn&&tr(e,t)?(e=bn(),yn=vn=_n=null,rr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Dr(n)}}function kr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?kr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ar(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Vt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Vt(e.document)}return t}function jr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Mr=mn&&`documentMode`in document&&11>=document.documentMode,Nr=null,Pr=null,Fr=null,Ir=!1;function Lr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ir||Nr==null||Nr!==Vt(r)||(r=Nr,`selectionStart`in r&&jr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Fr&&Er(Fr,r)||(Fr=r,r=Ed(Pr,`onSelect`),0>=o,i-=o,Oi=1<<32-Ge(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),R&&Ai(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),R&&Ai(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return R&&Ai(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),R&&Ai(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&Oa(l)===r.type){n(e,r.sibling),c=a(r,o.props),Fa(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=hi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=mi(o.type,o.key,o.props,null,e.mode,c),Fa(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=vi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=Oa(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Pa(o),c);if(o.$$typeof===C)return b(e,r,ra(e,o),c);Ia(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=gi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Na=0;var i=b(e,t,n,r);return Ma=null,i}catch(t){if(t===Sa||t===wa)throw t;var a=I(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ra=La(!0),za=La(!1),Ba=!1;function Va(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ha(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ua(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ci(e),si(e,null,n),t}return ii(e,r,t,n),ci(e)}function Ga(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,at(e,n)}}function Ka(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var qa=!1;function Ja(){if(qa){var e=pa;if(e!==null)throw e}}function Ya(e,t,n,r){qa=!1;var i=e.updateQueue;Ba=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===fa&&(qa=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Ba=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Xa(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Za(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Fs(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ps(e,t,ga(c,r),pu(e)):Ps(e,t,r,pu(e))}catch(n){Ps(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function ws(){}function Ts(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Es(e).queue;Cs(e,a,t,ue,n===null?ws:function(){return Ds(e),n(r)})}function Es(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ds(e){var t=Es(e);t.next===null&&(t=e.alternate.memoizedState),Ps(e,t.next.queue,{},pu())}function Os(){return na(Qf)}function ks(){return jo().memoizedState}function As(){return jo().memoizedState}function js(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Ua(n);var r=Wa(t,e,n);r!==null&&(hu(r,t,n),Ga(r,t,n)),t={cache:ca()},e.payload=t;return}t=t.return}}function Ms(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Is(e)?Ls(t,n):(n=ai(e,t,n,r),n!==null&&(hu(n,e,r),Rs(n,t,r)))}function Ns(e,t,n){Ps(e,t,n,pu())}function Ps(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Is(e))Ls(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Tr(s,o))return ii(e,t,i,0),K===null&&ri(),!1}catch{}if(n=ai(e,t,i,r),n!==null)return hu(n,e,r),Rs(n,t,r),!0}return!1}function Fs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Is(e)){if(t)throw Error(i(479))}else t=ai(e,n,r,2),t!==null&&hu(t,e,2)}function Is(e){var t=e.alternate;return e===B||t!==null&&t===B}function Ls(e,t){go=ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Rs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,at(e,n)}}var zs={readContext:na,use:Po,useCallback:H,useContext:H,useEffect:H,useImperativeHandle:H,useLayoutEffect:H,useInsertionEffect:H,useMemo:H,useReducer:H,useRef:H,useState:H,useDebugValue:H,useDeferredValue:H,useTransition:H,useSyncExternalStore:H,useId:H,useHostTransitionStatus:H,useFormState:H,useActionState:H,useOptimistic:H,useMemoCache:H,useCacheRefresh:H};zs.useEffectEvent=H;var Bs={readContext:na,use:Po,useCallback:function(e,t){return Ao().memoizedState=[e,t===void 0?null:t],e},useContext:na,useEffect:us,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),cs(4194308,4,gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cs(4194308,4,e,t)},useInsertionEffect:function(e,t){cs(4,2,e,t)},useMemo:function(e,t){var n=Ao();t=t===void 0?null:t;var r=e();if(_o){We(!0);try{e()}finally{We(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Ao();if(n!==void 0){var i=n(t);if(_o){We(!0);try{n(t)}finally{We(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ms.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Ao();return e={current:e},t.memoizedState=e},useState:function(e){e=Ko(e);var t=e.queue,n=Ns.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:vs,useDeferredValue:function(e,t){return xs(Ao(),e,t)},useTransition:function(){var e=Ko(!1);return e=Cs.bind(null,B,e.queue,!0,!1),Ao().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=Ao();if(R){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Vo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,us(Uo.bind(null,r,o,e),[e]),r.flags|=2048,os(9,{destroy:void 0},Ho.bind(null,r,o,n,t),null),n},useId:function(){var e=Ao(),t=K.identifierPrefix;if(R){var n=ki,r=Oi;n=(r&~(1<<32-Ge(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=vo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[ft]=t,o[pt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Pc(t)}}return U(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Pc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ge.current,Hi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Fi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[ft]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||zi(t,!0)}else e=Bd(e).createTextNode(r),e[ft]=t,t.stateNode=e}return U(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Hi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[ft]=t}else Ui(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),e=!1}else n=Wi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(lo(t),t):(lo(t),null);if(t.flags&128)throw Error(i(558))}return U(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Hi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[ft]=t}else Ui(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),a=!1}else a=Wi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(lo(t),t):(lo(t),null)}return lo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Lc(t,t.updateQueue),U(t),null);case 4:return ye(),e===null&&Sd(t.stateNode.containerInfo),U(t),null;case 10:return Xi(t.type),U(t),null;case 19:if(O(uo),r=t.memoizedState,r===null)return U(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Rc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,Rc(r,!1),e=o.updateQueue,t.updateQueue=e,Lc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)pi(n,e),n=n.sibling;return k(uo,uo.current&1|2),R&&Ai(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ne()>tu&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Lc(t,e),Rc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!R)return U(t),null}else 2*Ne()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(U(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ne(),e.sibling=null,n=uo.current,k(uo,a?n&1|2:n&1),R&&Ai(t,r.treeForkCount),e);case 22:case 23:return lo(t),no(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(U(t),t.subtreeFlags&6&&(t.flags|=8192)):U(t),n=t.updateQueue,n!==null&&Lc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&O(va),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Xi(z),U(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Ni(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Xi(z),ye(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return xe(t),null;case 31:if(t.memoizedState!==null){if(lo(t),t.alternate===null)throw Error(i(340));Ui()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(lo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ui()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return O(uo),null;case 4:return ye(),null;case 10:return Xi(t.type),null;case 22:case 23:return lo(t),no(),e!==null&&O(va),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Xi(z),null;case 25:return null;default:return null}}function Vc(e,t){switch(Ni(t),t.tag){case 3:Xi(z),ye();break;case 26:case 27:case 5:xe(t);break;case 4:ye();break;case 31:t.memoizedState!==null&&lo(t);break;case 13:lo(t);break;case 19:O(uo);break;case 10:Xi(t.type);break;case 22:case 23:lo(t),no(),e!==null&&O(va);break;case 24:Xi(z)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Za(t,n)}catch(t){Z(e,e.return,t)}}}function Gc(e,t,n){n.props=qs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[pt]=t}catch(t){Z(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=an));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[ft]=e,t[pt]=n}catch(t){Z(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=Ar(e),jr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[ft]=e,N(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Or(s,h),v=Or(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),Ue&&typeof Ue.onPostCommitFiberRoot==`function`)try{Ue.onPostCommitFiberRoot(He,o)}catch{}return!0}finally{D.p=a,E.T=r,Vu(e,t)}}function Wu(e,t,n){t=bi(n,t),t=$s(e.stateNode,t,2),e=Wa(e,t,2),e!==null&&(nt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=bi(n,e),n=ec(2),r=Wa(t,n,2),r!==null&&(tc(n,r,t,e),nt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Ne()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=et()),e=oi(e,t),e!==null&&(nt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return ke(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ge(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=$e(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||j(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Ne(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Ut(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),N(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ut(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ut(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ut(n.imageSizes)+`"]`)):i+=`[href="`+Ut(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),N(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ut(r)+`"][href="`+Ut(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),N(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=wt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);N(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=wt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),N(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=wt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),N(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=ge.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=wt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=wt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=wt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Ut(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),N(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Ut(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ut(n.href)+`"]`);if(r)return t.instance=r,N(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),N(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,N(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),N(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,N(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),N(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,N(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),N(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},b={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},x=new class{#e=b;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function S(e){setTimeout(e,0)}var C=typeof window>`u`||`Deno`in globalThis;function w(){}function ee(e,t){return typeof e==`function`?e(t):e}function te(e){return typeof e==`number`&&e>=0&&e!==1/0}function ne(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){return typeof e==`function`?e(t):e}function ie(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==oe(o,t.options))return!1}else if(!ce(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ae(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(se(t.options.mutationKey)!==se(a))return!1}else if(!ce(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function oe(e,t){return(t?.queryKeyHashFn||se)(e)}function se(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ce(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>ce(e[n],t[n])):!1}var le=Object.prototype.hasOwnProperty;function E(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{x.setTimeout(t,e)})}function O(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function k(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function me(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var he=Symbol();function ge(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===he?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function _e(e,t){return typeof e==`function`?e(...t):!!e}function ve(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var ye=(()=>{let e=()=>C;return{isServer(){return e()},setIsServer(t){e=t}}})();function be(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var xe=S;function Se(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=xe,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var A=Se(),Ce=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function we(e){return Math.min(1e3*2**e,3e4)}function Te(e){return(e??`online`)===`online`?Ce.isOnline():!0}var Ee=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function De(e){let t=!1,n=0,r,i=be(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Ee(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>y.isFocused()&&(e.networkMode===`always`||Ce.isOnline())&&e.canRun(),u=()=>Te(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(ye.isServer()?0:3),o=e.retryDelay??we,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var Oe=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),te(this.gcTime)&&(this.#e=x.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(ye.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e&&=(x.clearTimeout(this.#e),void 0)}},ke=class extends Oe{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Me(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Me(this.options);e.data!==void 0&&(this.setState(je(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=O(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#c({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(w).catch(w):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>re(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===he||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>T(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!ne(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o||this.#s()?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#s(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=ge(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=De({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Ee&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Ee){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#c(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Ae(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...je(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),A.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function Ae(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Te(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function je(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Me(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ne=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=be(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Fe(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Ie(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Ie(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof re(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Le(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return ze(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(w)),t}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(ye.isServer()||this.#r.isStale||!te(e))return;let t=ne(this.#r.dataUpdatedAt,e)+1;this.#d=x.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(ye.isServer()||re(this.options.enabled,this.#t)===!1||!te(this.#p)||this.#p===0)&&(this.#f=x.setInterval(()=>{(this.options.refetchIntervalInBackground||y.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d&&=(x.clearTimeout(this.#d),void 0)}#x(){this.#f&&=(x.clearInterval(this.#f),void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Fe(e,t),o=i&&Le(e,n,t,r);(a||o)&&(l={...l,...Ae(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=O(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=O(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Re(e,t),refetch:this.refetch,promise:this.#o,isEnabled:re(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=be())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!D(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){A.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Pe(e,t){return re(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Fe(e,t){return Pe(e,t)||e.state.data!==void 0&&Ie(e,t,t.refetchOnMount)}function Ie(e,t,n){if(re(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Re(e,t)}return!1}function Le(e,t,n,r){return(e!==t||re(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Re(e,n)}function Re(e,t){return re(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}function ze(e,t){return!D(e.getCurrentResult(),t)}function Be(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ve(e,()=>t.signal,()=>n=!0)},u=ge(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?me:k;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?He:Ve,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Ve(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function Ve(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function He(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Ue=class extends Oe{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||We(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=De({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),A.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function We(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Ge=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ue({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=Ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){A.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ae(t,e))}findAll(e={}){return this.getAll().filter(t=>ae(e,t))}notify(e){A.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return A.batch(()=>Promise.all(e.map(e=>e.continue().catch(w))))}};function Ke(e){return e.options.scope?.id}function qe(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Je(e,t,n){let r=e.slice(0);return r[t]=n,r}var Ye=class extends v{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,A.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!D(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(qe(e,n).forEach(e=>{e.destroy()}),qe(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=E(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new Ne(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Je(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&A.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Xe=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??oe(r,t),a=this.get(i);return a||(a=new ke({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){A.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ie(e,t)):t}notify(e){A.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){A.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){A.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Ze=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Xe,this.#t=e.mutationCache||new Ge,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Ce.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(T(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=ee(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return A.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;A.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return A.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=A.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(w).catch(w)}invalidateQueries(e,t={}){return A.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=A.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(w)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(w)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(T(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(w).catch(w)}fetchInfiniteQuery(e){return e.behavior=Be(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(w).catch(w)}ensureInfiniteQueryData(e){return e.behavior=Be(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Ce.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(se(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(se(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=oe(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===he&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Qe=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),$e=o(((e,t)=>{t.exports=Qe()})),j=l(d(),1),M=$e(),et=j.createContext(void 0),tt=e=>{let t=j.useContext(et);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},nt=({client:e,children:t})=>(j.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,M.jsx)(et.Provider,{value:e,children:t})),rt=j.createContext(!1),it=()=>j.useContext(rt);rt.Provider;function at(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var ot=j.createContext(at()),st=()=>j.useContext(ot),ct=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?_e(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},lt=e=>{j.useEffect(()=>{e.clearReset()},[e])},ut=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||_e(n,[e.error,r])),dt=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},ft=(e,t)=>e.isLoading&&e.isFetching&&!t,pt=(e,t)=>e?.suspense&&t.isPending,mt=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function ht({queries:e,...t},n){let r=tt(n),i=it(),a=st(),o=j.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{dt(e),ct(e,a,r.getQueryCache().get(e.queryHash))}),lt(a);let[s]=j.useState(()=>new Ye(r,o,t)),[c,l,u]=s.getOptimisticResult(o,t.combine),d=!i&&t.subscribed!==!1;j.useSyncExternalStore(j.useCallback(e=>d?s.subscribe(A.batchCalls(e)):w,[s,d]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),j.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let f=c.some((e,t)=>pt(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&pt(n,e)?mt(n,new Ne(r,n),a):[]}):[];if(f.length>0)throw Promise.all(f);let p=c.find((e,t)=>{let n=o[t];return n&&ut({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(p?.error)throw p.error;return l(u())}function gt(e,t,n){let r=it(),i=st(),a=tt(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,dt(o),ct(o,i,s),lt(i);let c=!a.getQueryCache().get(o.queryHash),[l]=j.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(j.useSyncExternalStore(j.useCallback(e=>{let t=d?l.subscribe(A.batchCalls(e)):w;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),j.useEffect(()=>{l.setOptions(o)},[o,l]),pt(o,u))throw mt(o,l,i);if(ut({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!ye.isServer()&&ft(u,r)&&(c?mt(o,l,i):s?.promise)?.catch(w).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function _t(e,t){return gt(e,Ne,t)}function vt(e,t){return function(){return e.apply(t,arguments)}}var{toString:yt}=Object.prototype,{getPrototypeOf:bt}=Object,{iterator:xt,toStringTag:St}=Symbol,Ct=(e=>t=>{let n=yt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),wt=e=>(e=e.toLowerCase(),t=>Ct(t)===e),N=e=>t=>typeof t===e,{isArray:Tt}=Array,Et=N(`undefined`);function Dt(e){return e!==null&&!Et(e)&&e.constructor!==null&&!Et(e.constructor)&&jt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Ot=wt(`ArrayBuffer`);function kt(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ot(e.buffer),t}var At=N(`string`),jt=N(`function`),Mt=N(`number`),Nt=e=>typeof e==`object`&&!!e,Pt=e=>e===!0||e===!1,Ft=e=>{if(Ct(e)!==`object`)return!1;let t=bt(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(St in e)&&!(xt in e)},It=e=>{if(!Nt(e)||Dt(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Lt=wt(`Date`),Rt=wt(`File`),zt=e=>!!(e&&e.uri!==void 0),Bt=e=>e&&e.getParts!==void 0,Vt=wt(`Blob`),Ht=wt(`FileList`),Ut=e=>Nt(e)&&jt(e.pipe);function Wt(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var Gt=Wt(),Kt=Gt.FormData===void 0?void 0:Gt.FormData,qt=e=>{let t;return e&&(Kt&&e instanceof Kt||jt(e.append)&&((t=Ct(e))===`formdata`||t===`object`&&jt(e.toString)&&e.toString()===`[object FormData]`))},Jt=wt(`URLSearchParams`),[Yt,Xt,Zt,Qt]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(wt),$t=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function en(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),Tt(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}var nn=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,rn=e=>!Et(e)&&e!==nn;function an(){let{caseless:e,skipUndefined:t}=rn(this)&&this||{},n={},r=(r,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=e&&tn(n,i)||i;Ft(n[a])&&Ft(r)?n[a]=an(n[a],r):Ft(r)?n[a]=an({},r):Tt(r)?n[a]=r.slice():(!t||!Et(r))&&(n[a]=r)};for(let e=0,t=arguments.length;e(en(t,(t,r)=>{n&&jt(t)?Object.defineProperty(e,r,{value:vt(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),sn=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),cn=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{value:t.prototype}),n&&Object.assign(e.prototype,n)},ln=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&bt(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},un=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},dn=e=>{if(!e)return null;if(Tt(e))return e;let t=e.length;if(!Mt(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},fn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&bt(Uint8Array)),pn=(e,t)=>{let n=(e&&e[xt]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},mn=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},hn=wt(`HTMLFormElement`),gn=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),_n=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),vn=wt(`RegExp`),yn=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};en(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},bn=e=>{yn(e,(t,n)=>{if(jt(e)&&[`arguments`,`caller`,`callee`].indexOf(n)!==-1)return!1;let r=e[n];if(jt(r)){if(t.enumerable=!1,`writable`in t){t.writable=!1;return}t.set||=()=>{throw Error(`Can not rewrite read-only method '`+n+`'`)}}})},xn=(e,t)=>{let n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Tt(e)?r(e):r(String(e).split(t)),n},Sn=()=>{},Cn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function wn(e){return!!(e&&jt(e.append)&&e[St]===`FormData`&&e[xt])}var Tn=e=>{let t=Array(10),n=(e,r)=>{if(Nt(e)){if(t.indexOf(e)>=0)return;if(Dt(e))return e;if(!(`toJSON`in e)){t[r]=e;let i=Tt(e)?[]:{};return en(e,(e,t)=>{let a=n(e,r+1);!Et(a)&&(i[t]=a)}),t[r]=void 0,i}}return e};return n(e,0)},En=wt(`AsyncFunction`),Dn=e=>e&&(Nt(e)||jt(e))&&jt(e.then)&&jt(e.catch),On=((e,t)=>e?setImmediate:t?((e,t)=>(nn.addEventListener(`message`,({source:n,data:r})=>{n===nn&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),nn.postMessage(e,`*`)}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate==`function`,jt(nn.postMessage)),P={isArray:Tt,isArrayBuffer:Ot,isBuffer:Dt,isFormData:qt,isArrayBufferView:kt,isString:At,isNumber:Mt,isBoolean:Pt,isObject:Nt,isPlainObject:Ft,isEmptyObject:It,isReadableStream:Yt,isRequest:Xt,isResponse:Zt,isHeaders:Qt,isUndefined:Et,isDate:Lt,isFile:Rt,isReactNativeBlob:zt,isReactNative:Bt,isBlob:Vt,isRegExp:vn,isFunction:jt,isStream:Ut,isURLSearchParams:Jt,isTypedArray:fn,isFileList:Ht,forEach:en,merge:an,extend:on,trim:$t,stripBOM:sn,inherits:cn,toFlatObject:ln,kindOf:Ct,kindOfTest:wt,endsWith:un,toArray:dn,forEachEntry:pn,matchAll:mn,isHTMLForm:hn,hasOwnProperty:_n,hasOwnProp:_n,reduceDescriptors:yn,freezeMethods:bn,toObjectSet:xn,toCamelCase:gn,noop:Sn,toFiniteNumber:Cn,findKey:tn,global:nn,isContextDefined:rn,isSpecCompliantForm:wn,toJSONObject:Tn,isAsyncFn:En,isThenable:Dn,setImmediate:On,asap:typeof queueMicrotask<`u`?queueMicrotask.bind(nn):typeof process<`u`&&process.nextTick||On,isIterable:e=>e!=null&&jt(e[xt])},F=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:P.toJSONObject(this.config),code:this.code,status:this.status}}};F.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,F.ERR_BAD_OPTION=`ERR_BAD_OPTION`,F.ECONNABORTED=`ECONNABORTED`,F.ETIMEDOUT=`ETIMEDOUT`,F.ERR_NETWORK=`ERR_NETWORK`,F.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,F.ERR_DEPRECATED=`ERR_DEPRECATED`,F.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,F.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,F.ERR_CANCELED=`ERR_CANCELED`,F.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,F.ERR_INVALID_URL=`ERR_INVALID_URL`;function kn(e){return P.isPlainObject(e)||P.isArray(e)}function An(e){return P.endsWith(e,`[]`)?e.slice(0,-2):e}function jn(e,t,n){return e?e.concat(t).map(function(e,t){return e=An(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function Mn(e){return P.isArray(e)&&!e.some(kn)}var Nn=P.toFlatObject(P,{},null,function(e){return/^is[A-Z]/.test(e)});function Pn(e,t,n){if(!P.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=P.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!P.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||l,a=n.dots,o=n.indexes,s=(n.Blob||typeof Blob<`u`&&Blob)&&P.isSpecCompliantForm(t);if(!P.isFunction(i))throw TypeError(`visitor must be a function`);function c(e){if(e===null)return``;if(P.isDate(e))return e.toISOString();if(P.isBoolean(e))return e.toString();if(!s&&P.isBlob(e))throw new F(`Blob is not supported. Use a Buffer instead.`);return P.isArrayBuffer(e)||P.isTypedArray(e)?s&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function l(e,n,i){let s=e;if(P.isReactNative(t)&&P.isReactNativeBlob(e))return t.append(jn(i,n,a),c(e)),!1;if(e&&!i&&typeof e==`object`){if(P.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(P.isArray(e)&&Mn(e)||(P.isFileList(e)||P.endsWith(n,`[]`))&&(s=P.toArray(e)))return n=An(n),s.forEach(function(e,r){!(P.isUndefined(e)||e===null)&&t.append(o===!0?jn([n],r,a):o===null?n:n+`[]`,c(e))}),!1}return kn(e)?!0:(t.append(jn(i,n,a),c(e)),!1)}let u=[],d=Object.assign(Nn,{defaultVisitor:l,convertValue:c,isVisitable:kn});function f(e,n){if(!P.isUndefined(e)){if(u.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));u.push(e),P.forEach(e,function(e,r){(!(P.isUndefined(e)||e===null)&&i.call(t,e,P.isString(r)?r.trim():r,n,d))===!0&&f(e,n?n.concat(r):[r])}),u.pop()}}if(!P.isObject(e))throw TypeError(`data must be an object`);return f(e),t}function Fn(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`,"%00":`\0`};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function In(e,t){this._pairs=[],e&&Pn(e,this,t)}var Ln=In.prototype;Ln.append=function(e,t){this._pairs.push([e,t])},Ln.toString=function(e){let t=e?function(t){return e.call(this,t,Fn)}:Fn;return this._pairs.map(function(e){return t(e[0])+`=`+t(e[1])},``).join(`&`)};function Rn(e){return encodeURIComponent(e).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`).replace(/%20/g,`+`)}function zn(e,t,n){if(!t)return e;let r=n&&n.encode||Rn,i=P.isFunction(n)?{serialize:n}:n,a=i&&i.serialize,o;if(o=a?a(t,i):P.isURLSearchParams(t)?t.toString():new In(t,i).toString(r),o){let t=e.indexOf(`#`);t!==-1&&(e=e.slice(0,t)),e+=(e.indexOf(`?`)===-1?`?`:`&`)+o}return e}var Bn=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&=[]}forEach(e){P.forEach(this.handlers,function(t){t!==null&&e(t)})}},Vn={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Hn={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<`u`?URLSearchParams:In,FormData:typeof FormData<`u`?FormData:null,Blob:typeof Blob<`u`?Blob:null},protocols:[`http`,`https`,`file`,`blob`,`url`,`data`]},Un=s({hasBrowserEnv:()=>Wn,hasStandardBrowserEnv:()=>Kn,hasStandardBrowserWebWorkerEnv:()=>qn,navigator:()=>Gn,origin:()=>Jn}),Wn=typeof window<`u`&&typeof document<`u`,Gn=typeof navigator==`object`&&navigator||void 0,Kn=Wn&&(!Gn||[`ReactNative`,`NativeScript`,`NS`].indexOf(Gn.product)<0),qn=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope&&typeof self.importScripts==`function`,Jn=Wn&&window.location.href||`http://localhost`,Yn={...Un,...Hn};function Xn(e,t){return Pn(e,new Yn.classes.URLSearchParams,{visitor:function(e,t,n,r){return Yn.isNode&&P.isBuffer(e)?(this.append(t,e.toString(`base64`)),!1):r.defaultVisitor.apply(this,arguments)},...t})}function Zn(e){return P.matchAll(/\w+|\[(\w*)]/g,e).map(e=>e[0]===`[]`?``:e[1]||e[0])}function Qn(e){let t={},n=Object.keys(e),r,i=n.length,a;for(r=0;r=e.length;return a=!a&&P.isArray(r)?r.length:a,s?(P.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!o):((!r[a]||!P.isObject(r[a]))&&(r[a]=[]),t(e,n,r[a],i)&&P.isArray(r[a])&&(r[a]=Qn(r[a])),!o)}if(P.isFormData(e)&&P.isFunction(e.entries)){let n={};return P.forEachEntry(e,(e,r)=>{t(Zn(e),r,n,0)}),n}return null}function er(e,t,n){if(P.isString(e))try{return(t||JSON.parse)(e),P.trim(e)}catch(e){if(e.name!==`SyntaxError`)throw e}return(n||JSON.stringify)(e)}var tr={transitional:Vn,adapter:[`xhr`,`http`,`fetch`],transformRequest:[function(e,t){let n=t.getContentType()||``,r=n.indexOf(`application/json`)>-1,i=P.isObject(e);if(i&&P.isHTMLForm(e)&&(e=new FormData(e)),P.isFormData(e))return r?JSON.stringify($n(e)):e;if(P.isArrayBuffer(e)||P.isBuffer(e)||P.isStream(e)||P.isFile(e)||P.isBlob(e)||P.isReadableStream(e))return e;if(P.isArrayBufferView(e))return e.buffer;if(P.isURLSearchParams(e))return t.setContentType(`application/x-www-form-urlencoded;charset=utf-8`,!1),e.toString();let a;if(i){if(n.indexOf(`application/x-www-form-urlencoded`)>-1)return Xn(e,this.formSerializer).toString();if((a=P.isFileList(e))||n.indexOf(`multipart/form-data`)>-1){let t=this.env&&this.env.FormData;return Pn(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||r?(t.setContentType(`application/json`,!1),er(e)):e}],transformResponse:[function(e){let t=this.transitional||tr.transitional,n=t&&t.forcedJSONParsing,r=this.responseType===`json`;if(P.isResponse(e)||P.isReadableStream(e))return e;if(e&&P.isString(e)&&(n&&!this.responseType||r)){let n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n)throw e.name===`SyntaxError`?F.from(e,F.ERR_BAD_RESPONSE,this,null,this.response):e}}return e}],timeout:0,xsrfCookieName:`XSRF-TOKEN`,xsrfHeaderName:`X-XSRF-TOKEN`,maxContentLength:-1,maxBodyLength:-1,env:{FormData:Yn.classes.FormData,Blob:Yn.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:`application/json, text/plain, */*`,"Content-Type":void 0}}};P.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`],e=>{tr.headers[e]={}});var nr=P.toObjectSet([`age`,`authorization`,`content-length`,`content-type`,`etag`,`expires`,`from`,`host`,`if-modified-since`,`if-unmodified-since`,`last-modified`,`location`,`max-forwards`,`proxy-authorization`,`referer`,`retry-after`,`user-agent`]),rr=e=>{let t={},n,r,i;return e&&e.split(` +`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&nr[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t},ir=Symbol(`internals`);function ar(e){return e&&String(e).trim().toLowerCase()}function or(e){return e===!1||e==null?e:P.isArray(e)?e.map(or):String(e)}function sr(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var cr=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function lr(e,t,n,r,i){if(P.isFunction(r))return r.call(this,t,n);if(i&&(t=n),P.isString(t)){if(P.isString(r))return t.indexOf(r)!==-1;if(P.isRegExp(r))return r.test(t)}}function ur(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function dr(e,t){let n=P.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var fr=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=ar(t);if(!i)throw Error(`header name must be a non-empty string`);let a=P.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=or(e))}let a=(e,t)=>P.forEach(e,(e,n)=>i(e,n,t));if(P.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(P.isString(e)&&(e=e.trim())&&!cr(e))a(rr(e),t);else if(P.isObject(e)&&P.isIterable(e)){let n={},r,i;for(let t of e){if(!P.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?P.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=ar(e),e){let n=P.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return sr(e);if(P.isFunction(t))return t.call(this,e,n);if(P.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=ar(e),e){let n=P.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||lr(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=ar(e),e){let i=P.findKey(n,e);i&&(!t||lr(n,n[i],i,t))&&(delete n[i],r=!0)}}return P.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||lr(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return P.forEach(this,(r,i)=>{let a=P.findKey(n,i);if(a){t[a]=or(r),delete t[i];return}let o=e?ur(i):String(i).trim();o!==i&&delete t[i],t[o]=or(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return P.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&P.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(` +`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[ir]=this[ir]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=ar(e);t[r]||(dr(n,e),t[r]=!0)}return P.isArray(e)?e.forEach(r):r(e),this}};fr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),P.reduceDescriptors(fr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),P.freezeMethods(fr);function pr(e,t){let n=this||tr,r=t||n,i=fr.from(r.headers),a=r.data;return P.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function mr(e){return!!(e&&e.__CANCEL__)}var hr=class extends F{constructor(e,t,n){super(e??`canceled`,F.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function gr(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new F(`Request failed with status code `+n.status,[F.ERR_BAD_REQUEST,F.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function _r(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function vr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var br=(e,t,n=3)=>{let r=0,i=vr(50,250);return yr(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},xr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Sr=e=>(...t)=>P.asap(()=>e(...t)),Cr=Yn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Yn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Yn.origin),Yn.navigator&&/(msie|trident)/i.test(Yn.navigator.userAgent)):()=>!0,wr=Yn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];P.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),P.isString(r)&&s.push(`path=${r}`),P.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),P.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Tr(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Er(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function Dr(e,t,n){let r=!Tr(t);return e&&(r||n==0)?Er(e,t):t}var Or=e=>e instanceof fr?{...e}:e;function kr(e,t){t||={};let n={};function r(e,t,n,r){return P.isPlainObject(e)&&P.isPlainObject(t)?P.merge.call({caseless:r},e,t):P.isPlainObject(t)?P.merge({},t):P.isArray(t)?t.slice():t}function i(e,t,n,i){if(!P.isUndefined(t))return r(e,t,n,i);if(!P.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!P.isUndefined(t))return r(void 0,t)}function o(e,t){if(!P.isUndefined(t))return r(void 0,t);if(!P.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(Or(e),Or(t),n,!0)};return P.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=P.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);P.isUndefined(o)&&a!==s||(n[r]=o)}),n}var Ar=e=>{let t=kr({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=fr.from(o),t.url=zn(Dr(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),P.isFormData(n)){if(Yn.hasStandardBrowserEnv||Yn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(P.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Yn.hasStandardBrowserEnv&&(r&&P.isFunction(r)&&(r=r(t)),r||r!==!1&&Cr(t.url))){let e=i&&a&&wr.read(a);e&&o.set(i,e)}return t},jr=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=Ar(e),i=r.data,a=fr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=fr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());gr(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new F(`Request aborted`,F.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new F(t&&t.message?t.message:`Network Error`,F.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Vn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new F(t,i.clarifyTimeoutError?F.ETIMEDOUT:F.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&P.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),P.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=br(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=br(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new hr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=_r(r.url);if(_&&Yn.protocols.indexOf(_)===-1){n(new F(`Unsupported protocol `+_+`:`,F.ERR_BAD_REQUEST,e));return}h.send(i||null)})},Mr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof F?t:new hr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new F(`timeout of ${t}ms exceeded`,F.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>P.asap(o),s}},Nr=function*(e,t){let n=e.byteLength;if(!t||n{let i=Pr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Lr=64*1024,{isFunction:Rr}=P,zr=(({Request:e,Response:t})=>({Request:e,Response:t}))(P.global),{ReadableStream:Br,TextEncoder:Vr}=P.global,Hr=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Ur=e=>{e=P.merge.call({skipUndefined:!0},zr,e);let{fetch:t,Request:n,Response:r}=e,i=t?Rr(t):typeof fetch==`function`,a=Rr(n),o=Rr(r);if(!i)return!1;let s=i&&Rr(Br),c=i&&(typeof Vr==`function`?(e=>t=>e.encode(t))(new Vr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&Hr(()=>{let e=!1,t=new n(Yn.origin,{body:new Br,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&Hr(()=>P.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new F(`Response type '${e}' is not supported`,F.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(P.isBlob(e))return e.size;if(P.isSpecCompliantForm(e))return(await new n(Yn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(P.isArrayBufferView(e)||P.isArrayBuffer(e))return e.byteLength;if(P.isURLSearchParams(e)&&(e+=``),P.isString(e))return(await c(e)).byteLength},p=async(e,t)=>P.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=Ar(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=Mr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(P.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=xr(ee,br(Sr(g)));s=Ir(e.body,Lr,t,n)}}P.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=P.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&xr(t,br(Sr(h),!0))||[];f=new r(Ir(f.body,Lr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[P.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{gr(t,n,{data:te,headers:fr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new F(`Network Error`,F.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):F.from(t,t&&t.code,e,C,t&&t.response)}}},Wr=new Map,Gr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Wr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Ur(t)),l=c;return c};Gr();var Kr={http:null,xhr:jr,fetch:{get:Gr}};P.forEach(Kr,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var qr=e=>`- ${e}`,Jr=e=>P.isFunction(e)||e===null||e===!1;function Yr(e,t){e=P.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new F(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : +`+e.map(qr).join(` +`):` `+qr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var Xr={getAdapter:Yr,adapters:Kr};function Zr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new hr(null,e)}function Qr(e){return Zr(e),e.headers=fr.from(e.headers),e.data=pr.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),Xr.getAdapter(e.adapter||tr.adapter,e)(e).then(function(t){return Zr(e),t.data=pr.call(e,e.transformResponse,t),t.headers=fr.from(t.headers),t},function(t){return mr(t)||(Zr(e),t&&t.response&&(t.response.data=pr.call(e,e.transformResponse,t.response),t.response.headers=fr.from(t.response.headers))),Promise.reject(t)})}var $r=`1.13.6`,ei={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{ei[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var ti={};ei.transitional=function(e,t,n){function r(e,t){return`[Axios v`+$r+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new F(r(i,` has been removed`+(t?` in `+t:``)),F.ERR_DEPRECATED);return t&&!ti[i]&&(ti[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},ei.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function ni(e,t,n){if(typeof e!=`object`)throw new F(`options must be an object`,F.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new F(`option `+a+` must be `+n,F.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new F(`Unknown option `+a,F.ERR_BAD_OPTION)}}var ri={assertOptions:ni,validators:ei},ii=ri.validators,ai=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Bn,response:new Bn}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` +`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=kr(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ri.assertOptions(n,{silentJSONParsing:ii.transitional(ii.boolean),forcedJSONParsing:ii.transitional(ii.boolean),clarifyTimeoutError:ii.transitional(ii.boolean),legacyInterceptorReqResOrdering:ii.transitional(ii.boolean)},!1),r!=null&&(P.isFunction(r)?t.paramsSerializer={serialize:r}:ri.assertOptions(r,{encode:ii.function,serialize:ii.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ri.assertOptions(t,{baseUrl:ii.spelling(`baseURL`),withXsrfToken:ii.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&P.merge(i.common,i[t.method]);i&&P.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=fr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Vn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Qr.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new hr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function si(e){return function(t){return e.apply(null,t)}}function ci(e){return P.isObject(e)&&e.isAxiosError===!0}var li={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(li).forEach(([e,t])=>{li[t]=e});function ui(e){let t=new ai(e),n=vt(ai.prototype.request,t);return P.extend(n,ai.prototype,t,{allOwnKeys:!0}),P.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return ui(kr(e,t))},n}var I=ui(tr);I.Axios=ai,I.CanceledError=hr,I.CancelToken=oi,I.isCancel=mr,I.VERSION=$r,I.toFormData=Pn,I.AxiosError=F,I.Cancel=I.CanceledError,I.all=function(e){return Promise.all(e)},I.spread=si,I.isAxiosError=ci,I.mergeConfig=kr,I.AxiosHeaders=fr,I.formToJSON=e=>$n(P.isHTMLForm(e)?new FormData(e):e),I.getAdapter=Xr.getAdapter,I.HttpStatusCode=li,I.default=I;var di=l(_()),fi=`order-demo-001`;function pi(e,t,n,r,i,a){return{eventId:e,aggregateId:fi,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function mi(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(pi(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var hi=mi();function gi(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:fi,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var _i=gi(hi);function vi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function yi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function bi(e){let t=[],n={};for(let r of e){let e={...n};n=vi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:yi(e,i)})}return t}var xi=bi(hi);function Si(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function Ci(e){return Si(e)?[fi]:[]}function wi(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=hi.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:hi.slice(i,i+a),totalEvents:r}}function Ti(e){return e===`order-demo-001`?xi:[]}function Ei(e){let t=Math.min(Math.max(e,1),500);return _i.slice(0,t)}function Di(){return[...hi].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function Oi(){return{status:`UP`,version:`demo`,demo:!0}}function ki(){return!1}var Ai=I.create({baseURL:`/api`});function ji(e){return new Promise(t=>{setTimeout(t,e)})}function Mi(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var Ni=async(e,t=20,n)=>{let r=Mi(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(ki()){await ji(40);let n=Ci(e);try{let e=await Ai.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Ai.get(r).then(e=>e.data)},Pi=async(e,t=500,n=0,r,i=`full`)=>{if(ki()&&e===`order-demo-001`)return await ji(50),wi(e,t,n);let a=Mi(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Ai.get(a).then(e=>e.data)},Fi=async(e,t)=>ki()&&e===`order-demo-001`?(await ji(50),Ti(e)):Ai.get(Mi(`/aggregates/${e}/transitions`,t)).then(e=>e.data),L=async(e=100,t)=>ki()?(await ji(45),Ei(e)):Ai.get(Mi(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),R=async(e,t=1,n=24)=>{let r=Mi(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Ai.get(r).then(e=>e.data)},Ii=async()=>ki()?(await ji(20),Oi()):Ai.get(`/health`).then(e=>e.data),Li=async()=>Ai.get(`/v1/datasources`).then(e=>e.data),Ri=async e=>Ai.get(`/v1/datasources/${encodeURIComponent(e)}/health`).then(e=>e.data),zi=async()=>Ai.get(`/v1/plugins`).then(e=>e.data);function Bi(e,t){let[n,r]=(0,j.useState)(e);return(0,j.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function Vi({onSelect:e,source:t}){let[n,r]=(0,j.useState)(``),[i,a]=(0,j.useState)(!1),o=(0,j.useRef)(null),s=Bi(n,300),{data:c=[]}=_t({queryKey:[`search`,s,t??`default`],queryFn:()=>Ni(s,20,t),enabled:s.length>=2,staleTime:5e3});(0,j.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let l=(0,j.useRef)(null),u=(0,j.useCallback)(()=>{l.current?.focus(),l.current?.select()},[]);(0,j.useEffect)(()=>{document.getElementById(`aggregate-search`)?.addEventListener(`focus`,u)},[u]);let d=t=>{r(t),a(!1),e(t)};return(0,M.jsxs)(`div`,{className:`search-wrapper`,ref:o,children:[(0,M.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,M.jsx)(`input`,{id:`aggregate-search`,ref:l,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:n,onChange:e=>{r(e.target.value),a(!0)},onFocus:()=>n.length>=2&&a(!0),onKeyDown:e=>{e.key===`Enter`&&n.trim()&&d(n.trim()),e.key===`Escape`&&a(!1)},autoComplete:`off`}),i&&c.length>0&&(0,M.jsx)(`div`,{className:`search-results`,role:`listbox`,children:c.map(e=>(0,M.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>d(e),role:`option`,children:[(0,M.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,M.jsxs)(`span`,{className:`search-result-body`,children:[(0,M.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,M.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,M.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Hi(e,t){return _t({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Pi(e,500,0,t,`metadata`),enabled:!!e})}function Ui(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}var Wi=4,Gi=58,Ki=360,qi=6,Ji=[1,6,24,168];function Yi(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function Xi(e){let t=[],n=0;for(;n=Wi)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function $i(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function ea(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function ta({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Hi(e,a),[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(``),[f,p]=(0,j.useState)(`all`),[m,h]=(0,j.useState)(null),[g,_]=(0,j.useState)(0),v=(0,j.useRef)(null),y=o?.events??[],b=o?.totalEvents??0,x=(0,j.useMemo)(()=>{let e=y;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Ui(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Ui(e.timestamp).getTime()>=t)}return e},[y,c,f]),S=(0,j.useMemo)(()=>Xi(x),[x]),C=(0,j.useMemo)(()=>[...new Set(y.map(e=>e.eventType))].sort(),[y]);(0,j.useEffect)(()=>{if(t!=null){for(let e of S)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(Zi(e.startIndex,e.items.length));return}h(null)}},[S,t]);let w=(0,j.useMemo)(()=>Qi(S,m,t),[m,S,t]),ee=(0,j.useMemo)(()=>t==null?-1:w.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[w,t]);(0,j.useEffect)(()=>{let e=e=>{let t=e.detail;if(w.length&&(t<0||t>0)){let e=ee>=0?ee:0;r($i(w[Math.max(0,Math.min(w.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,w,ee]),(0,j.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!w.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=w.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,w,t]),(0,j.useEffect)(()=>{if(ee<0||!v.current)return;let e=ee*Gi,t=e+Gi;eg+Ki&&(v.current.scrollTop=t-Ki)},[g,ee]);let te=Math.max(0,Math.floor(g/Gi)-qi),ne=Math.min(w.length,Math.ceil((g+Ki)/Gi)+qi),T=w.slice(te,ne);if(s)return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,M.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!y.length)return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let re=x[0]?.sequenceNumber??0,ie=x[x.length-1]?.sequenceNumber??0;return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,M.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Enhanced Timeline`,(0,M.jsxs)(`span`,{className:`timeline-count-pill`,children:[x.length,` / `,b,` events`]})]}),(0,M.jsx)(`div`,{className:`timeline-jump-group`,children:(0,M.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);x.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,M.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),C.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,M.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),Ji.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,M.jsx)(`div`,{ref:v,className:`timeline-virtual-container`,style:{position:`relative`,overflowY:`auto`,maxHeight:Ki},onScroll:e=>_(e.currentTarget.scrollTop),children:(0,M.jsx)(`div`,{style:{height:w.length*Gi,position:`relative`},children:T.map((e,a)=>{let o=(te+a)*Gi;if(e.kind===`group`)return(0,M.jsxs)(`button`,{type:`button`,className:`timeline-group-chip timeline-step-${Yi(e.eventType)} ${e.containsSelection?`active`:``} ${e.expanded?`expanded`:``}`,style:{position:`absolute`,top:o,left:0,right:0,height:Gi-6},onClick:()=>h(t=>t===Zi(e.startIndex,e.items.length)?null:Zi(e.startIndex,e.items.length)),"aria-expanded":e.expanded,children:[(0,M.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,M.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,M.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:e.expanded?`v`:`>`})]}),(0,M.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,M.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]},e.key);let s=e.event,c=t===s.sequenceNumber,l=n===s.sequenceNumber,u=e.kind===`group-item`?` timeline-step-compact`:``;return(0,M.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${Yi(s.eventType)} ${c?`active`:``} ${l?`timeline-step-compare`:``}${u}`,style:{position:`absolute`,top:o,left:0,right:0,height:Gi-6},onClick:e=>{e.shiftKey&&i?i(s.sequenceNumber===n?null:s.sequenceNumber):r(s.sequenceNumber)},"aria-current":c?`step`:void 0,"aria-selected":c,"aria-label":ea(e.stepNumber,s),children:[(0,M.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,M.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,s.sequenceNumber]}),(0,M.jsx)(`span`,{className:`timeline-step-type`,children:s.eventType}),(0,M.jsx)(`span`,{className:`timeline-step-seq`,children:Ui(s.timestamp).toLocaleTimeString()})]},e.key)})})}),(0,M.jsx)(`input`,{type:`range`,className:`timeline-slider`,min:re,max:ie,value:t??ie,onChange:e=>r(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,M.jsxs)(`div`,{className:`timeline-info`,children:[(0,M.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,re]}),(0,M.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,M.jsxs)(`span`,{className:`timeline-info-muted`,children:[` in `,w.length,` visible rows`]})]})}),(0,M.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ie]})]})]})}function na(e,t){return _t({queryKey:[`transitions`,e,t??`default`],queryFn:()=>Fi(e,t),enabled:!!e})}function ra(e,t,n=!0){let[r,i]=(0,j.useState)([]),[a,o]=(0,j.useState)(0),[s,c]=(0,j.useState)(!1),l=(0,j.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,j.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-ClgOBOoF.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function ia({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,M.jsxs)(`div`,{className:`diff-panel`,children:[(0,M.jsx)(`div`,{className:`diff-toolbar`,children:(0,M.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,M.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,M.jsx)(`div`,{className:`diff-body`,children:(0,M.jsx)(`div`,{className:`diff-scroll`,children:(0,M.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,M.jsxs)(`div`,{className:`diff-split-head`,children:[(0,M.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,M.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,M.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,M.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,M.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,M.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,M.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,M.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,M.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,M.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,M.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function aa({open:e,onToggle:t}){return(0,M.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function oa({value:e}){return e===null?(0,M.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,M.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,M.jsx)(`span`,{className:`json-number`,children:e}):(0,M.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function sa({value:e,changedKeys:t}){return(0,M.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,M.jsx)(z,{value:e,depth:0,changedKeys:t,keyPath:``})})}function z({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,j.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,M.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(oa,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,M.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,M.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,M.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,M.jsx)(aa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,M.jsxs)(M.Fragment,{children:[e.map((e,n)=>(0,M.jsx)(z,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,M.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,M.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,M.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,M.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,M.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,M.jsx)(aa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,M.jsxs)(M.Fragment,{children:[i.map(([e,n])=>(0,M.jsx)(z,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,M.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,M.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,M.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,M.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var ca=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function la({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,source:a}){let{data:o=[],isLoading:s}=na(e,a),[c,l]=(0,j.useState)(`changes`),u=r??c,d=e=>{l(e),i?.(e)},f=o.find(e=>e.event.sequenceNumber===t)??null,p=n==null?null:o.find(e=>e.event.sequenceNumber===n)??null,m=f!=null&&p!=null&&f.event.sequenceNumber!==p.event.sequenceNumber,h=m?p.stateAfter:f?.stateBefore,g=f?.stateAfter,{patches:_,loading:v,durationMs:y}=ra(h,g,m&&!!h&&!!g),b=(0,j.useMemo)(()=>m?new Set(_.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(f?.diff??{})),[m,_,f?.diff]);return s?(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`State`}),(0,M.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):f?(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,f.event.sequenceNumber,(0,M.jsx)(`span`,{className:`diff-count-badge`,children:f.event.eventType}),m&&(0,M.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,p?.event.sequenceNumber]}),m&&!v&&(0,M.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,y.toFixed(1),`ms`]})]}),(0,M.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:ca.map(e=>(0,M.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":u===e.id,className:`state-tab ${u===e.id?`active`:``}`,onClick:()=>d(e.id),children:e.label},e.id))}),(0,M.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[u===`changes`&&(0,M.jsx)(`div`,{children:m?v?(0,M.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,M.jsx)(ia,{patches:_,title:`Structural diff`}):f.diff&&Object.keys(f.diff).length>0?(0,M.jsx)(ia,{diff:f.diff}):(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),u===`before-after`&&(0,M.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,M.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,M.jsx)(`h4`,{children:m?`Event #${p?.event.sequenceNumber}`:`Before`}),(0,M.jsx)(sa,{value:h??{},changedKeys:b})]}),(0,M.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,M.jsx)(`h4`,{children:m?`Event #${f.event.sequenceNumber}`:`After`}),(0,M.jsx)(sa,{value:g??{},changedKeys:b})]})]}),u===`raw`&&(0,M.jsx)(`div`,{style:{marginTop:12},children:(0,M.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(m?{leftEvent:p?.event,rightEvent:f.event,leftState:h,rightState:g}:f.event,null,2)})})]})]}):null}var ua=1e3,da=3e4;function fa(e,t,n){let r=n?.enabled??!0,[i,a]=(0,j.useState)(()=>r?`connecting`:`connected`),o=(0,j.useRef)(null),s=(0,j.useRef)(t),c=(0,j.useRef)(ua);return s.current=t,(0,j.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=ua,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,da),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var pa=(0,j.createContext)(void 0);function ma({children:e}){let[t,n]=(0,j.useState)([]),r=(0,j.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,M.jsxs)(pa.Provider,{value:{notify:r},children:[e,(0,M.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,M.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function ha(){let e=(0,j.useContext)(pa);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function ga(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function _a(e){return ga(e)}var va=100;function ya(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function ba({source:e}){return(0,M.jsx)(Ca,{source:e})}function xa(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function Sa(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function Ca({source:e}){let t=ki(),[n,r]=(0,j.useState)(()=>t?Di():[]),[i,a]=(0,j.useState)(!1),[o,s]=(0,j.useState)(null),c=(0,j.useRef)(null),l=(0,j.useRef)(i);l.current=i;let{notify:u}=ha();(0,j.useEffect)(()=>{s(null),r(t?Di():[])},[e,t]);let d=fa(Sa(e),e=>{if(xa(e)){s(e.source),r([]);return}s(null),!l.current&&r(t=>[...t.slice(-(va-1)),e])},{enabled:!t}),f=(0,j.useRef)(u);f.current=u;let p=(0,j.useRef)(0);return(0,j.useEffect)(()=>{t||(d===`disconnected`?(p.current++,p.current<=1&&f.current(`Live stream disconnected. Retrying…`)):d===`connected`&&(p.current=0))},[d,t]),(0,j.useEffect)(()=>{!i&&c.current&&(c.current.scrollTop=c.current.scrollHeight)},[n,i]),(0,j.useEffect)(()=>{let e=()=>a(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`live-header`,children:[(0,M.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,M.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,M.jsxs)(`div`,{className:`live-indicator`,children:[(0,M.jsx)(`span`,{className:`dot ${d===`connected`?`dot-green`:d===`connecting`?`dot-yellow`:`dot-red`}`}),(0,M.jsx)(`span`,{style:{color:d===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:d===`connected`?i?`Paused`:`Live`:d})]}),(0,M.jsx)(`button`,{className:`pause-btn`,onClick:()=>a(!i),children:i?`▶ Resume`:`⏸ Pause`})]})]}),(0,M.jsxs)(`div`,{className:`event-stream`,ref:c,children:[o&&(0,M.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:o?` (${o})`:``,`.`]}),n.length===0&&(0,M.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:o?null:t?`Demo stream (static sample events)`:`Waiting for events…`}),n.map(e=>(0,M.jsxs)(`div`,{className:`event-row ${_a(e.eventType)}`,children:[(0,M.jsx)(`span`,{className:`event-icon`,children:ya(e.eventType)}),(0,M.jsx)(`span`,{className:`event-time`,children:Ui(e.timestamp).toLocaleTimeString()}),(0,M.jsx)(`span`,{className:`event-type ${ga(e.eventType)}`,children:e.eventType}),(0,M.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function wa(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Ta(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Ea(){return(0,M.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,M.jsx)(`defs`,{children:(0,M.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,M.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,M.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,M.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,M.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,M.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function Da({color:e}){return(0,M.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,M.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Oa({source:e}){let{data:t,isLoading:n}=_t({queryKey:[`anomalies`,e??`default`],queryFn:()=>L(100,e),refetchInterval:3e4}),r=t&&t.length>0;return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,M.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!n&&r&&(0,M.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${t.length} anomalies`,children:t.length})]}),n&&(0,M.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!n&&!r&&(0,M.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,M.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,M.jsx)(`div`,{className:`shield-icon`,children:(0,M.jsx)(Ea,{})}),(0,M.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,M.jsxs)(`div`,{className:`gauge-row`,children:[(0,M.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,M.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,M.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,M.jsx)(Da,{color:`green`})]}),(0,M.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,M.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,M.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,M.jsx)(Da,{color:`cyan`})]}),(0,M.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,M.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,M.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,M.jsx)(Da,{color:`green`})]})]})]}),!n&&r&&(0,M.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,M.jsx)(`div`,{className:`anomaly-list-inner`,children:t.map((e,t)=>(0,M.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,M.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,M.jsx)(`span`,{className:`anomaly-severity-badge ${wa(e.severity)}`,children:Ta(e.severity)}),(0,M.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,M.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,M.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),(0,M.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,M.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,M.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,M.jsx)(`span`,{className:`anomaly-meta-value`,children:Ui(e.timestamp).toLocaleString()})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,M.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${t}`))})})]})}var ka=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Aa(){let[e,t]=(0,j.useState)(!1);return(0,j.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,M.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,M.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[ka.map(e=>(0,M.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,M.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,M.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,M.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,M.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,M.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,M.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}function ja({transitions:e,selectedSequence:t,onSelectSequence:n}){if(!e.length)return null;let r=e.find(e=>e.event.sequenceNumber===t)??e[0],i=e.findIndex(e=>e.event.sequenceNumber===r.event.sequenceNumber);return(0,M.jsxs)(`div`,{className:`card replay-debugger`,tabIndex:0,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,M.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.max(i-1,0)].event.sequenceNumber),title:`Step backward`,children:`Previous`}),(0,M.jsxs)(`div`,{className:`replay-position`,children:[`Event `,i+1,` of `,e.length]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.min(i+1,e.length-1)].event.sequenceNumber),title:`Step forward`,children:`Next`})]}),(0,M.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:i,onChange:t=>n(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,M.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,M.jsx)(`h4`,{children:`Current State`}),(0,M.jsx)(sa,{value:r.stateAfter,changedKeys:new Set(Object.keys(r.diff))})]})]})}function Ma(e,t=1,n=24){return _t({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>R(e,t,n),staleTime:3e4})}function Na({source:e}){let[t,n]=(0,j.useState)(24),{data:r,isLoading:i}=Ma(e,1,t);return(0,M.jsxs)(`div`,{className:`card statistics-panel`,"aria-busy":i,children:[(0,M.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,M.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${t===e?`active`:``}`,onClick:()=>n(e),children:e===72?`3d`:`${e}h`},e))}),i&&(0,M.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!i&&r&&!r.available&&(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`},children:r.message??`Statistics not available.`}),!i&&r?.available&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`stats-kpis`,children:[(0,M.jsxs)(`div`,{className:`stat-card`,children:[(0,M.jsx)(`strong`,{children:r.totalEvents}),(0,M.jsx)(`span`,{children:`Total events`})]}),(0,M.jsxs)(`div`,{className:`stat-card`,children:[(0,M.jsx)(`strong`,{children:r.distinctAggregates}),(0,M.jsx)(`span`,{children:`Aggregates`})]}),(0,M.jsxs)(`div`,{className:`stat-card`,children:[(0,M.jsx)(`strong`,{children:r.eventTypes.length}),(0,M.jsx)(`span`,{children:`Event types`})]})]}),(0,M.jsx)(`div`,{className:`stats-chart`,children:r.throughput.map(e=>(0,M.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,M.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,M.jsx)(`div`,{className:`stats-bar-track`,children:(0,M.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...r.throughput.map(e=>e.count),1)*100)}%`}})}),(0,M.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,M.jsxs)(`div`,{className:`stats-distribution`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h4`,{children:`Event Types`}),r.eventTypes.map(e=>(0,M.jsxs)(`div`,{className:`stats-list-row`,children:[(0,M.jsx)(`span`,{children:e.type}),(0,M.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h4`,{children:`Aggregate Types`}),r.aggregateTypes.map(e=>(0,M.jsxs)(`div`,{className:`stats-list-row`,children:[(0,M.jsx)(`span`,{children:e.type}),(0,M.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Pa({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenStats:i,onOpenPlugins:a}){let[o,s]=(0,j.useState)(``),[c,l]=(0,j.useState)(0),{data:u=[]}=_t({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>Ni(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,j.useEffect)(()=>{e?l(0):s(``)},[e]);let d=(0,j.useMemo)(()=>{let e=[{id:`stats`,label:`Go to statistics panel`,action:i},{id:`plugins`,label:`Go to plugin health`,action:a}],t=u.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&u.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[u,a,i,r,o]);return(0,j.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(d.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),d[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[d,n,e,c]),e?(0,M.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,M.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,onClick:e=>e.stopPropagation(),children:[(0,M.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,M.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,children:[d.map((e,t)=>(0,M.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),d.length===0&&(0,M.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function Fa({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,j.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Ia(e){let t=e.toLowerCase();return t===`ready`||t===`up`?`#00ff88`:t===`degraded`||t===`initializing`?`#ffd166`:`#ff6b6b`}function La(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Ra(e){return e.toLowerCase()===`ready`}function za({datasources:e,datasourceHealth:t,plugins:n}){return(0,M.jsxs)(`div`,{className:`plugin-dashboard`,children:[(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Datasources`}),(0,M.jsx)(`div`,{className:`plugin-cards-grid`,children:e.map((e,n)=>{let r=t[n],i=Ia(e.status);return(0,M.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,style:{borderLeft:`3px solid ${i}`},children:[(0,M.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,M.jsx)(`strong`,{children:e.displayName}),(0,M.jsx)(`span`,{className:`plugin-pill`,style:{color:i,borderColor:`${i}55`},children:e.status})]}),(0,M.jsx)(`div`,{className:`plugin-card-meta`,children:e.id}),r&&(0,M.jsxs)(`div`,{className:`plugin-card-detail`,children:[r.health.message,r.failureReason?` | ${r.failureReason}`:``]})]},e.id)})})]}),(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`All Plugins`}),(0,M.jsx)(`div`,{className:`plugin-cards-grid plugin-cards-grid--dense`,children:n.map(e=>(0,M.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,children:[(0,M.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,M.jsx)(`strong`,{children:e.displayName}),(0,M.jsx)(`span`,{className:`plugin-pill`,style:{color:Ia(e.lifecycle),borderColor:`${Ia(e.lifecycle)}55`},children:e.lifecycle})]}),(0,M.jsxs)(`div`,{className:`plugin-card-meta`,children:[e.pluginType,` | `,e.typeId]}),(0,M.jsx)(`div`,{className:`plugin-card-meta`,children:e.instanceId}),(0,M.jsxs)(`div`,{className:`plugin-card-detail`,children:[e.health.message,e.failureReason?` | ${e.failureReason}`:``]})]},e.instanceId))})]})]})}function Ba(){let[e,t]=(0,j.useState)(null),[n,r]=(0,j.useState)(null),[i,a]=(0,j.useState)(null),[o,s]=(0,j.useState)(`changes`),[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(window.location.hash||``),[f,p]=(0,j.useState)(!1),[m,h]=(0,j.useState)(!1);(0,j.useEffect)(()=>{let e=()=>d(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,j.useEffect)(()=>{let e=e=>{let t=e.detail;t&&s(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,j.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`source`);n&&t(n),i&&r(Number(i)),o&&a(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&s(c),u&&l(u)},[]),(0,j.useEffect)(()=>{let t=new URLSearchParams(window.location.search);e?t.set(`aggregateId`,e):t.delete(`aggregateId`),n==null?t.delete(`seq`):t.set(`seq`,String(n)),i==null?t.delete(`compare`):t.set(`compare`,String(i)),t.set(`tab`,o),c?t.set(`source`,c):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[o,i,e,n,c]);let{data:g}=_t({queryKey:[`health`],queryFn:Ii,refetchInterval:3e4}),{data:_=[]}=_t({queryKey:[`datasources`],queryFn:Li,staleTime:1e4}),{data:v=[]}=_t({queryKey:[`plugins`],queryFn:zi,staleTime:1e4}),y=ht({queries:_.map(e=>({queryKey:[`datasource-health`,e.id],queryFn:()=>Ri(e.id),staleTime:1e4}))}).map(e=>e.data),{data:b=[]}=na(e??``,c||null),{data:x}=_t({queryKey:[`timeline-summary`,e,c||`default`],queryFn:()=>Pi(e,500,0,c||null,`metadata`),enabled:!!e,staleTime:3e4}),S=g?.status===`UP`,C=u===`#/plugins`,w=u===`#/stats`,ee=_.filter(e=>La(e.status)).length,te=v.filter(e=>La(e.lifecycle)).length,ne=_.length-ee+(v.length-te),T=e=>{t(e),r(null),a(null),window.location.hash=`#/timeline`};return(0,M.jsxs)(`div`,{className:`app`,children:[(0,M.jsx)(Fa,{paletteOpen:m,onOpenPalette:()=>h(!0),onClosePalette:()=>h(!1)}),(0,M.jsx)(Pa,{open:m,selectedSource:c||null,onClose:()=>h(!1),onSelectAggregate:T,onOpenStats:()=>{window.location.hash=`#/stats`},onOpenPlugins:()=>{window.location.hash=`#/plugins`}}),(0,M.jsxs)(`header`,{className:`app-header`,children:[(0,M.jsx)(`div`,{className:`brand`,children:(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,M.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,M.jsxs)(`div`,{className:`header-center`,children:[ki()&&(0,M.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,M.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,M.jsx)(`div`,{className:`header-actions`,children:(0,M.jsxs)(`div`,{className:`header-status`,children:[(0,M.jsx)(`span`,{className:`dot ${S?`dot-green`:`dot-red`}`}),(0,M.jsx)(`span`,{className:`status-text ${S?``:`offline`}`,children:S?`Connected`:g?.status??`Connecting`})]})})]}),(0,M.jsxs)(`aside`,{className:`workspace-dock${f?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,M.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!f,children:[(0,M.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,M.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,M.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,M.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:c,onChange:e=>{l(e.target.value),r(null),a(null)},children:[(0,M.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),_.map(e=>(0,M.jsxs)(`option`,{value:e.id,disabled:!Ra(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,M.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,M.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,M.jsx)(`span`,{children:`Datasources Healthy`}),(0,M.jsxs)(`strong`,{children:[ee,`/`,_.length||0]})]}),(0,M.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,M.jsx)(`span`,{children:`Plugins Healthy`}),(0,M.jsxs)(`strong`,{children:[te,`/`,v.length||0]})]}),(0,M.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,M.jsx)(`span`,{children:`Issues`}),(0,M.jsx)(`strong`,{children:ne})]})]})]}),(0,M.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>p(e=>!e),"aria-expanded":f,"aria-controls":`workspace-dock-panel`,children:(0,M.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:f?`>`:`<`})})]}),(0,M.jsx)(`main`,{className:`app-main`,role:`main`,children:(0,M.jsxs)(`div`,{className:`workspace-content`,children:[!C&&!w&&(0,M.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,M.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,M.jsx)(Vi,{onSelect:T,source:c||null}),e&&(0,M.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,M.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:e}),c?(0,M.jsxs)(`span`,{children:[` on `,c]}):(0,M.jsx)(`span`,{children:` on primary datasource`}),i!=null&&(0,M.jsxs)(`span`,{children:[` comparing with seq #`,i]}),(0,M.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{t(null),r(null),a(null)},children:`× clear`})]})]}),C?(0,M.jsx)(za,{datasources:_,datasourceHealth:y,plugins:v}):w?(0,M.jsx)(Na,{source:c||null}):(0,M.jsxs)(M.Fragment,{children:[e&&(0,M.jsx)(ta,{aggregateId:e,selectedSequence:n,compareSequence:i,onSelectEvent:r,onSelectCompare:a,source:c||null}),e&&n!==null&&(0,M.jsx)(la,{aggregateId:e,sequence:n,compareSequence:i,activeTab:o,onTabChange:s,source:c||null}),e&&b.length>0&&(0,M.jsx)(ja,{transitions:b,selectedSequence:n,onSelectSequence:r}),(0,M.jsxs)(`div`,{className:`bottom-grid`,children:[(0,M.jsx)(ba,{source:c||null}),(0,M.jsx)(Oa,{source:c||null})]}),e&&x&&(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,M.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[x.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,M.jsx)(Aa,{})]})}var Va=class extends j.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,M.jsx)(`div`,{className:`app`,children:(0,M.jsx)(`main`,{className:`app-main`,children:(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Ha=new Ze({defaultOptions:{queries:{staleTime:3e4,retry:2}}});di.createRoot(document.getElementById(`root`)).render((0,M.jsx)(j.StrictMode,{children:(0,M.jsx)(nt,{client:Ha,children:(0,M.jsx)(ma,{children:(0,M.jsx)(Va,{children:(0,M.jsx)(Ba,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/assets/index-Cw0Fu2da.css b/eventlens-api/src/main/resources/web/assets/index-DjroUjh3.css similarity index 95% rename from eventlens-api/src/main/resources/web/assets/index-Cw0Fu2da.css rename to eventlens-api/src/main/resources/web/assets/index-DjroUjh3.css index 67a6046..e43db06 100644 --- a/eventlens-api/src/main/resources/web/assets/index-Cw0Fu2da.css +++ b/eventlens-api/src/main/resources/web/assets/index-DjroUjh3.css @@ -1 +1 @@ -:root{--bg-base:#050508;--bg-surface:#0a0c14;--bg-raised:#0f1220;--bg-elevated:#161b2e;--bg-panel:linear-gradient(145deg, #0c0f1a 0%, #0a0d18 50%, #080b14 100%);--border:#1a2040;--border-muted:#121830;--border-glow:#00f0ff26;--text-primary:#e8eef8;--text-secondary:#94a3c0;--text-muted:#5a6a8a;--neon-cyan:#00f0ff;--neon-cyan-dim:#00f0ff14;--neon-cyan-mid:#00f0ff40;--neon-magenta:#ff00e5;--neon-magenta-dim:#ff00e514;--neon-green:#0f8;--neon-green-dim:#00ff881a;--neon-amber:#fa0;--neon-amber-dim:#ffaa001a;--neon-red:#f35;--neon-red-dim:#ff33551a;--neon-purple:#a855f7;--accent-blue:#4f9cf9;--accent-blue-dim:#4f9cf926;--accent-green:var(--neon-green);--accent-red:var(--neon-red);--accent-yellow:var(--neon-amber);--accent-purple:var(--neon-purple);--font-sans:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-display:"Orbitron", var(--font-sans);--radius:6px;--radius-lg:10px;--shadow:0 4px 24px #0009;--shadow-neon:0 0 20px #00f0ff14, 0 0 60px #00f0ff08;--transition:.2s ease;--bottom-panel-scroll-height:280px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00f0ff04 2px 4px);position:fixed;inset:0}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{--header-pad-x:24px;--header-pad-right:48px;--header-control-h:34px;padding:0 var(--header-pad-right) 0 var(--header-pad-x);border-bottom:1px solid var(--border);z-index:100;background:linear-gradient(#0d1020 0%,#080b14 100%);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(12px,2vw,20px);height:64px;display:grid;position:sticky;top:0;box-shadow:0 2px 20px #00000080,inset 0 -1px #00f0ff0f}.brand{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:relative}.brand-logo svg{width:36px;height:36px;filter:drop-shadow(0 0 6px var(--neon-cyan)) drop-shadow(0 0 12px #00f0ff4d)}.brand-name{font-family:var(--font-display);letter-spacing:1.5px;color:var(--text-primary);text-transform:uppercase;font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);letter-spacing:.5px;font-size:10px}.header-title{font-family:var(--font-display);letter-spacing:3px;text-transform:uppercase;background:linear-gradient(135deg, var(--neon-cyan), #4facfe, var(--neon-magenta));-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 8px #00f0ff66);text-align:center;-webkit-background-clip:text;background-clip:text;flex-shrink:0;margin:0;font-size:20px;font-weight:800;line-height:1}.header-center{flex-flow:row;justify-content:center;justify-self:center;align-items:center;gap:clamp(10px,1.5vw,16px);min-width:0;display:flex}.header-demo-pill{box-sizing:border-box;height:var(--header-control-h);background:var(--neon-amber-dim);color:var(--neon-amber);font-family:var(--font-mono);white-space:nowrap;border:1px solid #ffaa0059;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0 12px;font-size:11px;line-height:1;display:inline-flex}.header-actions{flex-direction:row;justify-content:flex-end;justify-self:end;align-items:center;gap:clamp(10px,1.2vw,16px);min-width:0;display:flex}.header-actions .conn-stats,.header-actions .header-status{flex-shrink:0}.workspace-datasource{flex-direction:column;gap:6px;min-width:0;margin:0;display:flex}.workspace-datasource-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;line-height:1}.workspace-datasource-select{box-sizing:border-box;appearance:none;width:100%;height:34px;color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);background-color:#0c1020f2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3c0' d='M3 4.5 6 8l3-3.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;border:1px solid #ffffff24;border-radius:8px;padding:0 32px 0 12px;font-size:12px;line-height:1;box-shadow:inset 0 1px #00f0ff0f}.workspace-datasource-select:hover{border-color:#00f0ff40}.workspace-datasource-select:focus{border-color:var(--neon-cyan-mid);outline:none;box-shadow:0 0 0 1px #00f0ff33}.header-status{font-size:12px;font-family:var(--font-sans);letter-spacing:.3px;align-items:center;gap:8px;display:flex}.header-status .status-text{color:var(--neon-green);text-shadow:0 0 8px #00ff8880}.header-status .status-text.offline{color:var(--neon-red);text-shadow:0 0 8px #ff335580}.dot{border-radius:50%;width:8px;height:8px}.dot-green{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green), 0 0 12px #0f86;animation:2s infinite pulse-neon}.dot-red{background:var(--neon-red);box-shadow:0 0 6px var(--neon-red)}.dot-yellow{background:var(--neon-amber);box-shadow:0 0 6px var(--neon-amber);animation:1.5s infinite pulse-neon}@keyframes pulse-neon{0%,to{opacity:1}50%{opacity:.4}}.app-main{flex-direction:column;flex:1;gap:16px;width:100%;max-width:1440px;margin:0 auto;padding:20px;display:flex}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow), var(--shadow-neon);padding:20px;position:relative;overflow:hidden}.card.card--dropdown-host{z-index:30;overflow:visible}.card:before{content:"";background:linear-gradient(90deg, transparent, var(--neon-cyan-mid), transparent);height:1px;position:absolute;top:0;left:0;right:0}.card:after{content:"";background:linear-gradient(90deg,#0000,#ff00e51a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.card-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;text-shadow:0 0 6px #00f0ff33;align-items:center;gap:8px;margin-bottom:16px;font-size:13px;font-weight:600;display:flex}.control-ribbon{padding:14px 18px}.control-ribbon-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.control-ribbon-title{margin-bottom:4px}.control-ribbon-subtitle{color:var(--text-muted);font-size:12px}.control-ribbon-nav{align-items:center;gap:12px;font-size:13px;display:inline-flex}.control-ribbon-nav a{text-decoration:none}.control-ribbon-nav a[aria-current=page]{text-underline-offset:2px;text-decoration:underline}.control-panel{gap:12px;padding:16px 18px;display:grid}.control-panel-grid{grid-template-columns:minmax(220px,360px) minmax(0,1fr);align-items:end;gap:12px;display:grid}.control-field,.control-field--search{min-width:0}.control-field-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;display:block}.control-select{width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);background:#0d1123eb;border:1px solid #ffffff24;border-radius:10px;outline:none;padding:10px 12px;font-size:12px}.control-select:focus{border-color:var(--neon-cyan-mid);box-shadow:0 0 14px #00f0ff26}.datasource-pills{flex-wrap:wrap;gap:8px;display:flex}.datasource-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:4px 8px}.selection-summary{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);margin-top:2px}.selection-clear-btn{color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border:none;margin-left:12px}.selection-clear-btn:hover{color:var(--neon-cyan)}.workspace-dock{z-index:110;border:1px solid var(--border-muted);pointer-events:auto;border-right:none;border-radius:10px 0 0 10px;flex-direction:row;align-items:center;width:auto;height:auto;max-height:min(72vh,100vh - 112px);transition:box-shadow .2s;display:flex;position:fixed;inset:50% 0 auto auto;overflow:hidden;transform:translateY(-50%);box-shadow:-6px 4px 22px #0000006b}.workspace-dock--open{box-shadow:-8px 6px 28px #0000007a,0 0 0 1px #00f0ff14}.workspace-dock-handle{border:none;border-left:1px solid var(--border-muted);width:36px;height:36px;color:var(--neon-cyan);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition), color var(--transition);background:linear-gradient(#0f1324 0%,#0a0e18 100%);flex-direction:row;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.workspace-dock-handle:hover{color:var(--text-primary);background:linear-gradient(#141a30 0%,#0d1220 100%)}.workspace-dock-handle:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:-2px}.workspace-dock-chevron{font-size:15px;font-weight:700;line-height:1}.workspace-dock-panel{border-left:1px solid var(--border);background:linear-gradient(145deg,#0c101c 0%,#080c14 100%);flex-direction:column;flex:0 auto;gap:8px;width:min(252px,100vw - 48px);min-width:0;max-height:min(72vh,100vh - 112px);padding:10px 12px 12px 14px;display:flex;overflow:hidden auto}.workspace-dock-panel[hidden]{display:none!important}.workspace-dock-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:12px;font-weight:600}.workspace-dock-scrim{z-index:109;cursor:pointer;background:#03050c73;border:none;margin:0;padding:0;position:fixed;inset:64px 0 36px}.workspace-sidebar-kpis{border:1px solid var(--border-muted);border-radius:var(--radius);background:#080b148c;gap:6px;padding:8px 10px;display:grid}.workspace-kpi-row{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);justify-content:space-between;gap:8px;display:flex}.workspace-kpi-row strong{color:var(--text-primary)}.workspace-sidebar-links{color:var(--text-secondary);gap:6px;font-size:12px;display:grid}.workspace-content{gap:16px;display:grid}.search-panel{width:100%;min-width:0}.selection-clear-btn:focus-visible,.control-ribbon-nav a:focus-visible,.control-select:focus-visible,.workspace-datasource-select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.plugin-dashboard{gap:14px;display:grid}.plugin-cards-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.plugin-cards-grid--dense{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plugin-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(140deg,#101527f2,#0a0e1cf2);padding:12px 14px;box-shadow:inset 0 1px #ffffff05}.plugin-card--interactive{transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition)}.plugin-card--interactive:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 16px #00f0ff1a}.plugin-card--interactive:focus-within{border-color:var(--neon-cyan-mid);box-shadow:0 0 0 2px #00f0ff26}.plugin-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.plugin-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:2px 8px}.plugin-card-meta{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);overflow-wrap:anywhere;margin-top:8px}.plugin-card-detail{color:var(--text-secondary);margin-top:8px;font-size:12px;line-height:1.55}.search-wrapper{position:relative}.search-input{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);outline:none;padding:14px 16px 14px 44px;font-size:13px}.search-input:focus{border-color:var(--neon-cyan);box-shadow:0 0 14px #00f0ff2e}.search-input::placeholder{color:var(--text-muted)}.search-icon{color:var(--neon-cyan);pointer-events:none;filter:drop-shadow(0 0 4px #00f0ff80);font-size:16px;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.search-results{background:var(--bg-raised);border:1px solid var(--neon-cyan-mid);border-radius:var(--radius);z-index:500;max-height:min(55vh,420px);position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden auto;box-shadow:0 12px 40px #000000a6,0 0 24px #00f0ff14}.search-result-item{cursor:pointer;transition:background var(--transition);font-family:var(--font-mono);color:var(--text-primary);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:13px;display:flex}.search-result-item:hover{background:var(--bg-elevated);box-shadow:inset 3px 0 0 var(--neon-cyan)}.search-result-item+.search-result-item{border-top:1px solid var(--border-muted)}.search-result-chevron{color:var(--text-muted);flex-shrink:0;padding-right:4px}.search-result-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:0 6px;min-width:0;display:flex}.search-result-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;font-size:10px}.search-result-colon{color:var(--text-muted);flex-shrink:0;margin-right:2px}.search-result-value{overflow-wrap:anywhere;word-break:break-word;flex:1;min-width:0}.conn-stats{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:16px;font-size:11px;display:flex}.conn-stat{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.conn-stat-label{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);font-size:9px}.conn-stat-value{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66;font-size:12px}.conn-stat-value.green{color:var(--neon-green);text-shadow:0 0 6px #0f86}.conn-stat-value.amber{color:var(--neon-amber);text-shadow:0 0 6px #fa06}.conn-stat--metric .conn-stat-value,.conn-stat-value--uptime{text-align:right;font-variant-numeric:tabular-nums;min-width:6.5ch;display:inline-block}.mini-wave{align-items:flex-end;gap:1px;height:24px;display:flex}.mini-wave-bar{background:var(--neon-cyan);border-radius:1px;width:3px;animation:1.2s ease-in-out infinite wave-pulse;box-shadow:0 0 4px #00f0ff4d}@keyframes wave-pulse{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}.timeline-count-pill{color:var(--accent-blue);font-family:var(--font-mono);background:var(--accent-blue-dim);border:1px solid #4f9cf940;border-radius:999px;padding:2px 10px;font-size:11px}.timeline-hint{color:var(--text-muted);max-width:52rem;margin:-8px 0 12px;font-size:12px;line-height:1.5}.timeline-rail{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-base);position:relative;box-shadow:inset 0 1px #00f0ff0a}.timeline-stepper{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);padding:12px 14px 14px;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.timeline-stepper-track{flex-wrap:nowrap;align-items:center;gap:4px;width:max-content;min-height:88px;display:flex}.timeline-step-arrow{color:var(--text-muted);opacity:.7;flex-shrink:0;align-self:center;padding:0 2px;font-size:11px}.timeline-step-arrow-compact{padding:0 1px;font-size:9px}.timeline-step{border-radius:var(--radius);border:1px solid var(--border-muted);background:var(--bg-raised);cursor:pointer;text-align:left;min-width:118px;max-width:200px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-step-compact{gap:2px;min-width:96px;max-width:140px;padding:8px 10px}.timeline-step-compact .timeline-step-badge{font-size:8px}.timeline-step-compact .timeline-step-type{-webkit-line-clamp:1;font-size:10px}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-step.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-step-badge{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:10px;font-weight:600}.timeline-step-seq{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.timeline-step-type{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.timeline-step-created{border-left:3px solid var(--neon-green)}.timeline-step-deleted{border-left:3px solid var(--neon-red)}.timeline-step-completed{border-left:3px solid var(--neon-green)}.timeline-step-failed{border-left:3px solid var(--neon-red)}.timeline-step-transfer{border-left:3px solid var(--neon-amber)}.timeline-step-item{border-left:3px solid var(--neon-purple)}.timeline-step-progress{border-left:3px solid #38bdf8}.timeline-step-default{border-left:3px solid var(--neon-cyan)}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);cursor:pointer;text-align:left;min-width:140px;max-width:240px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-group-chip.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-group-chip.expanded{border-color:#00f0ff59}.timeline-group-chip-top{justify-content:space-between;align-items:center;gap:8px;width:100%;display:flex}.timeline-group-count{font-family:var(--font-display);letter-spacing:.5px;color:var(--neon-cyan);font-size:16px;font-weight:800;line-height:1}.timeline-group-chevron{color:var(--text-muted);font-size:10px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.timeline-group-range{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);line-height:1.4}.timeline-expanded-deck{border-top:1px solid var(--border-muted);background:#00000040;padding:10px 14px 14px}.timeline-expanded-head{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.timeline-expanded-title{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:12px;font-weight:700}.timeline-expanded-meta{font-family:var(--font-mono);color:var(--text-muted);flex:1;font-size:11px}.timeline-expanded-close{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-raised);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition);margin-left:auto;padding:4px 12px;font-size:11px}.timeline-expanded-close:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan)}.timeline-expanded-strip{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex-wrap:nowrap;align-items:center;gap:4px;width:100%;padding-bottom:6px;display:flex;overflow-x:auto}.timeline-slider{width:100%;accent-color:var(--neon-cyan);cursor:pointer;margin-top:4px}.timeline-info{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);grid-template-columns:minmax(0,1fr) minmax(0,2.2fr) minmax(0,1fr);align-items:start;gap:12px;margin-top:12px;display:grid}.timeline-info-edge{color:var(--text-muted);font-size:11px}.timeline-info-center{text-align:center;color:var(--text-secondary);line-height:1.55}.timeline-info-center strong{color:var(--neon-cyan);font-weight:600}.timeline-info-muted{color:var(--text-muted);font-weight:400}.timeline-info-type{color:var(--text-primary);font-size:11px}.state-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.state-panel h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px;font-size:10px;font-weight:600}.state-panel-before h4{color:var(--text-muted)}.state-panel-after h4{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.json-block{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);font-family:var(--font-mono);max-height:260px;color:var(--text-secondary);white-space:pre;padding:12px;font-size:12px;line-height:1.7;overflow:auto}.json-tree-root{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);max-height:320px;font-family:var(--font-mono);color:var(--text-secondary);padding:10px 12px;font-size:13px;line-height:1.75;overflow:auto}.json-tree-line{flex-wrap:wrap;align-items:baseline;gap:2px 0;min-height:1.5em;display:flex}.json-tree-toggle{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-right:4px;padding:0;font-size:10px;line-height:1}.json-tree-toggle:hover{color:var(--neon-cyan);background:var(--neon-cyan-dim)}.json-key{color:#7dd3fc}.json-string{color:#86efac}.json-number{color:#fcd34d}.json-boolean{color:#c4b5fd}.json-null{color:var(--text-muted);font-style:italic}.json-punct{color:var(--text-muted)}.json-ellipsis{color:var(--text-muted);font-size:11px;font-style:italic}.json-unknown{color:var(--neon-amber)}.diff-panel{border-top:1px solid var(--border-muted);margin-top:20px;padding-top:16px}.diff-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.diff-toolbar-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:13px;font-weight:600}.diff-view-toggle{border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);font-size:11px;display:flex;overflow:hidden}.diff-view-toggle button{background:var(--bg-raised);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:6px 14px}.diff-view-toggle button+button{border-left:1px solid var(--border)}.diff-view-toggle button:hover{color:var(--text-secondary)}.diff-view-toggle button.active{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.diff-body{align-items:stretch;gap:10px;display:flex}.diff-minimap{border:1px solid var(--border-muted);background:var(--bg-base);border-radius:4px;flex-direction:column;flex-shrink:0;width:10px;max-height:280px;display:flex;overflow:hidden}.diff-minimap-chunk{background:var(--border);cursor:pointer;min-height:8px;transition:background var(--transition);border:none;flex:1;margin:0;padding:0}.diff-minimap-chunk:hover,.diff-minimap-chunk:focus-visible{background:var(--neon-cyan-mid);outline:none}.diff-scroll{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex:1;min-width:0;max-height:280px;overflow:auto}.diff-list{flex-direction:column;gap:0;display:flex}.diff-row{font-family:var(--font-mono);background:var(--bg-raised);border-left:3px solid var(--neon-cyan);border-bottom:1px solid var(--border-muted);border-radius:0;align-items:stretch;gap:0;padding:0;font-size:12px;line-height:1.65;display:flex}.diff-row:last-child{border-radius:0 0 var(--radius) var(--radius);border-bottom:none}.diff-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.diff-line-no{text-align:right;width:36px;color:var(--text-muted);background:var(--bg-base);border-right:1px solid var(--border-muted);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:10px 6px;font-size:10px}.diff-row-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:8px 12px;padding:10px 12px;display:flex}.diff-field{color:var(--text-primary);min-width:6rem;font-weight:700}.diff-values-inline{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.diff-old{color:var(--neon-red);font-weight:400;text-decoration:line-through}.diff-arrow{color:var(--text-muted);flex-shrink:0}.diff-new{color:var(--neon-green);text-shadow:0 0 4px #00ff8840;font-weight:400}.diff-split-head{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg-raised);z-index:1;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px 8px 48px;font-size:11px;display:grid;position:sticky;top:0}.diff-split-old-label{color:var(--neon-red)}.diff-split-new-label{color:var(--neon-green)}.diff-split-row{border-bottom:1px solid var(--border-muted);align-items:stretch;gap:0;display:flex}.diff-split-row:last-child{border-bottom:none}.diff-split-cells{flex:1;grid-template-columns:1fr 1fr;gap:8px;min-width:0;padding:8px 12px 8px 0;display:grid}.diff-split-cell{border-radius:var(--radius);background:var(--bg-base);border:1px solid var(--border-muted);min-width:0;padding:8px 10px}.diff-split-cell .diff-field{margin-bottom:6px;font-size:11px;display:block}.diff-cell-value{overflow-wrap:anywhere;word-break:break-word;font-size:12px;font-weight:400;line-height:1.6}.diff-split-old .diff-cell-value{color:var(--neon-red);opacity:.9}.diff-split-new .diff-cell-value{color:var(--neon-green)}.event-meta{color:var(--text-muted);grid-template-columns:repeat(2,1fr);gap:10px 16px;margin-top:20px;font-size:12px;display:grid}.event-meta-bar{background:var(--bg-raised);border:1px solid var(--border-muted);border-radius:var(--radius);padding:14px 16px;box-shadow:inset 0 1px #00f0ff0a}.event-meta-time{font-family:var(--font-mono);color:var(--text-secondary);font-size:12px;font-weight:500}.event-meta-id{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;grid-column:1/-1;font-size:11px;line-height:1.5}.event-meta-extra{font-family:var(--font-mono);color:var(--text-secondary);font-size:11px}@media (width<=900px){.diff-split-cells{grid-template-columns:1fr}.diff-split-head{display:none}}.copy-btn{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);font-size:12px;font-family:var(--font-mono);margin-top:12px;padding:6px 14px}.copy-btn:hover{background:var(--bg-raised);color:var(--neon-cyan);border-color:var(--neon-cyan);box-shadow:0 0 10px #00f0ff1a}.live-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.live-indicator{font-family:var(--font-sans);letter-spacing:.2px;align-items:center;gap:6px;font-size:11px;display:flex}.pause-btn{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);border-radius:4px;padding:5px 12px;font-size:11px}.pause-btn:hover{background:var(--bg-raised);border-color:var(--neon-cyan);color:var(--neon-cyan);box-shadow:0 0 8px #00f0ff1a}.event-stream{height:var(--bottom-panel-scroll-height);min-height:0;font-family:var(--font-mono);flex-direction:column;gap:3px;padding-right:4px;font-size:12px;display:flex;overflow-y:auto}.event-stream,.anomaly-scroll-region,.search-results{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base)}.event-stream::-webkit-scrollbar{width:6px}.anomaly-scroll-region::-webkit-scrollbar{width:6px}.search-results::-webkit-scrollbar{width:6px}.event-stream::-webkit-scrollbar-track{background:var(--bg-base)}.anomaly-scroll-region::-webkit-scrollbar-track{background:var(--bg-base)}.search-results::-webkit-scrollbar-track{background:var(--bg-base)}.event-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.anomaly-scroll-region::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.search-results::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.event-stream::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.anomaly-scroll-region::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.search-results::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.event-row{transition:all var(--transition);cursor:default;background:#ffffff03;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:12px;padding:6px 10px;display:flex}.event-row:hover{background:var(--bg-elevated)}.event-row.type-withdrawn{border-left-color:var(--neon-magenta)}.event-row.type-deposited{border-left-color:var(--neon-cyan)}.event-row.type-created{border-left-color:var(--neon-green)}.event-row.type-transfer{border-left-color:var(--neon-amber)}.event-row.type-deleted{border-left-color:var(--neon-red)}.event-row.type-completed{border-left-color:var(--neon-green)}.event-row.type-failed{border-left-color:var(--neon-red)}.event-row.type-default{border-left-color:var(--neon-purple)}.event-time{color:var(--text-muted);flex-shrink:0;width:75px;font-size:11px}.event-type{flex-shrink:0;width:180px;font-weight:500}.event-agg{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.event-icon{text-align:center;flex-shrink:0;width:20px;font-size:14px}.type-created{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-deleted{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-completed{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-failed{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-transfer{color:var(--neon-amber);text-shadow:0 0 6px #ffaa004d}.type-default{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.type-withdrawn{color:var(--neon-magenta);text-shadow:0 0 6px #ff00e54d}.type-deposited{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.anomaly-panel-inner{position:relative}.anomaly-shield{background:radial-gradient(#00ff880f 0%,#0000 70%);border:1px solid #00ff8826;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;padding:30px 20px;display:flex}.shield-icon{justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:12px;display:flex;position:relative}.shield-icon svg{filter:drop-shadow(0 0 12px #00ff8880)drop-shadow(0 0 24px #0f83);width:64px;height:64px}.shield-icon:after{content:"";border:1px solid #00ff8826;border-radius:50%;animation:3s ease-in-out infinite shield-pulse;position:absolute;inset:-8px}@keyframes shield-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.8;transform:scale(1.15)}}.shield-text{font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;color:var(--neon-green);text-shadow:0 0 8px #0f86;font-size:13px;font-weight:600}.gauge-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.gauge-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:12px;position:relative;overflow:hidden}.gauge-card:before{content:"";height:2px;position:absolute;bottom:0;left:0;right:0}.gauge-card.optimal:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-card.baseline:before{background:var(--neon-cyan);box-shadow:0 0 8px #00f0ff66}.gauge-card.zero:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);margin-bottom:6px;font-size:10px;font-weight:500}.gauge-value{font-family:var(--font-display);letter-spacing:1px;font-size:13px;font-weight:700}.gauge-value.optimal{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-value.baseline{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66}.gauge-value.zero{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-wave{justify-content:center;align-items:flex-end;gap:2px;height:20px;margin-top:6px;display:flex}.gauge-wave-bar{border-radius:1px;width:2px;animation:1.5s ease-in-out infinite gauge-wave-anim}.gauge-wave-bar.green{background:var(--neon-green);box-shadow:0 0 3px #0f86}.gauge-wave-bar.cyan{background:var(--neon-cyan);box-shadow:0 0 3px #00f0ff66}@keyframes gauge-wave-anim{0%,to{height:4px}50%{height:16px}}.anomaly-scroll-region{box-sizing:border-box;height:var(--bottom-panel-scroll-height);max-height:var(--bottom-panel-scroll-height);z-index:1;min-height:0;padding-right:4px;position:relative;overflow:hidden auto}.anomaly-list-inner{flex-direction:column;gap:10px;display:flex}.anomaly-card-title-row{flex-wrap:wrap;width:100%}.anomaly-title-text{flex:1}.anomaly-header-count{min-width:28px;height:28px;font-family:var(--font-display);color:var(--bg-base);background:var(--neon-amber);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 10px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:0 0 12px #ffaa0059}.anomaly-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-raised);transition:border-color var(--transition), box-shadow var(--transition);overflow:hidden}.anomaly-card.CRITICAL{border-left:4px solid #f44}.anomaly-card.HIGH{border-left:4px solid var(--neon-red)}.anomaly-card.MEDIUM{border-left:4px solid var(--neon-amber)}.anomaly-card.LOW{border-left:4px solid var(--neon-cyan)}.anomaly-card-summary{cursor:pointer;font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:14px 16px;list-style:none;display:flex}.anomaly-card-summary::-webkit-details-marker{display:none}.anomaly-severity-badge{font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:9px;font-weight:700}.anomaly-severity-badge.sev-critical{color:#f66;background:#f443;border:1px solid #ff444459}.anomaly-severity-badge.sev-high{background:var(--neon-red-dim);color:var(--neon-red);border:1px solid #ff335559}.anomaly-severity-badge.sev-medium{background:var(--neon-amber-dim);color:var(--neon-amber);border:1px solid #ffaa0059}.anomaly-severity-badge.sev-low{background:var(--neon-cyan-dim);color:var(--neon-cyan);border:1px solid #00f0ff40}.anomaly-card-title{min-width:0;color:var(--text-primary);flex:1;font-size:15px;font-weight:600;line-height:1.45}.anomaly-card-chevron{color:var(--text-muted);transition:transform var(--transition);flex-shrink:0;font-size:10px}.anomaly-card[open] .anomaly-card-chevron{transform:rotate(-180deg)}.anomaly-card-body{border-top:1px solid var(--border-muted);background:#0003;padding:0 16px 16px}.anomaly-card-meta{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:12px;font-size:13px;line-height:1.5;display:flex}.anomaly-card-meta:first-child{margin-top:12px}.anomaly-meta-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);min-width:72px;font-size:10px}.anomaly-meta-value{font-family:var(--font-mono);color:var(--text-secondary);overflow-wrap:anywhere}.no-anomalies{color:var(--neon-green);align-items:center;gap:8px;padding:20px 0;font-size:13px;display:flex}.bottom-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.bottom-grid>.card{flex-direction:column;align-items:stretch;min-width:0;min-height:0;display:flex}.bottom-grid>.card>.card-title,.bottom-grid>.card>.live-header,.bottom-grid .anomaly-scroll-region,.bottom-grid .event-stream{flex-shrink:0}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-elevated) 50%, var(--bg-raised) 75%);border-radius:var(--radius);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast-container{z-index:999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-primary);box-shadow:var(--shadow);border-left:3px solid var(--neon-amber);padding:10px 16px;font-size:13px;animation:.2s slideIn}.toast.error{border-left-color:var(--neon-red)}.toast.success{border-left-color:var(--neon-green)}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.demo-banner{font-size:13px;font-family:var(--font-mono);color:var(--neon-amber);background:var(--neon-amber-dim);border-radius:var(--radius);border:1px solid #ffaa0059;margin:0 0 16px;padding:10px 16px}.demo-banner code{color:var(--neon-cyan)}@media (width<=900px){.state-grid,.bottom-grid{grid-template-columns:1fr}.header-center .header-demo-pill{display:none}.workspace-dock-panel{width:min(240px,88vw)}.gauge-row,.control-panel-grid{grid-template-columns:1fr}.timeline-info{text-align:center;grid-template-columns:1fr}.timeline-info-edge{display:none}}.state-tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;padding-bottom:0;display:flex}.state-tab{color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:color var(--transition), border-color var(--transition);border-radius:var(--radius) var(--radius) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.state-tab:hover{color:var(--text-secondary)}.state-tab.active{color:var(--neon-cyan);border-bottom-color:var(--neon-cyan);background:var(--neon-cyan-dim);text-shadow:0 0 8px #00f0ff33}.state-tab-emoji{font-size:14px}.state-tab-content{min-height:80px}.summary-tab{padding-top:4px}.summary-changes{flex-direction:column;gap:8px;display:flex}.summary-changes-header{color:var(--text-muted);border-bottom:1px solid var(--border-muted);margin-bottom:4px;padding-bottom:6px;font-size:12px;font-weight:600}.summary-change-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-amber);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.summary-change-row:hover{background:var(--bg-elevated)}.summary-change-field{color:var(--text-primary);min-width:5rem;font-weight:700;font-family:var(--font-sans)}.summary-change-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.summary-change-arrow{color:var(--text-muted);flex-shrink:0}.summary-change-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.summary-no-changes{color:var(--neon-green);align-items:center;gap:12px;padding:20px 0;font-size:14px;display:flex}.event-summary-bar{background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);border:1px solid var(--border);border-left:3px solid var(--neon-cyan);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:10px 20px;display:flex;box-shadow:0 0 16px #00f0ff0d}.event-summary-left{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.event-summary-type{font-family:var(--font-sans);color:var(--text-primary);font-size:14px;font-weight:600}.event-summary-meta{font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.event-summary-changes{color:var(--neon-amber);font-size:12px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;flex-shrink:0;padding:3px 10px;font-weight:600}.diff-count-badge{color:var(--neon-amber);font-size:11px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;align-items:center;margin-left:6px;padding:2px 8px;font-weight:500;display:inline-flex}.diff-summary-view{flex-direction:column;gap:6px;display:flex}.diff-summary-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-cyan);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.diff-summary-row:hover{background:var(--bg-elevated)}.diff-summary-field{color:var(--text-primary);min-width:6rem;font-weight:700;font-family:var(--font-sans)}.diff-summary-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.diff-summary-arrow{color:var(--text-muted);flex-shrink:0}.diff-summary-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.diff-jump-next{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;margin-left:auto;padding:2px 8px;font-size:10px}.diff-jump-next:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.json-tree-changed{border-radius:3px;background:#ffaa001a!important}.timeline-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.timeline-jump-group{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:0;display:flex;overflow:hidden}.timeline-jump-input{background:var(--bg-raised);border:none;border-right:1px solid var(--border);width:100px;color:var(--text-primary);font-family:var(--font-mono);outline:none;padding:5px 8px;font-size:12px}.timeline-jump-input:focus{border-right-color:var(--neon-cyan);background:var(--bg-elevated)}.timeline-jump-input::placeholder{color:var(--text-muted)}.timeline-jump-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input[type=number]{-moz-appearance:textfield}.timeline-jump-btn{background:var(--bg-elevated);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:5px 10px;font-size:14px}.timeline-jump-btn:hover{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.timeline-filter-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.filter-chip{border:1px solid var(--border);background:var(--bg-raised);color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:160px;padding:3px 10px;font-size:11px;overflow:hidden}.filter-chip:hover{border-color:var(--neon-cyan-mid);color:var(--text-secondary)}.filter-chip.active{background:var(--neon-cyan-dim);color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff33;border-color:#00f0ff66}.timeline-anomaly-marker{color:var(--neon-amber);text-shadow:0 0 4px #fa09;align-self:flex-start;font-size:7px;line-height:1}.keyboard-hints{z-index:200;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);background:#080b14eb;position:fixed;bottom:0;left:0;right:0}.keyboard-hints-bar{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:6px 24px;font-size:11px;display:flex}.keyboard-hints-item{align-items:center;gap:5px;display:flex}.keyboard-hints-sep{color:var(--border);font-size:14px;line-height:1}.keyboard-hints-grid{flex-wrap:wrap;justify-content:center;gap:10px 24px;padding:14px 24px;display:flex}.keyboard-hint-row{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:10px;font-size:12px;display:flex}.keyboard-hint-desc{color:var(--text-muted)}.keyboard-key{border:1px solid var(--border);border-bottom:2px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:4px;align-items:center;padding:2px 8px;font-size:11px;display:inline-flex}.keyboard-key-mini{border:1px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:3px;align-items:center;padding:1px 5px;font-size:10px;display:inline-flex}.keyboard-hints-close{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;padding:4px 12px;font-size:11px}.keyboard-hints-close:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.app-main{padding-bottom:40px} +:root{--bg-base:#050508;--bg-surface:#0a0c14;--bg-raised:#0f1220;--bg-elevated:#161b2e;--bg-panel:linear-gradient(145deg, #0c0f1a 0%, #0a0d18 50%, #080b14 100%);--border:#1a2040;--border-muted:#121830;--border-glow:#00f0ff26;--text-primary:#e8eef8;--text-secondary:#94a3c0;--text-muted:#5a6a8a;--neon-cyan:#00f0ff;--neon-cyan-dim:#00f0ff14;--neon-cyan-mid:#00f0ff40;--neon-magenta:#ff00e5;--neon-magenta-dim:#ff00e514;--neon-green:#0f8;--neon-green-dim:#00ff881a;--neon-amber:#fa0;--neon-amber-dim:#ffaa001a;--neon-red:#f35;--neon-red-dim:#ff33551a;--neon-purple:#a855f7;--accent-blue:#4f9cf9;--accent-blue-dim:#4f9cf926;--accent-green:var(--neon-green);--accent-red:var(--neon-red);--accent-yellow:var(--neon-amber);--accent-purple:var(--neon-purple);--font-sans:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-display:"Orbitron", var(--font-sans);--radius:6px;--radius-lg:10px;--shadow:0 4px 24px #0009;--shadow-neon:0 0 20px #00f0ff14, 0 0 60px #00f0ff08;--transition:.2s ease;--bottom-panel-scroll-height:280px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00f0ff04 2px 4px);position:fixed;inset:0}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{--header-pad-x:24px;--header-pad-right:48px;--header-control-h:34px;padding:0 var(--header-pad-right) 0 var(--header-pad-x);border-bottom:1px solid var(--border);z-index:100;background:linear-gradient(#0d1020 0%,#080b14 100%);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(12px,2vw,20px);height:64px;display:grid;position:sticky;top:0;box-shadow:0 2px 20px #00000080,inset 0 -1px #00f0ff0f}.brand{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:relative}.brand-logo svg{width:36px;height:36px;filter:drop-shadow(0 0 6px var(--neon-cyan)) drop-shadow(0 0 12px #00f0ff4d)}.brand-name{font-family:var(--font-display);letter-spacing:1.5px;color:var(--text-primary);text-transform:uppercase;font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);letter-spacing:.5px;font-size:10px}.header-title{font-family:var(--font-display);letter-spacing:3px;text-transform:uppercase;background:linear-gradient(135deg, var(--neon-cyan), #4facfe, var(--neon-magenta));-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 8px #00f0ff66);text-align:center;-webkit-background-clip:text;background-clip:text;flex-shrink:0;margin:0;font-size:20px;font-weight:800;line-height:1}.header-center{flex-flow:row;justify-content:center;justify-self:center;align-items:center;gap:clamp(10px,1.5vw,16px);min-width:0;display:flex}.header-demo-pill{box-sizing:border-box;height:var(--header-control-h);background:var(--neon-amber-dim);color:var(--neon-amber);font-family:var(--font-mono);white-space:nowrap;border:1px solid #ffaa0059;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0 12px;font-size:11px;line-height:1;display:inline-flex}.header-actions{flex-direction:row;justify-content:flex-end;justify-self:end;align-items:center;gap:clamp(10px,1.2vw,16px);min-width:0;display:flex}.header-actions .conn-stats,.header-actions .header-status{flex-shrink:0}.workspace-datasource{flex-direction:column;gap:6px;min-width:0;margin:0;display:flex}.workspace-datasource-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;line-height:1}.workspace-datasource-select{box-sizing:border-box;appearance:none;width:100%;height:34px;color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);background-color:#0c1020f2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3c0' d='M3 4.5 6 8l3-3.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;border:1px solid #ffffff24;border-radius:8px;padding:0 32px 0 12px;font-size:12px;line-height:1;box-shadow:inset 0 1px #00f0ff0f}.workspace-datasource-select:hover{border-color:#00f0ff40}.workspace-datasource-select:focus{border-color:var(--neon-cyan-mid);outline:none;box-shadow:0 0 0 1px #00f0ff33}.header-status{font-size:12px;font-family:var(--font-sans);letter-spacing:.3px;align-items:center;gap:8px;display:flex}.header-status .status-text{color:var(--neon-green);text-shadow:0 0 8px #00ff8880}.header-status .status-text.offline{color:var(--neon-red);text-shadow:0 0 8px #ff335580}.dot{border-radius:50%;width:8px;height:8px}.dot-green{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green), 0 0 12px #0f86;animation:2s infinite pulse-neon}.dot-red{background:var(--neon-red);box-shadow:0 0 6px var(--neon-red)}.dot-yellow{background:var(--neon-amber);box-shadow:0 0 6px var(--neon-amber);animation:1.5s infinite pulse-neon}@keyframes pulse-neon{0%,to{opacity:1}50%{opacity:.4}}.app-main{flex-direction:column;flex:1;gap:16px;width:100%;max-width:1440px;margin:0 auto;padding:20px;display:flex}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow), var(--shadow-neon);padding:20px;position:relative;overflow:hidden}.card.card--dropdown-host{z-index:30;overflow:visible}.card:before{content:"";background:linear-gradient(90deg, transparent, var(--neon-cyan-mid), transparent);height:1px;position:absolute;top:0;left:0;right:0}.card:after{content:"";background:linear-gradient(90deg,#0000,#ff00e51a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.card-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;text-shadow:0 0 6px #00f0ff33;align-items:center;gap:8px;margin-bottom:16px;font-size:13px;font-weight:600;display:flex}.control-ribbon{padding:14px 18px}.control-ribbon-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.control-ribbon-title{margin-bottom:4px}.control-ribbon-subtitle{color:var(--text-muted);font-size:12px}.control-ribbon-nav{align-items:center;gap:12px;font-size:13px;display:inline-flex}.control-ribbon-nav a{text-decoration:none}.control-ribbon-nav a[aria-current=page]{text-underline-offset:2px;text-decoration:underline}.control-panel{gap:12px;padding:16px 18px;display:grid}.control-panel-grid{grid-template-columns:minmax(220px,360px) minmax(0,1fr);align-items:end;gap:12px;display:grid}.control-field,.control-field--search{min-width:0}.control-field-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;display:block}.control-select{width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);background:#0d1123eb;border:1px solid #ffffff24;border-radius:10px;outline:none;padding:10px 12px;font-size:12px}.control-select:focus{border-color:var(--neon-cyan-mid);box-shadow:0 0 14px #00f0ff26}.datasource-pills{flex-wrap:wrap;gap:8px;display:flex}.datasource-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:4px 8px}.selection-summary{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);margin-top:2px}.selection-clear-btn{color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border:none;margin-left:12px}.selection-clear-btn:hover{color:var(--neon-cyan)}.workspace-dock{z-index:110;border:1px solid var(--border-muted);pointer-events:auto;border-right:none;border-radius:10px 0 0 10px;flex-direction:row;align-items:center;width:auto;height:auto;max-height:min(72vh,100vh - 112px);transition:box-shadow .2s;display:flex;position:fixed;inset:50% 0 auto auto;overflow:hidden;transform:translateY(-50%);box-shadow:-6px 4px 22px #0000006b}.workspace-dock--open{box-shadow:-8px 6px 28px #0000007a,0 0 0 1px #00f0ff14}.workspace-dock-handle{border:none;border-left:1px solid var(--border-muted);width:36px;height:36px;color:var(--neon-cyan);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition), color var(--transition);background:linear-gradient(#0f1324 0%,#0a0e18 100%);flex-direction:row;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.workspace-dock-handle:hover{color:var(--text-primary);background:linear-gradient(#141a30 0%,#0d1220 100%)}.workspace-dock-handle:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:-2px}.workspace-dock-chevron{font-size:15px;font-weight:700;line-height:1}.workspace-dock-panel{border-left:1px solid var(--border);background:linear-gradient(145deg,#0c101c 0%,#080c14 100%);flex-direction:column;flex:0 auto;gap:8px;width:min(252px,100vw - 48px);min-width:0;max-height:min(72vh,100vh - 112px);padding:10px 12px 12px 14px;display:flex;overflow:hidden auto}.workspace-dock-panel[hidden]{display:none!important}.workspace-dock-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:12px;font-weight:600}.workspace-dock-scrim{z-index:109;cursor:pointer;background:#03050c73;border:none;margin:0;padding:0;position:fixed;inset:64px 0 36px}.workspace-sidebar-kpis{border:1px solid var(--border-muted);border-radius:var(--radius);background:#080b148c;gap:6px;padding:8px 10px;display:grid}.workspace-kpi-row{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);justify-content:space-between;gap:8px;display:flex}.workspace-kpi-row strong{color:var(--text-primary)}.workspace-sidebar-links{color:var(--text-secondary);gap:6px;font-size:12px;display:grid}.workspace-content{gap:16px;display:grid}.search-panel{width:100%;min-width:0}.selection-clear-btn:focus-visible,.control-ribbon-nav a:focus-visible,.control-select:focus-visible,.workspace-datasource-select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.plugin-dashboard{gap:14px;display:grid}.plugin-cards-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.plugin-cards-grid--dense{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plugin-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(140deg,#101527f2,#0a0e1cf2);padding:12px 14px;box-shadow:inset 0 1px #ffffff05}.plugin-card--interactive{transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition)}.plugin-card--interactive:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 16px #00f0ff1a}.plugin-card--interactive:focus-within{border-color:var(--neon-cyan-mid);box-shadow:0 0 0 2px #00f0ff26}.plugin-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.plugin-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:2px 8px}.plugin-card-meta{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);overflow-wrap:anywhere;margin-top:8px}.plugin-card-detail{color:var(--text-secondary);margin-top:8px;font-size:12px;line-height:1.55}.search-wrapper{position:relative}.search-input{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);outline:none;padding:14px 16px 14px 44px;font-size:13px}.search-input:focus{border-color:var(--neon-cyan);box-shadow:0 0 14px #00f0ff2e}.search-input::placeholder{color:var(--text-muted)}.search-icon{color:var(--neon-cyan);pointer-events:none;filter:drop-shadow(0 0 4px #00f0ff80);font-size:16px;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.search-results{background:var(--bg-raised);border:1px solid var(--neon-cyan-mid);border-radius:var(--radius);z-index:500;max-height:min(55vh,420px);position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden auto;box-shadow:0 12px 40px #000000a6,0 0 24px #00f0ff14}.search-result-item{cursor:pointer;transition:background var(--transition);font-family:var(--font-mono);color:var(--text-primary);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:13px;display:flex}.search-result-item:hover{background:var(--bg-elevated);box-shadow:inset 3px 0 0 var(--neon-cyan)}.search-result-item+.search-result-item{border-top:1px solid var(--border-muted)}.search-result-chevron{color:var(--text-muted);flex-shrink:0;padding-right:4px}.search-result-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:0 6px;min-width:0;display:flex}.search-result-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;font-size:10px}.search-result-colon{color:var(--text-muted);flex-shrink:0;margin-right:2px}.search-result-value{overflow-wrap:anywhere;word-break:break-word;flex:1;min-width:0}.conn-stats{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:16px;font-size:11px;display:flex}.conn-stat{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.conn-stat-label{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);font-size:9px}.conn-stat-value{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66;font-size:12px}.conn-stat-value.green{color:var(--neon-green);text-shadow:0 0 6px #0f86}.conn-stat-value.amber{color:var(--neon-amber);text-shadow:0 0 6px #fa06}.conn-stat--metric .conn-stat-value,.conn-stat-value--uptime{text-align:right;font-variant-numeric:tabular-nums;min-width:6.5ch;display:inline-block}.mini-wave{align-items:flex-end;gap:1px;height:24px;display:flex}.mini-wave-bar{background:var(--neon-cyan);border-radius:1px;width:3px;animation:1.2s ease-in-out infinite wave-pulse;box-shadow:0 0 4px #00f0ff4d}@keyframes wave-pulse{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}.timeline-count-pill{color:var(--accent-blue);font-family:var(--font-mono);background:var(--accent-blue-dim);border:1px solid #4f9cf940;border-radius:999px;padding:2px 10px;font-size:11px}.timeline-hint{color:var(--text-muted);max-width:52rem;margin:-8px 0 12px;font-size:12px;line-height:1.5}.timeline-rail{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-base);position:relative;box-shadow:inset 0 1px #00f0ff0a}.timeline-stepper{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);padding:12px 14px 14px;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.timeline-stepper-track{flex-wrap:nowrap;align-items:center;gap:4px;width:max-content;min-height:88px;display:flex}.timeline-step-arrow{color:var(--text-muted);opacity:.7;flex-shrink:0;align-self:center;padding:0 2px;font-size:11px}.timeline-step-arrow-compact{padding:0 1px;font-size:9px}.timeline-step{border-radius:var(--radius);border:1px solid var(--border-muted);background:var(--bg-raised);cursor:pointer;text-align:left;min-width:118px;max-width:200px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-step-compact{gap:2px;min-width:96px;max-width:140px;padding:8px 10px}.timeline-step-compact .timeline-step-badge{font-size:8px}.timeline-step-compact .timeline-step-type{-webkit-line-clamp:1;font-size:10px}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-step.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-step-badge{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:10px;font-weight:600}.timeline-step-seq{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.timeline-step-type{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.timeline-step-created{border-left:3px solid var(--neon-green)}.timeline-step-deleted{border-left:3px solid var(--neon-red)}.timeline-step-completed{border-left:3px solid var(--neon-green)}.timeline-step-failed{border-left:3px solid var(--neon-red)}.timeline-step-transfer{border-left:3px solid var(--neon-amber)}.timeline-step-item{border-left:3px solid var(--neon-purple)}.timeline-step-progress{border-left:3px solid #38bdf8}.timeline-step-default{border-left:3px solid var(--neon-cyan)}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);cursor:pointer;text-align:left;min-width:140px;max-width:240px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-group-chip.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-group-chip.expanded{border-color:#00f0ff59}.timeline-group-chip-top{justify-content:space-between;align-items:center;gap:8px;width:100%;display:flex}.timeline-group-count{font-family:var(--font-display);letter-spacing:.5px;color:var(--neon-cyan);font-size:16px;font-weight:800;line-height:1}.timeline-group-chevron{color:var(--text-muted);font-size:10px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.timeline-group-range{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);line-height:1.4}.timeline-expanded-deck{border-top:1px solid var(--border-muted);background:#00000040;padding:10px 14px 14px}.timeline-expanded-head{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.timeline-expanded-title{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:12px;font-weight:700}.timeline-expanded-meta{font-family:var(--font-mono);color:var(--text-muted);flex:1;font-size:11px}.timeline-expanded-close{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-raised);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition);margin-left:auto;padding:4px 12px;font-size:11px}.timeline-expanded-close:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan)}.timeline-expanded-strip{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex-wrap:nowrap;align-items:center;gap:4px;width:100%;padding-bottom:6px;display:flex;overflow-x:auto}.timeline-slider{width:100%;accent-color:var(--neon-cyan);cursor:pointer;margin-top:4px}.timeline-info{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);grid-template-columns:minmax(0,1fr) minmax(0,2.2fr) minmax(0,1fr);align-items:start;gap:12px;margin-top:12px;display:grid}.timeline-info-edge{color:var(--text-muted);font-size:11px}.timeline-info-center{text-align:center;color:var(--text-secondary);line-height:1.55}.timeline-info-center strong{color:var(--neon-cyan);font-weight:600}.timeline-info-muted{color:var(--text-muted);font-weight:400}.timeline-info-type{color:var(--text-primary);font-size:11px}.state-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.state-panel h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px;font-size:10px;font-weight:600}.state-panel-before h4{color:var(--text-muted)}.state-panel-after h4{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.json-block{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);font-family:var(--font-mono);max-height:260px;color:var(--text-secondary);white-space:pre;padding:12px;font-size:12px;line-height:1.7;overflow:auto}.json-tree-root{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);max-height:320px;font-family:var(--font-mono);color:var(--text-secondary);padding:10px 12px;font-size:13px;line-height:1.75;overflow:auto}.json-tree-line{flex-wrap:wrap;align-items:baseline;gap:2px 0;min-height:1.5em;display:flex}.json-tree-toggle{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-right:4px;padding:0;font-size:10px;line-height:1}.json-tree-toggle:hover{color:var(--neon-cyan);background:var(--neon-cyan-dim)}.json-key{color:#7dd3fc}.json-string{color:#86efac}.json-number{color:#fcd34d}.json-boolean{color:#c4b5fd}.json-null{color:var(--text-muted);font-style:italic}.json-punct{color:var(--text-muted)}.json-ellipsis{color:var(--text-muted);font-size:11px;font-style:italic}.json-unknown{color:var(--neon-amber)}.diff-panel{border-top:1px solid var(--border-muted);margin-top:20px;padding-top:16px}.diff-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.diff-toolbar-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:13px;font-weight:600}.diff-view-toggle{border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);font-size:11px;display:flex;overflow:hidden}.diff-view-toggle button{background:var(--bg-raised);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:6px 14px}.diff-view-toggle button+button{border-left:1px solid var(--border)}.diff-view-toggle button:hover{color:var(--text-secondary)}.diff-view-toggle button.active{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.diff-body{align-items:stretch;gap:10px;display:flex}.diff-minimap{border:1px solid var(--border-muted);background:var(--bg-base);border-radius:4px;flex-direction:column;flex-shrink:0;width:10px;max-height:280px;display:flex;overflow:hidden}.diff-minimap-chunk{background:var(--border);cursor:pointer;min-height:8px;transition:background var(--transition);border:none;flex:1;margin:0;padding:0}.diff-minimap-chunk:hover,.diff-minimap-chunk:focus-visible{background:var(--neon-cyan-mid);outline:none}.diff-scroll{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex:1;min-width:0;max-height:280px;overflow:auto}.diff-list{flex-direction:column;gap:0;display:flex}.diff-row{font-family:var(--font-mono);background:var(--bg-raised);border-left:3px solid var(--neon-cyan);border-bottom:1px solid var(--border-muted);border-radius:0;align-items:stretch;gap:0;padding:0;font-size:12px;line-height:1.65;display:flex}.diff-row:last-child{border-radius:0 0 var(--radius) var(--radius);border-bottom:none}.diff-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.diff-line-no{text-align:right;width:36px;color:var(--text-muted);background:var(--bg-base);border-right:1px solid var(--border-muted);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:10px 6px;font-size:10px}.diff-row-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:8px 12px;padding:10px 12px;display:flex}.diff-field{color:var(--text-primary);min-width:6rem;font-weight:700}.diff-values-inline{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.diff-old{color:var(--neon-red);font-weight:400;text-decoration:line-through}.diff-arrow{color:var(--text-muted);flex-shrink:0}.diff-new{color:var(--neon-green);text-shadow:0 0 4px #00ff8840;font-weight:400}.diff-split-head{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg-raised);z-index:1;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px 8px 48px;font-size:11px;display:grid;position:sticky;top:0}.diff-split-old-label{color:var(--neon-red)}.diff-split-new-label{color:var(--neon-green)}.diff-split-row{border-bottom:1px solid var(--border-muted);align-items:stretch;gap:0;display:flex}.diff-split-row:last-child{border-bottom:none}.diff-split-cells{flex:1;grid-template-columns:1fr 1fr;gap:8px;min-width:0;padding:8px 12px 8px 0;display:grid}.diff-split-cell{border-radius:var(--radius);background:var(--bg-base);border:1px solid var(--border-muted);min-width:0;padding:8px 10px}.diff-split-cell .diff-field{margin-bottom:6px;font-size:11px;display:block}.diff-cell-value{overflow-wrap:anywhere;word-break:break-word;font-size:12px;font-weight:400;line-height:1.6}.diff-split-old .diff-cell-value{color:var(--neon-red);opacity:.9}.diff-split-new .diff-cell-value{color:var(--neon-green)}.event-meta{color:var(--text-muted);grid-template-columns:repeat(2,1fr);gap:10px 16px;margin-top:20px;font-size:12px;display:grid}.event-meta-bar{background:var(--bg-raised);border:1px solid var(--border-muted);border-radius:var(--radius);padding:14px 16px;box-shadow:inset 0 1px #00f0ff0a}.event-meta-time{font-family:var(--font-mono);color:var(--text-secondary);font-size:12px;font-weight:500}.event-meta-id{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;grid-column:1/-1;font-size:11px;line-height:1.5}.event-meta-extra{font-family:var(--font-mono);color:var(--text-secondary);font-size:11px}@media (width<=900px){.diff-split-cells{grid-template-columns:1fr}.diff-split-head{display:none}}.copy-btn{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);font-size:12px;font-family:var(--font-mono);margin-top:12px;padding:6px 14px}.copy-btn:hover{background:var(--bg-raised);color:var(--neon-cyan);border-color:var(--neon-cyan);box-shadow:0 0 10px #00f0ff1a}.live-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.live-indicator{font-family:var(--font-sans);letter-spacing:.2px;align-items:center;gap:6px;font-size:11px;display:flex}.pause-btn{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);border-radius:4px;padding:5px 12px;font-size:11px}.pause-btn:hover{background:var(--bg-raised);border-color:var(--neon-cyan);color:var(--neon-cyan);box-shadow:0 0 8px #00f0ff1a}.event-stream{height:var(--bottom-panel-scroll-height);min-height:0;font-family:var(--font-mono);flex-direction:column;gap:3px;padding-right:4px;font-size:12px;display:flex;overflow-y:auto}.event-stream,.anomaly-scroll-region,.search-results{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base)}.event-stream::-webkit-scrollbar{width:6px}.anomaly-scroll-region::-webkit-scrollbar{width:6px}.search-results::-webkit-scrollbar{width:6px}.event-stream::-webkit-scrollbar-track{background:var(--bg-base)}.anomaly-scroll-region::-webkit-scrollbar-track{background:var(--bg-base)}.search-results::-webkit-scrollbar-track{background:var(--bg-base)}.event-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.anomaly-scroll-region::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.search-results::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.event-stream::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.anomaly-scroll-region::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.search-results::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.event-row{transition:all var(--transition);cursor:default;background:#ffffff03;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:12px;padding:6px 10px;display:flex}.event-row:hover{background:var(--bg-elevated)}.event-row.type-withdrawn{border-left-color:var(--neon-magenta)}.event-row.type-deposited{border-left-color:var(--neon-cyan)}.event-row.type-created{border-left-color:var(--neon-green)}.event-row.type-transfer{border-left-color:var(--neon-amber)}.event-row.type-deleted{border-left-color:var(--neon-red)}.event-row.type-completed{border-left-color:var(--neon-green)}.event-row.type-failed{border-left-color:var(--neon-red)}.event-row.type-default{border-left-color:var(--neon-purple)}.event-time{color:var(--text-muted);flex-shrink:0;width:75px;font-size:11px}.event-type{flex-shrink:0;width:180px;font-weight:500}.event-agg{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.event-icon{text-align:center;flex-shrink:0;width:20px;font-size:14px}.type-created{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-deleted{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-completed{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-failed{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-transfer{color:var(--neon-amber);text-shadow:0 0 6px #ffaa004d}.type-default{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.type-withdrawn{color:var(--neon-magenta);text-shadow:0 0 6px #ff00e54d}.type-deposited{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.anomaly-panel-inner{position:relative}.anomaly-shield{background:radial-gradient(#00ff880f 0%,#0000 70%);border:1px solid #00ff8826;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;padding:30px 20px;display:flex}.shield-icon{justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:12px;display:flex;position:relative}.shield-icon svg{filter:drop-shadow(0 0 12px #00ff8880)drop-shadow(0 0 24px #0f83);width:64px;height:64px}.shield-icon:after{content:"";border:1px solid #00ff8826;border-radius:50%;animation:3s ease-in-out infinite shield-pulse;position:absolute;inset:-8px}@keyframes shield-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.8;transform:scale(1.15)}}.shield-text{font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;color:var(--neon-green);text-shadow:0 0 8px #0f86;font-size:13px;font-weight:600}.gauge-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.gauge-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:12px;position:relative;overflow:hidden}.gauge-card:before{content:"";height:2px;position:absolute;bottom:0;left:0;right:0}.gauge-card.optimal:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-card.baseline:before{background:var(--neon-cyan);box-shadow:0 0 8px #00f0ff66}.gauge-card.zero:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);margin-bottom:6px;font-size:10px;font-weight:500}.gauge-value{font-family:var(--font-display);letter-spacing:1px;font-size:13px;font-weight:700}.gauge-value.optimal{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-value.baseline{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66}.gauge-value.zero{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-wave{justify-content:center;align-items:flex-end;gap:2px;height:20px;margin-top:6px;display:flex}.gauge-wave-bar{border-radius:1px;width:2px;animation:1.5s ease-in-out infinite gauge-wave-anim}.gauge-wave-bar.green{background:var(--neon-green);box-shadow:0 0 3px #0f86}.gauge-wave-bar.cyan{background:var(--neon-cyan);box-shadow:0 0 3px #00f0ff66}@keyframes gauge-wave-anim{0%,to{height:4px}50%{height:16px}}.anomaly-scroll-region{box-sizing:border-box;height:var(--bottom-panel-scroll-height);max-height:var(--bottom-panel-scroll-height);z-index:1;min-height:0;padding-right:4px;position:relative;overflow:hidden auto}.anomaly-list-inner{flex-direction:column;gap:10px;display:flex}.anomaly-card-title-row{flex-wrap:wrap;width:100%}.anomaly-title-text{flex:1}.anomaly-header-count{min-width:28px;height:28px;font-family:var(--font-display);color:var(--bg-base);background:var(--neon-amber);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 10px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:0 0 12px #ffaa0059}.anomaly-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-raised);transition:border-color var(--transition), box-shadow var(--transition);overflow:hidden}.anomaly-card.CRITICAL{border-left:4px solid #f44}.anomaly-card.HIGH{border-left:4px solid var(--neon-red)}.anomaly-card.MEDIUM{border-left:4px solid var(--neon-amber)}.anomaly-card.LOW{border-left:4px solid var(--neon-cyan)}.anomaly-card-summary{cursor:pointer;font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:14px 16px;list-style:none;display:flex}.anomaly-card-summary::-webkit-details-marker{display:none}.anomaly-severity-badge{font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:9px;font-weight:700}.anomaly-severity-badge.sev-critical{color:#f66;background:#f443;border:1px solid #ff444459}.anomaly-severity-badge.sev-high{background:var(--neon-red-dim);color:var(--neon-red);border:1px solid #ff335559}.anomaly-severity-badge.sev-medium{background:var(--neon-amber-dim);color:var(--neon-amber);border:1px solid #ffaa0059}.anomaly-severity-badge.sev-low{background:var(--neon-cyan-dim);color:var(--neon-cyan);border:1px solid #00f0ff40}.anomaly-card-title{min-width:0;color:var(--text-primary);flex:1;font-size:15px;font-weight:600;line-height:1.45}.anomaly-card-chevron{color:var(--text-muted);transition:transform var(--transition);flex-shrink:0;font-size:10px}.anomaly-card[open] .anomaly-card-chevron{transform:rotate(-180deg)}.anomaly-card-body{border-top:1px solid var(--border-muted);background:#0003;padding:0 16px 16px}.anomaly-card-meta{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:12px;font-size:13px;line-height:1.5;display:flex}.anomaly-card-meta:first-child{margin-top:12px}.anomaly-meta-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);min-width:72px;font-size:10px}.anomaly-meta-value{font-family:var(--font-mono);color:var(--text-secondary);overflow-wrap:anywhere}.no-anomalies{color:var(--neon-green);align-items:center;gap:8px;padding:20px 0;font-size:13px;display:flex}.bottom-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.bottom-grid>.card{flex-direction:column;align-items:stretch;min-width:0;min-height:0;display:flex}.bottom-grid>.card>.card-title,.bottom-grid>.card>.live-header,.bottom-grid .anomaly-scroll-region,.bottom-grid .event-stream{flex-shrink:0}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-elevated) 50%, var(--bg-raised) 75%);border-radius:var(--radius);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast-container{z-index:999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-primary);box-shadow:var(--shadow);border-left:3px solid var(--neon-amber);padding:10px 16px;font-size:13px;animation:.2s slideIn}.toast.error{border-left-color:var(--neon-red)}.toast.success{border-left-color:var(--neon-green)}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.demo-banner{font-size:13px;font-family:var(--font-mono);color:var(--neon-amber);background:var(--neon-amber-dim);border-radius:var(--radius);border:1px solid #ffaa0059;margin:0 0 16px;padding:10px 16px}.demo-banner code{color:var(--neon-cyan)}@media (width<=900px){.state-grid,.bottom-grid{grid-template-columns:1fr}.header-center .header-demo-pill{display:none}.workspace-dock-panel{width:min(240px,88vw)}.gauge-row,.control-panel-grid{grid-template-columns:1fr}.timeline-info{text-align:center;grid-template-columns:1fr}.timeline-info-edge{display:none}}.state-tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;padding-bottom:0;display:flex}.state-tab{color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:color var(--transition), border-color var(--transition);border-radius:var(--radius) var(--radius) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.state-tab:hover{color:var(--text-secondary)}.state-tab.active{color:var(--neon-cyan);border-bottom-color:var(--neon-cyan);background:var(--neon-cyan-dim);text-shadow:0 0 8px #00f0ff33}.state-tab-emoji{font-size:14px}.state-tab-content{min-height:80px}.summary-tab{padding-top:4px}.summary-changes{flex-direction:column;gap:8px;display:flex}.summary-changes-header{color:var(--text-muted);border-bottom:1px solid var(--border-muted);margin-bottom:4px;padding-bottom:6px;font-size:12px;font-weight:600}.summary-change-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-amber);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.summary-change-row:hover{background:var(--bg-elevated)}.summary-change-field{color:var(--text-primary);min-width:5rem;font-weight:700;font-family:var(--font-sans)}.summary-change-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.summary-change-arrow{color:var(--text-muted);flex-shrink:0}.summary-change-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.summary-no-changes{color:var(--neon-green);align-items:center;gap:12px;padding:20px 0;font-size:14px;display:flex}.event-summary-bar{background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);border:1px solid var(--border);border-left:3px solid var(--neon-cyan);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:10px 20px;display:flex;box-shadow:0 0 16px #00f0ff0d}.event-summary-left{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.event-summary-type{font-family:var(--font-sans);color:var(--text-primary);font-size:14px;font-weight:600}.event-summary-meta{font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.event-summary-changes{color:var(--neon-amber);font-size:12px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;flex-shrink:0;padding:3px 10px;font-weight:600}.diff-count-badge{color:var(--neon-amber);font-size:11px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;align-items:center;margin-left:6px;padding:2px 8px;font-weight:500;display:inline-flex}.diff-summary-view{flex-direction:column;gap:6px;display:flex}.diff-summary-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-cyan);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.diff-summary-row:hover{background:var(--bg-elevated)}.diff-summary-field{color:var(--text-primary);min-width:6rem;font-weight:700;font-family:var(--font-sans)}.diff-summary-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.diff-summary-arrow{color:var(--text-muted);flex-shrink:0}.diff-summary-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.diff-jump-next{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;margin-left:auto;padding:2px 8px;font-size:10px}.diff-jump-next:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.json-tree-changed{border-radius:3px;background:#ffaa001a!important}.timeline-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.timeline-jump-group{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:0;display:flex;overflow:hidden}.timeline-jump-input{background:var(--bg-raised);border:none;border-right:1px solid var(--border);width:100px;color:var(--text-primary);font-family:var(--font-mono);outline:none;padding:5px 8px;font-size:12px}.timeline-jump-input:focus{border-right-color:var(--neon-cyan);background:var(--bg-elevated)}.timeline-jump-input::placeholder{color:var(--text-muted)}.timeline-jump-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input[type=number]{-moz-appearance:textfield}.timeline-jump-btn{background:var(--bg-elevated);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:5px 10px;font-size:14px}.timeline-jump-btn:hover{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.timeline-filter-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.filter-chip{border:1px solid var(--border);background:var(--bg-raised);color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:160px;padding:3px 10px;font-size:11px;overflow:hidden}.filter-chip:hover{border-color:var(--neon-cyan-mid);color:var(--text-secondary)}.filter-chip.active{background:var(--neon-cyan-dim);color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff33;border-color:#00f0ff66}.timeline-anomaly-marker{color:var(--neon-amber);text-shadow:0 0 4px #fa09;align-self:flex-start;font-size:7px;line-height:1}.keyboard-hints{z-index:200;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);background:#080b14eb;position:fixed;bottom:0;left:0;right:0}.keyboard-hints-bar{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:6px 24px;font-size:11px;display:flex}.keyboard-hints-item{align-items:center;gap:5px;display:flex}.keyboard-hints-sep{color:var(--border);font-size:14px;line-height:1}.keyboard-hints-grid{flex-wrap:wrap;justify-content:center;gap:10px 24px;padding:14px 24px;display:flex}.keyboard-hint-row{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:10px;font-size:12px;display:flex}.keyboard-hint-desc{color:var(--text-muted)}.keyboard-key{border:1px solid var(--border);border-bottom:2px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:4px;align-items:center;padding:2px 8px;font-size:11px;display:inline-flex}.keyboard-key-mini{border:1px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:3px;align-items:center;padding:1px 5px;font-size:10px;display:inline-flex}.keyboard-hints-close{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;padding:4px 12px;font-size:11px}.keyboard-hints-close:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.app-main{padding-bottom:40px}.command-palette-backdrop{z-index:1000;background:#050508b3;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.command-palette{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(640px,100vw - 32px);box-shadow:var(--shadow);overflow:hidden}.command-palette-input{border:0;border-bottom:1px solid var(--border);width:100%;color:var(--text-primary);font:inherit;background:0 0;padding:16px}.command-palette-list{max-height:320px;list-style:none;overflow:auto}.command-palette-item{cursor:pointer;color:var(--text-primary);padding:12px 16px}.command-palette-item.active,.command-palette-item:hover{background:var(--neon-cyan-dim)}.command-palette-item.muted{color:var(--text-muted)}.statistics-toolbar,.stats-kpis,.stats-distribution{flex-wrap:wrap;gap:12px;display:flex}.stats-kpis{margin:12px 0 16px}.stat-card{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;flex-direction:column;gap:6px;min-width:140px;padding:14px;display:flex}.stat-card strong{font-size:24px}.stats-chart{gap:8px;margin-bottom:16px;display:grid}.stats-bar-row,.stats-list-row,.replay-toolbar{align-items:center;gap:10px;display:flex}.stats-bar-track{background:#ffffff0f;border-radius:999px;flex:1;height:10px;overflow:hidden}.stats-bar-fill{background:linear-gradient(90deg, var(--neon-cyan), var(--accent-blue));height:100%}.stats-distribution>div,.replay-state{flex:1;min-width:260px}.replay-toolbar{justify-content:space-between;margin-bottom:12px}.timeline-virtual-container{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;margin-top:12px}.timeline-step{border:1px solid var(--border);border-radius:var(--radius);width:calc(100% - 8px);color:var(--text-primary);text-align:left;background:#0e1220f2;grid-template-columns:110px 90px 1fr 90px;align-items:center;margin:3px 4px;padding:0 12px;display:grid}.timeline-step-compare{box-shadow:inset 0 0 0 1px var(--neon-magenta)}.diff-split-row--added .diff-split-new,.diff-split-row--changed .diff-split-new{background:#00ff880f}.diff-split-row--removed .diff-split-old,.diff-split-row--changed .diff-split-old{background:#ff33550f} diff --git a/eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js b/eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js new file mode 100644 index 0000000..9b75297 --- /dev/null +++ b/eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js @@ -0,0 +1 @@ +(function(){function e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function t(n,r,i,a){if(JSON.stringify(n)!==JSON.stringify(r)){if(n==null){a.push({path:i,type:`added`,newValue:r});return}if(r==null){a.push({path:i,type:`removed`,oldValue:n});return}if(Array.isArray(n)&&Array.isArray(r)){let e=Math.max(n.length,r.length);for(let o=0;o{let n=performance.now(),r=[];t(e.data.left,e.data.right,`$`,r);let i={requestId:e.data.requestId,patches:r,durationMs:performance.now()-n};self.postMessage(i)}})(); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/index.html b/eventlens-api/src/main/resources/web/index.html index ac066fb..01ff00a 100644 --- a/eventlens-api/src/main/resources/web/index.html +++ b/eventlens-api/src/main/resources/web/index.html @@ -9,8 +9,8 @@ - - + +
diff --git a/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java b/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java index eb83b9a..208395a 100644 --- a/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java +++ b/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java @@ -103,6 +103,22 @@ void pluginFailureIsolationKeepsHealthySourceServing() throws Exception { assertThat(mysqlHealth.at("/health/state").asText()).isEqualTo("down"); } + @Test + void statisticsEndpointReturnsSourceAwareCounts() throws Exception { + running = startSystem(); + + JsonNode postgresStats = getJson("/api/v1/statistics"); + JsonNode mysqlStats = getJson("/api/v1/statistics?source=mysql-alt"); + + assertThat(postgresStats.path("available").asBoolean()).isTrue(); + assertThat(postgresStats.path("totalEvents").asLong()).isEqualTo(2); + assertThat(postgresStats.at("/eventTypes/0/type").asText()).isEqualTo("AccountCreated"); + + assertThat(mysqlStats.path("available").asBoolean()).isTrue(); + assertThat(mysqlStats.path("totalEvents").asLong()).isEqualTo(2); + assertThat(mysqlStats.toString()).contains("OrderCreated"); + } + @Test void lazyPayloadRoundTripReturnsMetadataThenFullPayload() throws Exception { running = startSystem(); @@ -336,3 +352,5 @@ public void close() { } } } + + diff --git a/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventSourcePlugin.java b/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventSourcePlugin.java index 6225a4b..d0e1b1d 100644 --- a/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventSourcePlugin.java +++ b/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventSourcePlugin.java @@ -12,6 +12,8 @@ import io.eventlens.spi.EventQueryResult; import io.eventlens.spi.EventSourceCapabilities; import io.eventlens.spi.EventSourcePlugin; +import io.eventlens.spi.EventStatistics; +import io.eventlens.spi.EventStatisticsQuery; import io.eventlens.spi.HealthStatus; import java.util.List; @@ -23,8 +25,15 @@ public class MySqlEventSourcePlugin implements EventSourcePlugin, EventStoreRead private volatile MySqlEventStoreReader reader; - @Override public String typeId() { return "mysql"; } - @Override public String displayName() { return "MySQL Event Store"; } + @Override + public String typeId() { + return "mysql"; + } + + @Override + public String displayName() { + return "MySQL Event Store"; + } @Override public void initialize(String instanceId, Map config) { @@ -38,7 +47,10 @@ public void initialize(String instanceId, Map config) { config.get("queryTimeoutSeconds") instanceof Number n ? n.intValue() : 30)); } - @Override public EventSourceCapabilities capabilities() { return new EventSourceCapabilities(true, true, true, true, Set.of("aggregate_id", "aggregate_type", "event_type", "timestamp")); } + @Override + public EventSourceCapabilities capabilities() { + return new EventSourceCapabilities(true, true, true, true, Set.of("aggregate_id", "aggregate_type", "event_type", "timestamp")); + } @Override public EventQueryResult query(EventQuery query) { @@ -60,11 +72,28 @@ public EventQueryResult query(EventQuery query) { @Override public HealthStatus healthCheck() { - try { requireReader().getAggregateTypes(); return HealthStatus.up(); } - catch (Exception e) { return HealthStatus.down(e.getMessage() != null ? e.getMessage() : "mysql health check failed"); } + try { + requireReader().getAggregateTypes(); + return HealthStatus.up(); + } catch (Exception e) { + return HealthStatus.down(e.getMessage() != null ? e.getMessage() : "mysql health check failed"); + } + } + + @Override + public EventStatistics statistics(EventStatisticsQuery query) { + return requireReader().statistics(query); + } + + @Override + public void close() { + MySqlEventStoreReader activeReader = reader; + reader = null; + if (activeReader != null) { + activeReader.close(); + } } - @Override public void close() { MySqlEventStoreReader activeReader = reader; reader = null; if (activeReader != null) activeReader.close(); } @Override public List getEvents(String aggregateId) { return requireReader().getEvents(aggregateId); } @Override public List getEvents(String aggregateId, int limit, int offset) { return requireReader().getEvents(aggregateId, limit, offset); } @Override public List getEventsAfterSequence(String aggregateId, long afterSequence, int limit) { return requireReader().getEventsAfterSequence(aggregateId, afterSequence, limit); } diff --git a/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventStoreReader.java b/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventStoreReader.java index e0e9903..d4d539c 100644 --- a/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventStoreReader.java +++ b/eventlens-source-mysql/src/main/java/io/eventlens/mysql/MySqlEventStoreReader.java @@ -8,6 +8,8 @@ import io.eventlens.core.model.StoredEvent; import io.eventlens.core.spi.EventStoreReader; import io.eventlens.mysql.MySqlSchemaDetector.DetectedSchema; +import io.eventlens.spi.EventStatistics; +import io.eventlens.spi.EventStatisticsQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,43 +58,55 @@ public MySqlEventStoreReader(MySqlConfig config) { : detector.detect(dataSource, overrides); } - @Override public List getEvents(String aggregateId) { return getEvents(aggregateId, Integer.MAX_VALUE, 0); } + @Override + public List getEvents(String aggregateId) { + return getEvents(aggregateId, Integer.MAX_VALUE, 0); + } @Override public List getEvents(String aggregateId, int limit, int offset) { - String sql = "SELECT * FROM %s WHERE %s = ? ORDER BY %s ASC LIMIT ? OFFSET ?".formatted(q(schema.tableName()), q(schema.aggregateIdColumn()), q(schema.sequenceColumn())); + String sql = "SELECT * FROM %s WHERE %s = ? ORDER BY %s ASC LIMIT ? OFFSET ?" + .formatted(q(schema.tableName()), q(schema.aggregateIdColumn()), q(schema.sequenceColumn())); try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ps.setInt(2, limit); ps.setInt(3, offset); return mapResults(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to read events for aggregate: " + aggregateId, e); } + } catch (SQLException e) { + throw mapException("Failed to read events for aggregate: " + aggregateId, e); + } } @Override public List getEventsAfterSequence(String aggregateId, long afterSequence, int limit) { String seqCol = q(schema.sequenceColumn()); - String sql = "SELECT * FROM %s WHERE %s = ? AND %s > ? ORDER BY %s ASC LIMIT ?".formatted(q(schema.tableName()), q(schema.aggregateIdColumn()), seqCol, seqCol); + String sql = "SELECT * FROM %s WHERE %s = ? AND %s > ? ORDER BY %s ASC LIMIT ?" + .formatted(q(schema.tableName()), q(schema.aggregateIdColumn()), seqCol, seqCol); try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ps.setLong(2, afterSequence); ps.setInt(3, limit); return mapResults(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to read events after sequence " + afterSequence, e); } + } catch (SQLException e) { + throw mapException("Failed to read events after sequence " + afterSequence, e); + } } @Override public List getEventsUpTo(String aggregateId, long maxSequence) { String seqCol = q(schema.sequenceColumn()); - String sql = "SELECT * FROM %s WHERE %s = ? AND %s <= ? ORDER BY %s ASC".formatted(q(schema.tableName()), q(schema.aggregateIdColumn()), seqCol, seqCol); + String sql = "SELECT * FROM %s WHERE %s = ? AND %s <= ? ORDER BY %s ASC" + .formatted(q(schema.tableName()), q(schema.aggregateIdColumn()), seqCol, seqCol); try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ps.setLong(2, maxSequence); return mapResults(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to read events up to sequence " + maxSequence, e); } + } catch (SQLException e) { + throw mapException("Failed to read events up to sequence " + maxSequence, e); + } } @Override @@ -100,21 +114,33 @@ public List findAggregateIds(String aggregateType, int limit, int offset String aggCol = q(schema.aggregateIdColumn()); final String sql; if (schema.aggregateTypeColumn() != null) { - sql = "SELECT DISTINCT %s FROM %s WHERE %s = ? ORDER BY %s LIMIT ? OFFSET ?".formatted(aggCol, q(schema.tableName()), q(schema.aggregateTypeColumn()), aggCol); + sql = "SELECT DISTINCT %s FROM %s WHERE %s = ? ORDER BY %s LIMIT ? OFFSET ?" + .formatted(aggCol, q(schema.tableName()), q(schema.aggregateTypeColumn()), aggCol); } else { - sql = "SELECT DISTINCT %s FROM %s ORDER BY %s LIMIT ? OFFSET ?".formatted(aggCol, q(schema.tableName()), aggCol); + sql = "SELECT DISTINCT %s FROM %s ORDER BY %s LIMIT ? OFFSET ?" + .formatted(aggCol, q(schema.tableName()), aggCol); } try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); - if (schema.aggregateTypeColumn() != null) { ps.setString(1, aggregateType); ps.setInt(2, limit); ps.setInt(3, offset); } - else { ps.setInt(1, limit); ps.setInt(2, offset); } + if (schema.aggregateTypeColumn() != null) { + ps.setString(1, aggregateType); + ps.setInt(2, limit); + ps.setInt(3, offset); + } else { + ps.setInt(1, limit); + ps.setInt(2, offset); + } return extractFirstColumn(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to find aggregate IDs for type: " + aggregateType, e); } + } catch (SQLException e) { + throw mapException("Failed to find aggregate IDs for type: " + aggregateType, e); + } } @Override public List getRecentEvents(int limit) { - String orderCol = schema.globalPositionColumn() != null ? schema.globalPositionColumn() : schema.timestampColumn() != null ? schema.timestampColumn() : schema.eventIdColumn(); + String orderCol = schema.globalPositionColumn() != null + ? schema.globalPositionColumn() + : schema.timestampColumn() != null ? schema.timestampColumn() : schema.eventIdColumn(); String sql = "SELECT * FROM %s ORDER BY %s DESC LIMIT ?".formatted(q(schema.tableName()), q(orderCol)); try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); @@ -122,7 +148,9 @@ public List getRecentEvents(int limit) { List results = mapResults(ps.executeQuery()); Collections.reverse(results); return results; - } catch (SQLException e) { throw mapException("Failed to read recent events", e); } + } catch (SQLException e) { + throw mapException("Failed to read recent events", e); + } } @Override @@ -135,7 +163,9 @@ public List getEventsAfter(long globalPosition, int limit) { ps.setLong(1, globalPosition); ps.setInt(2, limit); return mapResults(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to poll events after position " + globalPosition, e); } + } catch (SQLException e) { + throw mapException("Failed to poll events after position " + globalPosition, e); + } } @Override @@ -146,33 +176,66 @@ public long countEvents(String aggregateId) { ps.setString(1, aggregateId); ResultSet rs = ps.executeQuery(); return rs.next() ? rs.getLong(1) : 0; - } catch (SQLException e) { throw mapException("Failed to count events for: " + aggregateId, e); } + } catch (SQLException e) { + throw mapException("Failed to count events for: " + aggregateId, e); + } } @Override public List getAggregateTypes() { - if (schema.aggregateTypeColumn() == null) return List.of(); + if (schema.aggregateTypeColumn() == null) { + return List.of(); + } String typeCol = q(schema.aggregateTypeColumn()); String sql = "SELECT DISTINCT %s FROM %s ORDER BY %s".formatted(typeCol, q(schema.tableName()), typeCol); try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); return extractFirstColumn(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to get aggregate types", e); } + } catch (SQLException e) { + throw mapException("Failed to get aggregate types", e); + } } @Override public List searchAggregates(String query, int limit) { String aggCol = q(schema.aggregateIdColumn()); - String sql = "SELECT DISTINCT %s FROM %s WHERE LOWER(%s) LIKE LOWER(?) ORDER BY %s LIMIT ?".formatted(aggCol, q(schema.tableName()), aggCol, aggCol); + String sql = "SELECT DISTINCT %s FROM %s WHERE LOWER(%s) LIKE LOWER(?) ORDER BY %s LIMIT ?" + .formatted(aggCol, q(schema.tableName()), aggCol, aggCol); try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, "%" + query + "%"); ps.setInt(2, limit); return extractFirstColumn(ps.executeQuery()); - } catch (SQLException e) { throw mapException("Failed to search aggregates", e); } + } catch (SQLException e) { + throw mapException("Failed to search aggregates", e); + } } - @Override public void close() { if (dataSource != null && !dataSource.isClosed()) dataSource.close(); } + public EventStatistics statistics(EventStatisticsQuery query) { + if (schema.timestampColumn() == null) { + return EventStatistics.unavailable("Statistics require a timestamp column"); + } + try (Connection conn = dataSource.getConnection()) { + long totalEvents = singleLong(conn, "SELECT COUNT(*) FROM %s".formatted(q(schema.tableName()))); + long distinctAggregates = singleLong(conn, + "SELECT COUNT(DISTINCT %s) FROM %s".formatted(q(schema.aggregateIdColumn()), q(schema.tableName()))); + List eventTypes = typeCounts(conn, schema.eventTypeColumn(), 10); + List aggregateTypes = schema.aggregateTypeColumn() == null + ? List.of() + : typeCounts(conn, schema.aggregateTypeColumn(), 10); + List throughput = throughput(conn, query); + return new EventStatistics(totalEvents, distinctAggregates, eventTypes, aggregateTypes, throughput, true, null); + } catch (SQLException e) { + throw mapException("Failed to calculate statistics", e); + } + } + + @Override + public void close() { + if (dataSource != null && !dataSource.isClosed()) { + dataSource.close(); + } + } private RuntimeException mapException(String message, SQLException e) { if ("HY000".equals(e.getSQLState()) && e.getMessage() != null && e.getMessage().contains("maximum statement execution time")) { @@ -181,7 +244,9 @@ private RuntimeException mapException(String message, SQLException e) { return new EventStoreException(message, e); } - private static String q(String identifier) { return "`" + identifier.replace("`", "``") + "`"; } + private static String q(String identifier) { + return "`" + identifier.replace("`", "``") + "`"; + } private List mapResults(ResultSet rs) throws SQLException { List events = new ArrayList<>(); @@ -201,25 +266,95 @@ private List mapResults(ResultSet rs) throws SQLException { } private String safeGetString(ResultSet rs, String columnName, String fallback) { - if (columnName == null) return fallback; - try { String value = rs.getString(columnName); return value != null ? value : fallback; } - catch (SQLException e) { log.debug("Could not read optional column '{}': {}", columnName, e.getMessage()); return fallback; } + if (columnName == null) { + return fallback; + } + try { + String value = rs.getString(columnName); + return value != null ? value : fallback; + } catch (SQLException e) { + log.debug("Could not read optional column '{}': {}", columnName, e.getMessage()); + return fallback; + } } private long safeGetLong(ResultSet rs, String columnName) { - try { return rs.getLong(columnName); } - catch (SQLException e) { try { return Long.parseLong(Objects.toString(rs.getObject(columnName), "0")); } catch (Exception ignored) { return 0; } } + try { + return rs.getLong(columnName); + } catch (SQLException e) { + try { + return Long.parseLong(Objects.toString(rs.getObject(columnName), "0")); + } catch (Exception ignored) { + return 0; + } + } } private Instant safeGetInstant(ResultSet rs, String columnName) { - if (columnName == null) return Instant.EPOCH; - try { Timestamp ts = rs.getTimestamp(columnName); return ts != null ? ts.toInstant() : Instant.EPOCH; } - catch (SQLException e) { return Instant.EPOCH; } + if (columnName == null) { + return Instant.EPOCH; + } + try { + Timestamp ts = rs.getTimestamp(columnName); + return ts != null ? ts.toInstant() : Instant.EPOCH; + } catch (SQLException e) { + return Instant.EPOCH; + } + } + + private long singleLong(Connection conn, String sql) throws SQLException { + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setQueryTimeout(queryTimeoutSeconds); + ResultSet rs = ps.executeQuery(); + return rs.next() ? rs.getLong(1) : 0; + } + } + + private List typeCounts(Connection conn, String column, int limit) throws SQLException { + String col = q(column); + String sql = "SELECT %s, COUNT(*) FROM %s GROUP BY %s ORDER BY COUNT(*) DESC, %s ASC LIMIT ?" + .formatted(col, q(schema.tableName()), col, col); + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setQueryTimeout(queryTimeoutSeconds); + ps.setInt(1, limit); + ResultSet rs = ps.executeQuery(); + List counts = new ArrayList<>(); + while (rs.next()) { + counts.add(new EventStatistics.TypeCount(Objects.toString(rs.getObject(1), "unknown"), rs.getLong(2))); + } + return counts; + } + } + + private List throughput(Connection conn, EventStatisticsQuery query) throws SQLException { + String ts = q(schema.timestampColumn()); + String sql = """ + SELECT DATE_FORMAT(%s, '%%Y-%%m-%%dT%%H:00:00Z') AS bucket, + COUNT(*) AS bucket_count + FROM %s + WHERE %s >= UTC_TIMESTAMP() - INTERVAL ? HOUR + GROUP BY DATE_FORMAT(%s, '%%Y-%%m-%%dT%%H:00:00Z') + ORDER BY bucket ASC + LIMIT ? + """.formatted(ts, q(schema.tableName()), ts, ts); + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setQueryTimeout(queryTimeoutSeconds); + ps.setInt(1, query.bucketHours() * query.maxBuckets()); + ps.setInt(2, query.maxBuckets()); + ResultSet rs = ps.executeQuery(); + List points = new ArrayList<>(); + while (rs.next()) { + points.add(new EventStatistics.ThroughputPoint(rs.getString(1), rs.getLong(2))); + } + return points; + } } private List extractFirstColumn(ResultSet rs) throws SQLException { List result = new ArrayList<>(); - while (rs.next()) result.add(Objects.toString(rs.getObject(1), "")); + while (rs.next()) { + result.add(Objects.toString(rs.getObject(1), "")); + } return result; } } diff --git a/eventlens-source-postgres/src/main/java/io/eventlens/pg/PgEventStoreReader.java b/eventlens-source-postgres/src/main/java/io/eventlens/pg/PgEventStoreReader.java index 9e75cd2..570b8df 100644 --- a/eventlens-source-postgres/src/main/java/io/eventlens/pg/PgEventStoreReader.java +++ b/eventlens-source-postgres/src/main/java/io/eventlens/pg/PgEventStoreReader.java @@ -3,26 +3,29 @@ import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import io.eventlens.core.EventLensConfig.ColumnMappingConfig; -import io.eventlens.core.exception.QueryTimeoutException; import io.eventlens.core.exception.EventStoreException; +import io.eventlens.core.exception.QueryTimeoutException; import io.eventlens.core.model.StoredEvent; import io.eventlens.core.spi.EventStoreReader; import io.eventlens.pg.PgSchemaDetector.DetectedSchema; +import io.eventlens.spi.EventStatistics; +import io.eventlens.spi.EventStatisticsQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; /** * PostgreSQL-backed implementation of {@link EventStoreReader}. - * - *

- * Uses HikariCP in read-only mode — it will never write to your event - * store. Schema is auto-detected from database metadata unless overridden in - * config. Column name mappings can be explicitly set via - * {@code datasource.columns} in eventlens.yaml. */ public class PgEventStoreReader implements EventStoreReader, AutoCloseable { @@ -46,7 +49,7 @@ public PgEventStoreReader(PgConfig config) { hc.setMaxLifetime(pool.getMaxLifetimeMs()); hc.setLeakDetectionThreshold(pool.getLeakDetectionThresholdMs()); } - hc.setReadOnly(true); // CRITICAL: read-only + hc.setReadOnly(true); if (pool == null) { hc.setConnectionTimeout(5_000); } @@ -59,8 +62,6 @@ public PgEventStoreReader(PgConfig config) { var overrides = config.columnOverrides() != null ? config.columnOverrides() : new ColumnMappingConfig(); if (config.tableName() != null && !config.tableName().isBlank()) { - // Fix 2: use detectForTable instead of the hardcoded buildManualSchema() - // so we still read real DB metadata even when the table is manually specified. this.schema = detector.detectForTable(config.tableName(), dataSource, overrides); } else { this.schema = detector.detect(dataSource, overrides); @@ -77,25 +78,17 @@ public List getEvents(String aggregateId, int limit, int offset) { String table = quoteIdentifier(schema.tableName()); String aggCol = quoteIdentifier(schema.aggregateIdColumn()); String seqCol = quoteIdentifier(schema.sequenceColumn()); - String sql = String.format( - "SELECT * FROM %s WHERE %s = ? ORDER BY %s ASC LIMIT ? OFFSET ?", - table, aggCol, seqCol); + String sql = "SELECT * FROM %s WHERE %s = ? ORDER BY %s ASC LIMIT ? OFFSET ?" + .formatted(table, aggCol, seqCol); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ps.setInt(2, limit); ps.setInt(3, offset); return mapResults(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to read events for aggregate: " + aggregateId, e); + throw mapException("Failed to read events for aggregate: " + aggregateId, e); } } @@ -104,25 +97,17 @@ public List getEventsAfterSequence(String aggregateId, long afterSe String table = quoteIdentifier(schema.tableName()); String aggCol = quoteIdentifier(schema.aggregateIdColumn()); String seqCol = quoteIdentifier(schema.sequenceColumn()); - String sql = String.format( - "SELECT * FROM %s WHERE %s = ? AND %s > ? ORDER BY %s ASC LIMIT ?", - table, aggCol, seqCol, seqCol); + String sql = "SELECT * FROM %s WHERE %s = ? AND %s > ? ORDER BY %s ASC LIMIT ?" + .formatted(table, aggCol, seqCol, seqCol); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ps.setLong(2, afterSequence); ps.setInt(3, limit); return mapResults(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to read events after sequence " + afterSequence + " for aggregate: " + aggregateId, e); + throw mapException("Failed to read events after sequence " + afterSequence + " for aggregate: " + aggregateId, e); } } @@ -131,24 +116,16 @@ public List getEventsUpTo(String aggregateId, long maxSequence) { String table = quoteIdentifier(schema.tableName()); String aggCol = quoteIdentifier(schema.aggregateIdColumn()); String seqCol = quoteIdentifier(schema.sequenceColumn()); - String sql = String.format( - "SELECT * FROM %s WHERE %s = ? AND %s <= ? ORDER BY %s ASC", - table, aggCol, seqCol, seqCol); + String sql = "SELECT * FROM %s WHERE %s = ? AND %s <= ? ORDER BY %s ASC" + .formatted(table, aggCol, seqCol, seqCol); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ps.setLong(2, maxSequence); return mapResults(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to read events up to sequence " + maxSequence, e); + throw mapException("Failed to read events up to sequence " + maxSequence, e); } } @@ -159,18 +136,15 @@ public List findAggregateIds(String aggregateType, int limit, int offset final String sql; if (schema.aggregateTypeColumn() != null) { String typeCol = quoteIdentifier(schema.aggregateTypeColumn()); - sql = String.format( - "SELECT DISTINCT %s FROM %s WHERE %s = ? ORDER BY %s LIMIT ? OFFSET ?", - aggCol, table, typeCol, aggCol); + sql = "SELECT DISTINCT %s FROM %s WHERE %s = ? ORDER BY %s LIMIT ? OFFSET ?" + .formatted(aggCol, table, typeCol, aggCol); } else { - log.debug("No aggregate type column detected; returning all aggregate IDs (type filter ignored)"); - sql = String.format( - "SELECT DISTINCT %s FROM %s ORDER BY %s LIMIT ? OFFSET ?", - aggCol, table, aggCol); + sql = "SELECT DISTINCT %s FROM %s ORDER BY %s LIMIT ? OFFSET ?" + .formatted(aggCol, table, aggCol); } try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); if (schema.aggregateTypeColumn() != null) { ps.setString(1, aggregateType); @@ -182,14 +156,7 @@ public List findAggregateIds(String aggregateType, int limit, int offset } return extractFirstColumn(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to find aggregate IDs for type: " + aggregateType, e); + throw mapException("Failed to find aggregate IDs for type: " + aggregateType, e); } } @@ -198,29 +165,19 @@ public List getRecentEvents(int limit) { String orderCol = schema.globalPositionColumn() != null ? schema.globalPositionColumn() : schema.timestampColumn() != null - ? schema.timestampColumn() - : schema.eventIdColumn(); - String table = quoteIdentifier(schema.tableName()); - String orderColQ = quoteIdentifier(orderCol); - String sql = String.format( - "SELECT * FROM %s ORDER BY %s DESC LIMIT ?", - table, orderColQ); + ? schema.timestampColumn() + : schema.eventIdColumn(); + String sql = "SELECT * FROM %s ORDER BY %s DESC LIMIT ?" + .formatted(quoteIdentifier(schema.tableName()), quoteIdentifier(orderCol)); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setInt(1, limit); List results = mapResults(ps.executeQuery()); - Collections.reverse(results); // oldest first for display + Collections.reverse(results); return results; } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to read recent events", e); + throw mapException("Failed to read recent events", e); } } @@ -229,76 +186,49 @@ public List getEventsAfter(long globalPosition, int limit) { String posColumn = schema.globalPositionColumn() != null ? schema.globalPositionColumn() : schema.eventIdColumn(); - String table = quoteIdentifier(schema.tableName()); String posColQ = quoteIdentifier(posColumn); - String sql = String.format( - "SELECT * FROM %s WHERE %s > ? ORDER BY %s ASC LIMIT ?", - table, posColQ, posColQ); + String sql = "SELECT * FROM %s WHERE %s > ? ORDER BY %s ASC LIMIT ?" + .formatted(quoteIdentifier(schema.tableName()), posColQ, posColQ); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setLong(1, globalPosition); ps.setInt(2, limit); return mapResults(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to poll events after position " + globalPosition, e); + throw mapException("Failed to poll events after position " + globalPosition, e); } } @Override public long countEvents(String aggregateId) { - String table = quoteIdentifier(schema.tableName()); - String aggCol = quoteIdentifier(schema.aggregateIdColumn()); - String sql = String.format( - "SELECT COUNT(*) FROM %s WHERE %s = ?", - table, aggCol); + String sql = "SELECT COUNT(*) FROM %s WHERE %s = ?" + .formatted(quoteIdentifier(schema.tableName()), quoteIdentifier(schema.aggregateIdColumn())); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, aggregateId); ResultSet rs = ps.executeQuery(); return rs.next() ? rs.getLong(1) : 0; } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to count events for: " + aggregateId, e); + throw mapException("Failed to count events for: " + aggregateId, e); } } @Override public List getAggregateTypes() { - if (schema.aggregateTypeColumn() == null) + if (schema.aggregateTypeColumn() == null) { return List.of(); - String table = quoteIdentifier(schema.tableName()); + } String typeCol = quoteIdentifier(schema.aggregateTypeColumn()); - String sql = String.format( - "SELECT DISTINCT %s FROM %s ORDER BY %s", - typeCol, table, typeCol); + String sql = "SELECT DISTINCT %s FROM %s ORDER BY %s" + .formatted(typeCol, quoteIdentifier(schema.tableName()), typeCol); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); return extractFirstColumn(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to get aggregate types", e); + throw mapException("Failed to get aggregate types", e); } } @@ -306,24 +236,39 @@ public List getAggregateTypes() { public List searchAggregates(String query, int limit) { String table = quoteIdentifier(schema.tableName()); String aggCol = quoteIdentifier(schema.aggregateIdColumn()); - String sql = String.format( - "SELECT DISTINCT %s FROM %s WHERE %s ILIKE ? ORDER BY %s LIMIT ?", - aggCol, table, aggCol, aggCol); + String sql = "SELECT DISTINCT %s FROM %s WHERE %s ILIKE ? ORDER BY %s LIMIT ?" + .formatted(aggCol, table, aggCol, aggCol); try (Connection conn = dataSource.getConnection(); - PreparedStatement ps = conn.prepareStatement(sql)) { + PreparedStatement ps = conn.prepareStatement(sql)) { ps.setQueryTimeout(queryTimeoutSeconds); ps.setString(1, "%" + query + "%"); ps.setInt(2, limit); return extractFirstColumn(ps.executeQuery()); } catch (SQLException e) { - if (isQueryCanceled(e)) { - throw new QueryTimeoutException( - queryTimeoutSeconds, - "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." - .formatted(queryTimeoutSeconds), - e); - } - throw new EventStoreException("Failed to search aggregates", e); + throw mapException("Failed to search aggregates", e); + } + } + + public EventStatistics statistics(EventStatisticsQuery query) { + if (schema.timestampColumn() == null) { + return EventStatistics.unavailable("Statistics require a timestamp column"); + } + try (Connection conn = dataSource.getConnection()) { + long totalEvents = singleLong(conn, + "SELECT COUNT(*) FROM %s".formatted(quoteIdentifier(schema.tableName()))); + long distinctAggregates = singleLong(conn, + "SELECT COUNT(DISTINCT %s) FROM %s".formatted( + quoteIdentifier(schema.aggregateIdColumn()), + quoteIdentifier(schema.tableName()))); + + List eventTypes = typeCounts(conn, schema.eventTypeColumn(), 10); + List aggregateTypes = schema.aggregateTypeColumn() == null + ? List.of() + : typeCounts(conn, schema.aggregateTypeColumn(), 10); + List throughput = throughput(conn, query); + return new EventStatistics(totalEvents, distinctAggregates, eventTypes, aggregateTypes, throughput, true, null); + } catch (SQLException e) { + throw mapException("Failed to calculate statistics", e); } } @@ -331,6 +276,18 @@ private static boolean isQueryCanceled(SQLException e) { return "57014".equals(e.getSQLState()); } + private RuntimeException mapException(String message, SQLException e) { + if (isQueryCanceled(e)) { + return new QueryTimeoutException( + queryTimeoutSeconds, + "Query exceeded %ds timeout. Consider narrowing your search or adding indexes." + .formatted(queryTimeoutSeconds), + e); + } + return new EventStoreException(message, e); + } + + @Override public void close() { if (dataSource != null && !dataSource.isClosed()) { dataSource.close(); @@ -338,24 +295,17 @@ public void close() { } } - /** - * Quote a PostgreSQL identifier to prevent SQL injection and handle reserved words. - * Escapes double quotes inside the identifier by doubling them. - */ private static String quoteIdentifier(String identifier) { - if (identifier == null || identifier.isEmpty()) + if (identifier == null || identifier.isEmpty()) { throw new IllegalArgumentException("Identifier cannot be null or empty"); + } return "\"" + identifier.replace("\"", "\"\"") + "\""; } - // ── Private helpers ────────────────────────────────────────────────────── - private List mapResults(ResultSet rs) throws SQLException { List events = new ArrayList<>(); while (rs.next()) { events.add(new StoredEvent( - // Fix 4 + Fix 6: use Objects.toString(getObject()) instead of - // UUID.fromString(getString()). Handles UUID, BIGSERIAL, ULID, String equally. Objects.toString(rs.getObject(schema.eventIdColumn()), ""), Objects.toString(rs.getObject(schema.aggregateIdColumn()), ""), schema.aggregateTypeColumn() != null @@ -364,9 +314,7 @@ private List mapResults(ResultSet rs) throws SQLException { rs.getLong(schema.sequenceColumn()), rs.getString(schema.eventTypeColumn()), rs.getString(schema.payloadColumn()), - // Fix 8: gracefully handle missing or null metadata column safeGetString(rs, schema.metadataColumn(), "{}"), - // Fix 8: gracefully handle null timestamp (toInstant on null NPE) safeGetInstant(rs, schema.timestampColumn()), schema.globalPositionColumn() != null ? rs.getLong(schema.globalPositionColumn()) @@ -375,13 +323,10 @@ private List mapResults(ResultSet rs) throws SQLException { return events; } - /** - * Fix 8: safely read a string column — returns fallback if column is null, - * column name is null (optional column not detected), or value is SQL NULL. - */ private String safeGetString(ResultSet rs, String colName, String fallback) { - if (colName == null) + if (colName == null) { return fallback; + } try { String val = rs.getString(colName); return val != null ? val : fallback; @@ -391,11 +336,6 @@ private String safeGetString(ResultSet rs, String colName, String fallback) { } } - /** - * Safely read a long column — returns 0 if the column value cannot be - * parsed as a long (e.g. UUID primary keys). Used as fallback global - * position when the event_id is BIGSERIAL. - */ private long safeGetLong(ResultSet rs, String colName) { try { return rs.getLong(colName); @@ -408,12 +348,10 @@ private long safeGetLong(ResultSet rs, String colName) { } } - /** - * Safely read a timestamp column — returns Instant.EPOCH if the column - * name is null (not detected), the value is SQL NULL, or the read fails. - */ private Instant safeGetInstant(ResultSet rs, String colName) { - if (colName == null) return Instant.EPOCH; + if (colName == null) { + return Instant.EPOCH; + } try { Timestamp ts = rs.getTimestamp(colName); return ts != null ? ts.toInstant() : Instant.EPOCH; @@ -423,10 +361,59 @@ private Instant safeGetInstant(ResultSet rs, String colName) { } } + private long singleLong(Connection conn, String sql) throws SQLException { + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setQueryTimeout(queryTimeoutSeconds); + ResultSet rs = ps.executeQuery(); + return rs.next() ? rs.getLong(1) : 0; + } + } + + private List typeCounts(Connection conn, String column, int limit) throws SQLException { + String col = quoteIdentifier(column); + String sql = "SELECT %s, COUNT(*) FROM %s GROUP BY %s ORDER BY COUNT(*) DESC, %s ASC LIMIT ?" + .formatted(col, quoteIdentifier(schema.tableName()), col, col); + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setQueryTimeout(queryTimeoutSeconds); + ps.setInt(1, limit); + ResultSet rs = ps.executeQuery(); + List counts = new ArrayList<>(); + while (rs.next()) { + counts.add(new EventStatistics.TypeCount(Objects.toString(rs.getObject(1), "unknown"), rs.getLong(2))); + } + return counts; + } + } + + private List throughput(Connection conn, EventStatisticsQuery query) throws SQLException { + String ts = quoteIdentifier(schema.timestampColumn()); + String sql = """ + SELECT to_char(date_trunc('hour', %s), 'YYYY-MM-DD"T"HH24:00:00"Z"') AS bucket, + COUNT(*) AS bucket_count + FROM %s + WHERE %s >= NOW() - (? * INTERVAL '1 hour') + GROUP BY date_trunc('hour', %s) + ORDER BY date_trunc('hour', %s) ASC + LIMIT ? + """.formatted(ts, quoteIdentifier(schema.tableName()), ts, ts, ts); + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setQueryTimeout(queryTimeoutSeconds); + ps.setInt(1, query.bucketHours() * query.maxBuckets()); + ps.setInt(2, query.maxBuckets()); + ResultSet rs = ps.executeQuery(); + List points = new ArrayList<>(); + while (rs.next()) { + points.add(new EventStatistics.ThroughputPoint(rs.getString(1), rs.getLong(2))); + } + return points; + } + } + private List extractFirstColumn(ResultSet rs) throws SQLException { List result = new ArrayList<>(); - while (rs.next()) + while (rs.next()) { result.add(Objects.toString(rs.getObject(1), "")); + } return result; } } diff --git a/eventlens-source-postgres/src/main/java/io/eventlens/pg/PostgresEventSourcePlugin.java b/eventlens-source-postgres/src/main/java/io/eventlens/pg/PostgresEventSourcePlugin.java index 188b513..db3229d 100644 --- a/eventlens-source-postgres/src/main/java/io/eventlens/pg/PostgresEventSourcePlugin.java +++ b/eventlens-source-postgres/src/main/java/io/eventlens/pg/PostgresEventSourcePlugin.java @@ -12,6 +12,8 @@ import io.eventlens.spi.EventQueryResult; import io.eventlens.spi.EventSourceCapabilities; import io.eventlens.spi.EventSourcePlugin; +import io.eventlens.spi.EventStatistics; +import io.eventlens.spi.EventStatisticsQuery; import io.eventlens.spi.HealthStatus; import java.util.List; @@ -90,6 +92,11 @@ public HealthStatus healthCheck() { } } + @Override + public EventStatistics statistics(EventStatisticsQuery query) { + return requireReader().statistics(query); + } + @Override public void close() { PgEventStoreReader activeReader = this.reader; diff --git a/eventlens-spi/src/main/java/io/eventlens/spi/EventSourcePlugin.java b/eventlens-spi/src/main/java/io/eventlens/spi/EventSourcePlugin.java index 0ed4bea..a284f68 100644 --- a/eventlens-spi/src/main/java/io/eventlens/spi/EventSourcePlugin.java +++ b/eventlens-spi/src/main/java/io/eventlens/spi/EventSourcePlugin.java @@ -22,6 +22,10 @@ default EventSourceCapabilities capabilities() { return EventSourceCapabilities.basic(); } + default EventStatistics statistics(EventStatisticsQuery query) { + return EventStatistics.unavailable("Statistics not available for this source"); + } + HealthStatus healthCheck(); default JsonNode configSchema() { diff --git a/eventlens-spi/src/main/java/io/eventlens/spi/EventStatistics.java b/eventlens-spi/src/main/java/io/eventlens/spi/EventStatistics.java new file mode 100644 index 0000000..c8aa503 --- /dev/null +++ b/eventlens-spi/src/main/java/io/eventlens/spi/EventStatistics.java @@ -0,0 +1,34 @@ +package io.eventlens.spi; + +import java.util.List; +import java.util.Map; + +public record EventStatistics( + long totalEvents, + long distinctAggregates, + List eventTypes, + List aggregateTypes, + List throughput, + boolean available, + String message) { + + public EventStatistics { + eventTypes = eventTypes == null ? List.of() : List.copyOf(eventTypes); + aggregateTypes = aggregateTypes == null ? List.of() : List.copyOf(aggregateTypes); + throughput = throughput == null ? List.of() : List.copyOf(throughput); + } + + public static EventStatistics unavailable(String message) { + return new EventStatistics(0, 0, List.of(), List.of(), List.of(), false, message); + } + + public static EventStatistics emptyAvailable() { + return new EventStatistics(0, 0, List.of(), List.of(), List.of(), true, null); + } + + public record TypeCount(String type, long count) { + } + + public record ThroughputPoint(String bucket, long count) { + } +} diff --git a/eventlens-spi/src/main/java/io/eventlens/spi/EventStatisticsQuery.java b/eventlens-spi/src/main/java/io/eventlens/spi/EventStatisticsQuery.java new file mode 100644 index 0000000..949254c --- /dev/null +++ b/eventlens-spi/src/main/java/io/eventlens/spi/EventStatisticsQuery.java @@ -0,0 +1,16 @@ +package io.eventlens.spi; + +public record EventStatisticsQuery(int bucketHours, int maxBuckets) { + public EventStatisticsQuery { + if (bucketHours <= 0) { + throw new IllegalArgumentException("bucketHours must be > 0"); + } + if (maxBuckets <= 0) { + throw new IllegalArgumentException("maxBuckets must be > 0"); + } + } + + public static EventStatisticsQuery defaults() { + return new EventStatisticsQuery(1, 24); + } +} diff --git a/eventlens-spi/src/test/java/io/eventlens/spi/SpiTypesSerializationTest.java b/eventlens-spi/src/test/java/io/eventlens/spi/SpiTypesSerializationTest.java index 672fbb7..b5bcb81 100644 --- a/eventlens-spi/src/test/java/io/eventlens/spi/SpiTypesSerializationTest.java +++ b/eventlens-spi/src/test/java/io/eventlens/spi/SpiTypesSerializationTest.java @@ -45,6 +45,25 @@ void capabilities_basic_factory_is_stable() { assertThat(capabilities.filterableFields()).isNotEmpty(); } + @Test + void statistics_types_round_trip_json() throws Exception { + var stats = new EventStatistics( + 42, + 7, + java.util.List.of(new EventStatistics.TypeCount("OrderCreated", 20)), + java.util.List.of(new EventStatistics.TypeCount("Order", 42)), + java.util.List.of(new EventStatistics.ThroughputPoint("2026-03-25T10:00:00Z", 5)), + true, + null); + + var json = mapper.writeValueAsString(stats); + var roundTrip = mapper.readValue(json, EventStatistics.class); + + assertThat(roundTrip).isEqualTo(stats); + assertThat(EventStatistics.unavailable("x").available()).isFalse(); + assertThat(EventStatisticsQuery.defaults().bucketHours()).isEqualTo(1); + } + @Test void collections_are_defensively_copied() { var details = new java.util.HashMap(); diff --git a/eventlens-ui/package-lock.json b/eventlens-ui/package-lock.json index 6cbcece..72a06b4 100644 --- a/eventlens-ui/package-lock.json +++ b/eventlens-ui/package-lock.json @@ -14,7 +14,9 @@ "react-dom": "^19.2.4" }, "devDependencies": { + "@axe-core/playwright": "^4.10.2", "@eslint/js": "^10.0.1", + "@playwright/test": "^1.54.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", @@ -26,6 +28,19 @@ "vite": "^8.0.2" } }, + "node_modules/@axe-core/playwright": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.11.1.tgz", + "integrity": "sha512-mKEfoUIB1MkVTht0BGZFXtSAEKXMJoDkyV5YZ9jbBmZCcWDz71tegNsdTkIN8zc/yMi5Gm2kx7Z5YQ9PfWNAWw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.11.1" + }, + "peerDependencies": { + "playwright-core": ">= 1.0.0" + } + }, "node_modules/@emnapi/core": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", @@ -709,6 +724,22 @@ "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@playwright/test": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.0-rc.11", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.11.tgz", @@ -1351,6 +1382,16 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, + "node_modules/axe-core": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, "node_modules/axios": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", @@ -2547,6 +2588,53 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/postcss": { "version": "8.5.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", diff --git a/eventlens-ui/package.json b/eventlens-ui/package.json index 27e96bc..99aba88 100644 --- a/eventlens-ui/package.json +++ b/eventlens-ui/package.json @@ -6,7 +6,9 @@ "dev": "vite", "build": "tsc -b && vite build", "preview": "vite preview", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0" + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "test:e2e": "playwright test", + "test:e2e:headed": "playwright test --headed" }, "dependencies": { "@tanstack/react-query": "^5.95.2", @@ -15,7 +17,9 @@ "react-dom": "^19.2.4" }, "devDependencies": { + "@axe-core/playwright": "^4.10.2", "@eslint/js": "^10.0.1", + "@playwright/test": "^1.54.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", diff --git a/eventlens-ui/playwright.config.ts b/eventlens-ui/playwright.config.ts new file mode 100644 index 0000000..3fe8047 --- /dev/null +++ b/eventlens-ui/playwright.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: '../tests/e2e', + use: { + baseURL: 'http://127.0.0.1:9090', + trace: 'retain-on-failure', + }, + webServer: { + command: 'npm run dev -- --host 127.0.0.1 --port 4173', + cwd: __dirname, + reuseExistingServer: true, + url: 'http://127.0.0.1:4173', + }, +}); diff --git a/eventlens-ui/src/App.tsx b/eventlens-ui/src/App.tsx index 7263f0a..037d690 100644 --- a/eventlens-ui/src/App.tsx +++ b/eventlens-ui/src/App.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useQueries, useQuery } from '@tanstack/react-query'; import SearchBar from './components/SearchBar'; import Timeline from './components/Timeline'; @@ -6,52 +6,22 @@ import StateViewer, { type TabId } from './components/StateViewer'; import LiveStream from './components/LiveStream'; import AnomalyPanel from './components/AnomalyPanel'; import KeyboardHints from './components/KeyboardHints'; +import ReplayDebugger from './components/ReplayDebugger'; +import StatisticsPanel from './components/StatisticsPanel'; +import CommandPalette from './components/CommandPalette'; +import KeyboardManager from './components/KeyboardManager'; import { getDatasourceHealth, getDatasources, getHealth, getPlugins, - getRecentEvents, getTimeline, - getTransitions, type DatasourceHealth, type DatasourceSummary, type PluginSummary, } from './api/client'; import { isDemoMode } from './demo/demoMode'; -import { parseEventTimestamp } from './utils/time'; - -function GeometricLogo() { - return ( - - - - - - - - - - - - - ); -} - -function MiniWaveform() { - const bars = [6, 12, 8, 16, 10, 14, 7, 11, 15, 9]; - return ( -

- {bars.map((h, i) => ( -
- ))} -
- ); -} +import { useReplay } from './hooks/useReplay'; function statusTone(status: string) { const normalized = status.toLowerCase(); @@ -66,112 +36,10 @@ function isHealthyStatus(status: string) { } function isSelectableDatasource(status: string) { - const normalized = status.toLowerCase(); - return normalized === 'ready'; + return status.toLowerCase() === 'ready'; } -function ConnectionStats({ isUp, source }: { isUp: boolean; source?: string | null }) { - const [uptime, setUptime] = useState(0); - const [eventCount, setEventCount] = useState(null); - const intervalRef = useRef>(undefined); - - useEffect(() => { - const start = Date.now(); - intervalRef.current = setInterval(() => { - setUptime(Math.floor((Date.now() - start) / 1000)); - }, 1000); - return () => clearInterval(intervalRef.current); - }, []); - - useEffect(() => { - const fetchCount = () => { - getRecentEvents(500, source) - .then((data) => setEventCount(data.length)) - .catch(() => {}); - }; - fetchCount(); - const id = setInterval(fetchCount, 15000); - return () => clearInterval(id); - }, [source]); - - const fmtUptime = (s: number) => { - const h = Math.floor(s / 3600); - const m = Math.floor((s % 3600) / 60); - const sec = s % 60; - if (h > 0) return `${h}h ${String(m).padStart(2, '0')}m`; - if (m > 0) return `${String(m).padStart(2, '0')}m ${String(sec).padStart(2, '0')}s`; - return `${String(sec).padStart(2, '0')}s`; - }; - - return ( -
- -
- API - {isUp ? 'Healthy' : 'Down'} -
-
- Events - {eventCount ?? '...'} -
-
- Uptime - {fmtUptime(uptime)} -
-
- ); -} - -function EventSummaryBar({ - aggregateId, - sequence, - totalEvents, - source, -}: { - aggregateId: string; - sequence: number; - totalEvents: number; - source?: string | null; -}) { - const { data: transitions } = useQuery({ - queryKey: ['transitions', aggregateId, source ?? 'default'], - queryFn: () => getTransitions(aggregateId, source), - staleTime: 30_000, - }); - - const transition = transitions?.find(t => t.event.sequenceNumber === sequence); - if (!transition) return null; - - const { event, diff } = transition; - const changeCount = Object.keys(diff).length; - const stepIndex = transitions ? transitions.findIndex(t => t.event.sequenceNumber === sequence) + 1 : null; - - return ( -
-
- {event.eventType} - - seq #{sequence} - {stepIndex !== null && ` step ${stepIndex} of ${totalEvents}`} - {' '} - {parseEventTimestamp(event.timestamp).toLocaleTimeString()} - {source ? ` source ${source}` : ''} - -
- {changeCount > 0 && ( - - {changeCount} {changeCount === 1 ? 'field' : 'fields'} changed - - )} -
- ); -} - -function PluginHealthPage({ - datasources, - datasourceHealth, - plugins, -}: { +function PluginHealthPage({ datasources, datasourceHealth, plugins }: { datasources: DatasourceSummary[]; datasourceHealth: Array; plugins: PluginSummary[]; @@ -188,23 +56,15 @@ function PluginHealthPage({
{source.displayName} - - {source.status} - + {source.status}
{source.id}
- {health && ( -
- {health.health.message} - {health.failureReason ? ` | ${health.failureReason}` : ''} -
- )} + {health &&
{health.health.message}{health.failureReason ? ` | ${health.failureReason}` : ''}
}
); })}
-
All Plugins
@@ -212,18 +72,11 @@ function PluginHealthPage({
{plugin.displayName} - - {plugin.lifecycle} - -
-
- {plugin.pluginType} | {plugin.typeId} + {plugin.lifecycle}
+
{plugin.pluginType} | {plugin.typeId}
{plugin.instanceId}
-
- {plugin.health.message} - {plugin.failureReason ? ` | ${plugin.failureReason}` : ''} -
+
{plugin.health.message}{plugin.failureReason ? ` | ${plugin.failureReason}` : ''}
))}
@@ -235,10 +88,18 @@ function PluginHealthPage({ export default function App() { const [selectedAggregate, setSelectedAggregate] = useState(null); const [selectedSequence, setSelectedSequence] = useState(null); + const [compareSequence, setCompareSequence] = useState(null); const [activeTab, setActiveTab] = useState('changes'); const [selectedSource, setSelectedSource] = useState(''); const [currentHash, setCurrentHash] = useState(window.location.hash || ''); const [workspaceDockOpen, setWorkspaceDockOpen] = useState(false); + const [paletteOpen, setPaletteOpen] = useState(false); + + useEffect(() => { + const syncHash = () => setCurrentHash(window.location.hash || ''); + window.addEventListener('hashchange', syncHash); + return () => window.removeEventListener('hashchange', syncHash); + }, []); useEffect(() => { const handler = (e: Event) => { @@ -249,72 +110,35 @@ export default function App() { return () => window.removeEventListener('eventlens:switchtab', handler); }, []); - useEffect(() => { - const syncHash = () => setCurrentHash(window.location.hash || ''); - window.addEventListener('hashchange', syncHash); - return () => window.removeEventListener('hashchange', syncHash); - }, []); - useEffect(() => { const params = new URLSearchParams(window.location.search); const aggregateId = params.get('aggregateId'); const seq = params.get('seq'); + const compare = params.get('compare'); const tab = params.get('tab') as TabId | null; const source = params.get('source'); if (aggregateId) setSelectedAggregate(aggregateId); - if (seq !== null) { - const n = Number(seq); - if (!Number.isNaN(n)) setSelectedSequence(n); - } - if (tab && ['changes', 'before-after', 'raw'].includes(tab)) { - setActiveTab(tab); - } - if (source) { - setSelectedSource(source); - } + if (seq) setSelectedSequence(Number(seq)); + if (compare) setCompareSequence(Number(compare)); + if (tab && ['changes', 'before-after', 'raw'].includes(tab)) setActiveTab(tab); + if (source) setSelectedSource(source); }, []); useEffect(() => { const params = new URLSearchParams(window.location.search); - if (selectedAggregate) { - params.set('aggregateId', selectedAggregate); - } else { - params.delete('aggregateId'); - } - if (selectedSequence != null) { - params.set('seq', String(selectedSequence)); - } else { - params.delete('seq'); - } + if (selectedAggregate) params.set('aggregateId', selectedAggregate); else params.delete('aggregateId'); + if (selectedSequence != null) params.set('seq', String(selectedSequence)); else params.delete('seq'); + if (compareSequence != null) params.set('compare', String(compareSequence)); else params.delete('compare'); params.set('tab', activeTab); - if (selectedSource) { - params.set('source', selectedSource); - } else { - params.delete('source'); - } + if (selectedSource) params.set('source', selectedSource); else params.delete('source'); const qs = params.toString(); const newUrl = `${window.location.pathname}${qs ? `?${qs}` : ''}${window.location.hash}`; window.history.replaceState(null, '', newUrl); - }, [selectedAggregate, selectedSequence, activeTab, selectedSource]); - - const { data: health } = useQuery({ - queryKey: ['health'], - queryFn: getHealth, - refetchInterval: 30_000, - }); - - const { data: datasources = [] } = useQuery({ - queryKey: ['datasources'], - queryFn: getDatasources, - staleTime: 10_000, - }); - - const { data: plugins = [] } = useQuery({ - queryKey: ['plugins'], - queryFn: getPlugins, - staleTime: 10_000, - }); + }, [activeTab, compareSequence, selectedAggregate, selectedSequence, selectedSource]); + const { data: health } = useQuery({ queryKey: ['health'], queryFn: getHealth, refetchInterval: 30_000 }); + const { data: datasources = [] } = useQuery({ queryKey: ['datasources'], queryFn: getDatasources, staleTime: 10_000 }); + const { data: plugins = [] } = useQuery({ queryKey: ['plugins'], queryFn: getPlugins, staleTime: 10_000 }); const datasourceHealthQueries = useQueries({ queries: datasources.map(source => ({ queryKey: ['datasource-health', source.id], @@ -323,13 +147,7 @@ export default function App() { })), }); const datasourceHealth = datasourceHealthQueries.map(query => query.data); - - const isUp = health?.status === 'UP'; - - const handleSelectAggregate = (id: string) => { - setSelectedAggregate(id); - setSelectedSequence(null); - }; + const { data: transitions = [] } = useReplay(selectedAggregate ?? '', selectedSource || null); const { data: timelineSummary } = useQuery({ queryKey: ['timeline-summary', selectedAggregate, selectedSource || 'default'], @@ -337,50 +155,52 @@ export default function App() { enabled: !!selectedAggregate, staleTime: 30_000, }); - const totalEvents = timelineSummary?.totalEvents ?? 0; + const isUp = health?.status === 'UP'; const pluginView = currentHash === '#/plugins'; + const statsView = currentHash === '#/stats'; const healthySources = datasources.filter(source => isHealthyStatus(source.status)).length; const healthyPlugins = plugins.filter(plugin => isHealthyStatus(plugin.lifecycle)).length; const issueCount = (datasources.length - healthySources) + (plugins.length - healthyPlugins); + const openAggregate = (id: string) => { + setSelectedAggregate(id); + setSelectedSequence(null); + setCompareSequence(null); + window.location.hash = '#/timeline'; + }; + return (
+ setPaletteOpen(true)} onClosePalette={() => setPaletteOpen(false)} /> + setPaletteOpen(false)} + onSelectAggregate={openAggregate} + onOpenStats={() => { window.location.hash = '#/stats'; }} + onOpenPlugins={() => { window.location.hash = '#/plugins'; }} + />
-
- -
EventLens
Event Store Visual Debugger
-
- {isDemoMode() && ( -
- Demo mode -
- )} + {isDemoMode() &&
Demo mode
}
EventLens
-
-
- - {isUp ? 'Connected' : health?.status ?? 'Connecting'} - + {isUp ? 'Connected' : health?.status ?? 'Connecting'}
-
)}
)} {pluginView ? ( - - ) : ( - <> - {selectedAggregate && ( - - )} - - {selectedAggregate && selectedSequence !== null && ( - - )} - - {selectedAggregate && selectedSequence !== null && ( - - )} - -
- - -
- - )} + + ) : statsView ? ( + + ) : ( + <> + {selectedAggregate && ( + + )} + {selectedAggregate && selectedSequence !== null && ( + + )} + {selectedAggregate && transitions.length > 0 && ( + + )} +
+ + +
+ {selectedAggregate && timelineSummary && ( +
+
Selection Summary
+

+ {timelineSummary.totalEvents} events available for this aggregate. + Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K. +

+
+ )} + + )} - ); diff --git a/eventlens-ui/src/api/client.ts b/eventlens-ui/src/api/client.ts index d3576c1..5c6a9c8 100644 --- a/eventlens-ui/src/api/client.ts +++ b/eventlens-ui/src/api/client.ts @@ -4,6 +4,7 @@ import type { BisectResult, DatasourceHealth, DatasourceSummary, + EventStatistics, PluginSummary, ReplayResult, StateTransition, @@ -44,6 +45,8 @@ export type { BisectResult, DatasourceHealth, DatasourceSummary, + DiffPatch, + EventStatistics, FieldChange, LiveStreamUnavailableMessage, PluginSummary, @@ -90,9 +93,7 @@ export const getTimeline = async (id: string, limit = 500, offset = 0, source?: `/aggregates/${id}/timeline?limit=${limit}&offset=${offset}&fields=${fields}`, source ); - return api - .get<{ events: StoredEvent[]; totalEvents: number }>(path) - .then(r => r.data); + return api.get<{ events: StoredEvent[]; totalEvents: number }>(path).then(r => r.data); }; export const getTransitions = async (id: string, source?: string | null) => { @@ -100,9 +101,7 @@ export const getTransitions = async (id: string, source?: string | null) => { await delay(50); return demoTransitions(id); } - return api - .get(withOptionalSource(`/aggregates/${id}/transitions`, source)) - .then(r => r.data); + return api.get(withOptionalSource(`/aggregates/${id}/transitions`, source)).then(r => r.data); }; export const replayTo = async (id: string, seq: number, source?: string | null) => { @@ -110,9 +109,7 @@ export const replayTo = async (id: string, seq: number, source?: string | null) await delay(40); return demoReplayTo(id, seq); } - return api - .get(withOptionalSource(`/aggregates/${id}/replay/${seq}`, source)) - .then(r => r.data); + return api.get(withOptionalSource(`/aggregates/${id}/replay/${seq}`, source)).then(r => r.data); }; export const bisect = async (id: string, expression: string) => { @@ -120,11 +117,9 @@ export const bisect = async (id: string, expression: string) => { await delay(60); return demoBisect(expression); } - return api - .post(`/aggregates/${id}/bisect`, expression, { - headers: { 'Content-Type': 'text/plain' }, - }) - .then(r => r.data); + return api.post(`/aggregates/${id}/bisect`, expression, { + headers: { 'Content-Type': 'text/plain' }, + }).then(r => r.data); }; export const getAnomalies = async (limit = 100, source?: string | null) => { @@ -143,6 +138,11 @@ export const getRecentEvents = async (limit = 50, source?: string | null) => { return api.get(withOptionalSource(`/events/recent?limit=${limit}`, source)).then(r => r.data); }; +export const getStatistics = async (source?: string | null, bucketHours = 1, maxBuckets = 24) => { + const path = withOptionalSource(`/v1/statistics?bucketHours=${bucketHours}&maxBuckets=${maxBuckets}`, source); + return api.get(path).then(r => r.data); +}; + export const getHealth = async () => { if (isDemoMode()) { await delay(20); @@ -159,3 +159,7 @@ export const getDatasourceHealth = async (id: string) => export const getPlugins = async () => api.get('/v1/plugins').then(r => r.data); export { DEMO_AGGREGATE_ID } from '../demo/demoData'; + + + + diff --git a/eventlens-ui/src/api/types.ts b/eventlens-ui/src/api/types.ts index 16330bf..3e5802a 100644 --- a/eventlens-ui/src/api/types.ts +++ b/eventlens-ui/src/api/types.ts @@ -86,3 +86,20 @@ export interface LiveStreamUnavailableMessage { type: 'NO_LIVE_STREAM'; source: string; } + +export interface DiffPatch { + path: string; + type: 'added' | 'removed' | 'changed'; + oldValue?: unknown; + newValue?: unknown; +} + +export interface EventStatistics { + totalEvents: number; + distinctAggregates: number; + eventTypes: Array<{ type: string; count: number }>; + aggregateTypes: Array<{ type: string; count: number }>; + throughput: Array<{ bucket: string; count: number }>; + available: boolean; + message: string | null; +} diff --git a/eventlens-ui/src/components/CommandPalette.tsx b/eventlens-ui/src/components/CommandPalette.tsx new file mode 100644 index 0000000..4efcf4c --- /dev/null +++ b/eventlens-ui/src/components/CommandPalette.tsx @@ -0,0 +1,107 @@ +import { useEffect, useMemo, useState } from 'react'; +import { useQuery } from '@tanstack/react-query'; +import { searchAggregates } from '../api/client'; + +interface Props { + open: boolean; + selectedSource?: string | null; + onClose: () => void; + onSelectAggregate: (id: string) => void; + onOpenStats: () => void; + onOpenPlugins: () => void; +} + +interface CommandItem { + id: string; + label: string; + action: () => void; +} + +export default function CommandPalette({ open, selectedSource, onClose, onSelectAggregate, onOpenStats, onOpenPlugins }: Props) { + const [query, setQuery] = useState(''); + const [selectedIndex, setSelectedIndex] = useState(0); + const { data: aggregateResults = [] } = useQuery({ + queryKey: ['palette-search', query, selectedSource ?? 'default'], + queryFn: () => searchAggregates(query, 8, selectedSource), + enabled: open && query.trim().length >= 2, + staleTime: 5_000, + }); + + useEffect(() => { + if (open) { + setSelectedIndex(0); + } else { + setQuery(''); + } + }, [open]); + + const commands = useMemo(() => { + const base: CommandItem[] = [ + { id: 'stats', label: 'Go to statistics panel', action: onOpenStats }, + { id: 'plugins', label: 'Go to plugin health', action: onOpenPlugins }, + ]; + const aggregateCommands = aggregateResults.map(id => ({ + id: `agg-${id}`, + label: `Open aggregate ${id}`, + action: () => onSelectAggregate(id), + })); + if (query.trim() && aggregateResults.length === 0) { + base.unshift({ id: 'direct', label: `Open aggregate ${query.trim()}`, action: () => onSelectAggregate(query.trim()) }); + } + return [...aggregateCommands, ...base]; + }, [aggregateResults, onOpenPlugins, onOpenStats, onSelectAggregate, query]); + + useEffect(() => { + if (!open) return; + const handler = (event: KeyboardEvent) => { + if (event.key === 'ArrowDown') { + event.preventDefault(); + setSelectedIndex(index => Math.min(index + 1, Math.max(commands.length - 1, 0))); + } else if (event.key === 'ArrowUp') { + event.preventDefault(); + setSelectedIndex(index => Math.max(index - 1, 0)); + } else if (event.key === 'Enter') { + event.preventDefault(); + commands[selectedIndex]?.action(); + onClose(); + } + }; + window.addEventListener('keydown', handler); + return () => window.removeEventListener('keydown', handler); + }, [commands, onClose, open, selectedIndex]); + + if (!open) return null; + + return ( +
+
e.stopPropagation()}> + setQuery(e.target.value)} + aria-label="Command palette search" + /> +
    + {commands.map((item, index) => ( +
  • setSelectedIndex(index)} + onClick={() => { + item.action(); + onClose(); + }} + > + {item.label} +
  • + ))} + {commands.length === 0 &&
  • Type at least two characters to search.
  • } +
+
+
+ ); +} diff --git a/eventlens-ui/src/components/KeyboardHints.tsx b/eventlens-ui/src/components/KeyboardHints.tsx index 2d15a2c..774deb4 100644 --- a/eventlens-ui/src/components/KeyboardHints.tsx +++ b/eventlens-ui/src/components/KeyboardHints.tsx @@ -1,12 +1,13 @@ import { useState, useEffect } from 'react'; const SHORTCUTS = [ - { keys: '← →', desc: 'Navigate events' }, - { keys: 'Shift+← →', desc: 'Jump to group boundary' }, - { keys: '1 – 3', desc: 'Switch tabs (Changes / ⇄ Before-After / Raw)' }, - { keys: 'Cmd+K', desc: 'Focus search' }, - { keys: 'Space', desc: 'Pause / resume live stream' }, - { keys: '?', desc: 'Toggle this hint bar' }, + { keys: 'j / k', desc: 'Move selection through the timeline' }, + { keys: 'Shift+Click', desc: 'Pick a compare event for diff mode' }, + { keys: '1 - 3', desc: 'Switch state tabs' }, + { keys: 'Ctrl/Cmd+K', desc: 'Open command palette' }, + { keys: '/', desc: 'Focus aggregate search' }, + { keys: 'Space', desc: 'Pause or resume live stream' }, + { keys: '?', desc: 'Toggle shortcut help' }, ]; export default function KeyboardHints() { @@ -34,22 +35,17 @@ export default function KeyboardHints() { {s.desc} ))} - ) : (
- ← → Navigate + j/k Navigate · - 1–3 Tabs + Shift+Click Compare · - Space Pause stream + Ctrl/Cmd+K Palette · ? All shortcuts
diff --git a/eventlens-ui/src/components/KeyboardManager.tsx b/eventlens-ui/src/components/KeyboardManager.tsx new file mode 100644 index 0000000..b84d73b --- /dev/null +++ b/eventlens-ui/src/components/KeyboardManager.tsx @@ -0,0 +1,38 @@ +import { useEffect } from 'react'; + +interface Props { + paletteOpen: boolean; + onOpenPalette: () => void; + onClosePalette: () => void; +} + +export default function KeyboardManager({ paletteOpen, onOpenPalette, onClosePalette }: Props) { + useEffect(() => { + const handler = (event: KeyboardEvent) => { + const target = event.target as HTMLElement | null; + const isTyping = target && ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName); + if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') { + event.preventDefault(); + onOpenPalette(); + return; + } + if (event.key === '/' && !isTyping) { + event.preventDefault(); + document.getElementById('aggregate-search')?.focus(); + return; + } + if (event.key === 'Escape' && paletteOpen) { + event.preventDefault(); + onClosePalette(); + return; + } + if (!isTyping && (event.key === 'j' || event.key === 'k')) { + window.dispatchEvent(new CustomEvent('eventlens:timeline-step', { detail: event.key === 'j' ? 1 : -1 })); + } + }; + window.addEventListener('keydown', handler); + return () => window.removeEventListener('keydown', handler); + }, [paletteOpen, onClosePalette, onOpenPalette]); + + return null; +} diff --git a/eventlens-ui/src/components/ReplayDebugger.tsx b/eventlens-ui/src/components/ReplayDebugger.tsx new file mode 100644 index 0000000..3e9632e --- /dev/null +++ b/eventlens-ui/src/components/ReplayDebugger.tsx @@ -0,0 +1,37 @@ +import JsonTreeView from './JsonTreeView'; +import type { StateTransition } from '../api/client'; + +interface Props { + transitions: StateTransition[]; + selectedSequence: number | null; + onSelectSequence: (seq: number) => void; +} + +export default function ReplayDebugger({ transitions, selectedSequence, onSelectSequence }: Props) { + if (!transitions.length) return null; + const current = transitions.find(transition => transition.event.sequenceNumber === selectedSequence) ?? transitions[0]; + const currentIndex = transitions.findIndex(transition => transition.event.sequenceNumber === current.event.sequenceNumber); + + return ( +
+
Replay Debugger
+
+ +
Event {currentIndex + 1} of {transitions.length}
+ +
+ onSelectSequence(transitions[Number(e.target.value)].event.sequenceNumber)} + aria-label="Replay position" + /> +
+

Current State

+ +
+
+ ); +} diff --git a/eventlens-ui/src/components/StateDiff.tsx b/eventlens-ui/src/components/StateDiff.tsx index 239b673..1a806fd 100644 --- a/eventlens-ui/src/components/StateDiff.tsx +++ b/eventlens-ui/src/components/StateDiff.tsx @@ -1,95 +1,70 @@ -import { useState } from 'react'; -import { FieldChange } from '../api/client'; +import type { DiffPatch, FieldChange } from '../api/client'; interface Props { - diff: Record; + diff?: Record; + patches?: DiffPatch[]; + title?: string; } -type ViewMode = 'inline' | 'split'; +type Row = { + field: string; + oldValue: unknown; + newValue: unknown; + kind: 'added' | 'removed' | 'changed'; +}; -export default function StateDiff({ diff }: Props) { - const entries = Object.entries(diff); - const hasDiff = entries.length > 0; - const [mode, setMode] = useState('inline'); +export default function StateDiff({ diff, patches, title = 'Changes' }: Props) { + const rows: Row[] = patches && patches.length > 0 + ? patches.map(patch => ({ + field: patch.path, + oldValue: patch.oldValue, + newValue: patch.newValue, + kind: patch.type, + })) + : Object.entries(diff ?? {}).map(([field, change]) => ({ + field, + oldValue: change.oldValue, + newValue: change.newValue, + kind: 'changed', + })); - if (!hasDiff) return null; + if (!rows.length) return null; return (
- Changes - {entries.length} {entries.length === 1 ? 'field' : 'fields'} modified -
-
- - + {title} + + {rows.length} {rows.length === 1 ? 'change' : 'changes'} +
- - {/* Inline / split modes */}
- -
- {mode === 'inline' ? ( -
- {entries.map(([field, change], i) => ( -
- {i + 1} -
- {field} - - {JSON.stringify(change.oldValue)} - - {JSON.stringify(change.newValue)} - -
+
+
+
+ Before + After +
+ {rows.map((row, index) => ( +
+ {index + 1} +
+
+ {row.field} + {JSON.stringify(row.oldValue)}
- ))} -
- ) : ( -
-
- Before - After -
- {entries.map(([field, change], i) => ( -
- {i + 1} -
-
- {field} - {JSON.stringify(change.oldValue)} -
-
- {field} - {JSON.stringify(change.newValue)} -
-
+
+ {row.field} + {JSON.stringify(row.newValue)}
- ))} +
- )} + ))}
+
); } diff --git a/eventlens-ui/src/components/StateViewer.tsx b/eventlens-ui/src/components/StateViewer.tsx index ce88c10..bc28199 100644 --- a/eventlens-ui/src/components/StateViewer.tsx +++ b/eventlens-ui/src/components/StateViewer.tsx @@ -1,11 +1,13 @@ -import { useState } from 'react'; +import { useMemo, useState } from 'react'; import { useReplay } from '../hooks/useReplay'; +import { useJsonDiffWorker } from '../hooks/useJsonDiffWorker'; import StateDiff from './StateDiff'; import JsonTreeView from './JsonTreeView'; interface Props { aggregateId: string; sequence: number; + compareSequence?: number | null; activeTab?: TabId; onTabChange?: (tab: TabId) => void; source?: string | null; @@ -13,125 +15,104 @@ interface Props { export type TabId = 'changes' | 'before-after' | 'raw'; -const TABS: { id: TabId; label: string; emoji: string }[] = [ - { id: 'changes', label: 'Changes', emoji: '±' }, - { id: 'before-after', label: 'Before / After', emoji: '⇄' }, - { id: 'raw', label: 'Raw JSON', emoji: '{ }' }, +const TABS: { id: TabId; label: string }[] = [ + { id: 'changes', label: 'Changes' }, + { id: 'before-after', label: 'Before / After' }, + { id: 'raw', label: 'Raw JSON' }, ]; -export default function StateViewer({ aggregateId, sequence, activeTab: externalTab, onTabChange, source }: Props) { - const { data: transitions, isLoading } = useReplay(aggregateId, source); +export default function StateViewer({ aggregateId, sequence, compareSequence, activeTab: externalTab, onTabChange, source }: Props) { + const { data: transitions = [], isLoading } = useReplay(aggregateId, source); const [localTab, setLocalTab] = useState('changes'); const activeTab = externalTab ?? localTab; - const handleTab = (t: TabId) => { - setLocalTab(t); - onTabChange?.(t); + const handleTab = (tab: TabId) => { + setLocalTab(tab); + onTabChange?.(tab); }; + const primary = transitions.find(t => t.event.sequenceNumber === sequence) ?? null; + const compare = compareSequence != null + ? transitions.find(t => t.event.sequenceNumber === compareSequence) ?? null + : null; + const compareMode = primary != null && compare != null && primary.event.sequenceNumber !== compare.event.sequenceNumber; + const leftState = compareMode ? compare.stateAfter : primary?.stateBefore; + const rightState = primary?.stateAfter; + const { patches, loading: diffLoading, durationMs } = useJsonDiffWorker(leftState, rightState, compareMode && !!leftState && !!rightState); + + const changedKeys = useMemo(() => { + if (compareMode) { + return new Set(patches.map(patch => patch.path.replace(/^\$\./, '').split('.')[0])); + } + return new Set(Object.keys(primary?.diff ?? {})); + }, [compareMode, patches, primary?.diff]); + if (isLoading) { - return ( -
-
🔬 State at Event
-
-
- ); + return
State
; + } + if (!primary) { + return null; } - - const transition = transitions?.find(t => t.event.sequenceNumber === sequence); - if (!transition) return null; - - const { event, stateBefore, stateAfter, diff } = transition; - - const diffEntries = Object.entries(diff); - const hasDiff = diffEntries.length > 0; - const changedKeys = new Set(diffEntries.map(([k]) => k)); return (
- 🔬 State at Event #{event.sequenceNumber} - - {event.eventType} - - {hasDiff && ( - - {diffEntries.length} {diffEntries.length === 1 ? 'change' : 'changes'} - - )} + State at Event #{primary.event.sequenceNumber} + {primary.event.eventType} + {compareMode && Compared with #{compare?.event.sequenceNumber}} + {compareMode && !diffLoading && Worker {durationMs.toFixed(1)}ms}
- - {/* Tab strip */}
- {TABS.map(t => ( + {TABS.map(tab => ( ))}
- - {/* Tab content */}
- - {/* Changes tab — StateDiff */} {activeTab === 'changes' && (
- {hasDiff ? ( - + {compareMode ? ( + diffLoading ?
: ) : ( -

No field changes at this event.

+ primary.diff && Object.keys(primary.diff).length > 0 + ? + :

No field changes at this event.

)}
)} - - {/* Before / After tab — JSON tree views */} {activeTab === 'before-after' && (
-

Before

- +

{compareMode ? `Event #${compare?.event.sequenceNumber}` : 'Before'}

+
-

After

- +

{compareMode ? `Event #${primary.event.sequenceNumber}` : 'After'}

+
)} - - {/* Raw JSON tab */} {activeTab === 'raw' && (
- {JSON.stringify(event, null, 2)} + {JSON.stringify(compareMode ? { + leftEvent: compare?.event, + rightEvent: primary.event, + leftState, + rightState, + } : primary.event, null, 2)}
-
)}
); } - - diff --git a/eventlens-ui/src/components/StatisticsPanel.tsx b/eventlens-ui/src/components/StatisticsPanel.tsx new file mode 100644 index 0000000..cc55340 --- /dev/null +++ b/eventlens-ui/src/components/StatisticsPanel.tsx @@ -0,0 +1,57 @@ +import { useState } from 'react'; +import { useStatistics } from '../hooks/useStatistics'; + +export default function StatisticsPanel({ source }: { source?: string | null }) { + const [windowHours, setWindowHours] = useState(24); + const { data, isLoading } = useStatistics(source, 1, windowHours); + + return ( +
+
Statistics {source ? `- ${source}` : ''}
+
+ {[6, 24, 72].map(hours => ( + + ))} +
+ {isLoading &&
} + {!isLoading && data && !data.available && ( +

{data.message ?? 'Statistics not available.'}

+ )} + {!isLoading && data?.available && ( + <> +
+
{data.totalEvents}Total events
+
{data.distinctAggregates}Aggregates
+
{data.eventTypes.length}Event types
+
+
+ {data.throughput.map(point => ( +
+ {point.bucket.slice(11, 16)} +
p.count), 1)) * 100)}%` }} />
+ {point.count} +
+ ))} +
+
+
+

Event Types

+ {data.eventTypes.map(item =>
{item.type}{item.count}
)} +
+
+

Aggregate Types

+ {data.aggregateTypes.map(item =>
{item.type}{item.count}
)} +
+
+ + )} +
+ ); +} diff --git a/eventlens-ui/src/components/Timeline.tsx b/eventlens-ui/src/components/Timeline.tsx index 93848e9..e273b31 100644 --- a/eventlens-ui/src/components/Timeline.tsx +++ b/eventlens-ui/src/components/Timeline.tsx @@ -1,4 +1,4 @@ -import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; import type { StoredEvent } from '../api/client'; import { useTimeline } from '../hooks/useTimeline'; import { parseEventTimestamp } from '../utils/time'; @@ -6,16 +6,35 @@ import { parseEventTimestamp } from '../utils/time'; interface Props { aggregateId: string; selectedSequence: number | null; + compareSequence?: number | null; onSelectEvent: (seq: number) => void; + onSelectCompare?: (seq: number | null) => void; source?: string | null; } const MIN_SAME_TYPE_RUN = 4; +const ROW_HEIGHT = 58; +const VIEWPORT_HEIGHT = 360; +const OVERSCAN = 6; +const ZOOM_OPTIONS = [1, 6, 24, 168] as const; type Segment = | { kind: 'single'; event: StoredEvent; index: number } | { kind: 'group'; eventType: string; items: StoredEvent[]; startIndex: number }; +type TimelineRow = + | { kind: 'single'; key: string; event: StoredEvent; stepNumber: number } + | { + kind: 'group'; + key: string; + eventType: string; + items: StoredEvent[]; + startIndex: number; + expanded: boolean; + containsSelection: boolean; + } + | { kind: 'group-item'; key: string; event: StoredEvent; stepNumber: number; parentKey: string }; + function dotClass(eventType: string): string { const t = eventType.toLowerCase(); if (t.includes('created') || t.includes('opened') || t.includes('placed') || t.includes('submitted')) return 'created'; @@ -23,8 +42,6 @@ function dotClass(eventType: string): string { if (t.includes('completed') || t.includes('resolved') || t.includes('accepted') || t.includes('approved') || t.includes('assigned')) return 'completed'; if (t.includes('failed') || t.includes('error') || t.includes('blocked')) return 'failed'; if (t.includes('transfer')) return 'transfer'; - if (t.includes('line_item') || (t.includes('item') && t.includes('add'))) return 'item'; - if (t.includes('payment') || t.includes('progress')) return 'progress'; return 'default'; } @@ -35,7 +52,7 @@ function buildSegments(events: StoredEvent[]): Segment[] { const type = events[i].eventType; let j = i + 1; while (j < events.length && events[j].eventType === type) { - j++; + j += 1; } const runLen = j - i; if (runLen >= MIN_SAME_TYPE_RUN) { @@ -45,13 +62,12 @@ function buildSegments(events: StoredEvent[]): Segment[] { items: events.slice(i, j), startIndex: i, }); - i = j; } else { - for (let k = i; k < j; k++) { + for (let k = i; k < j; k += 1) { out.push({ kind: 'single', event: events[k], index: k }); } - i = j; } + i = j; } return out; } @@ -60,165 +76,191 @@ function groupKey(startIndex: number, len: number): string { return `${startIndex}-${len}`; } -function StepButton({ - event, - stepNumber, - selectedSequence, - onSelectEvent, - compact, -}: { - event: StoredEvent; - stepNumber: number; - selectedSequence: number | null; - onSelectEvent: (seq: number) => void; - compact?: boolean; -}) { - const dc = dotClass(event.eventType); - const active = selectedSequence === event.sequenceNumber; - return ( - - ); +function flattenRows( + segments: Segment[], + expandedGroupKey: string | null, + selectedSequence: number | null, +): TimelineRow[] { + const rows: TimelineRow[] = []; + for (const segment of segments) { + if (segment.kind === 'single') { + rows.push({ + kind: 'single', + key: `single-${segment.event.sequenceNumber}`, + event: segment.event, + stepNumber: segment.index + 1, + }); + continue; + } + + const key = groupKey(segment.startIndex, segment.items.length); + const containsSelection = selectedSequence != null + && segment.items.some(item => item.sequenceNumber === selectedSequence); + const expanded = expandedGroupKey === key; + rows.push({ + kind: 'group', + key: `group-${key}`, + eventType: segment.eventType, + items: segment.items, + startIndex: segment.startIndex, + expanded, + containsSelection, + }); + if (expanded) { + rows.push(...segment.items.map((event, index) => ({ + kind: 'group-item' as const, + key: `group-item-${event.sequenceNumber}`, + event, + stepNumber: segment.startIndex + index + 1, + parentKey: key, + }))); + } + } + return rows; +} + +function firstSequenceForRow(row: TimelineRow): number { + switch (row.kind) { + case 'single': + case 'group-item': + return row.event.sequenceNumber; + case 'group': + return row.items[0]?.sequenceNumber ?? 0; + } +} + +function eventRowLabel(stepNumber: number, event: StoredEvent): string { + return `Event ${stepNumber}, sequence ${event.sequenceNumber}, ${event.eventType}`; } -export default function Timeline({ aggregateId, selectedSequence, onSelectEvent, source }: Props) { +export default function Timeline({ + aggregateId, + selectedSequence, + compareSequence, + onSelectEvent, + onSelectCompare, + source, +}: Props) { const { data: timeline, isLoading } = useTimeline(aggregateId, source); + const [filterType, setFilterType] = useState(''); + const [jumpInput, setJumpInput] = useState(''); + const [zoomHours, setZoomHours] = useState('all'); + const [expandedGroupKey, setExpandedGroupKey] = useState(null); + const [scrollTop, setScrollTop] = useState(0); + const containerRef = useRef(null); + const events = timeline?.events ?? []; const totalEvents = timeline?.totalEvents ?? 0; - const [expandedGroupKey, setExpandedGroupKey] = useState(null); - const [jumpInput, setJumpInput] = useState(''); - const [filterType, setFilterType] = useState(''); - const segments = useMemo(() => (events.length ? buildSegments(events) : []), [events]); - const eventTypes = useMemo(() => (events.length ? [...new Set(events.map(event => event.eventType))].sort() : []), [events]); - const filteredEvents = useMemo(() => (!filterType ? events : events.filter(event => event.eventType === filterType)), [events, filterType]); - const filteredSegments = useMemo(() => (filteredEvents.length ? buildSegments(filteredEvents) : []), [filteredEvents]); - const activeSegments = filterType ? filteredSegments : segments; - const activeEvents = filterType ? filteredEvents : events; - - const selectedIndex = selectedSequence != null ? activeEvents.findIndex(event => event.sequenceNumber === selectedSequence) : -1; - const stepDisplay = selectedIndex >= 0 ? selectedIndex + 1 : null; - const minSeq = activeEvents[0]?.sequenceNumber ?? 0; - const maxSeq = activeEvents[activeEvents.length - 1]?.sequenceNumber ?? 0; - - const expandedSeg = useMemo(() => { - if (!expandedGroupKey) return null; - for (const seg of activeSegments) { - if (seg.kind === 'group' && groupKey(seg.startIndex, seg.items.length) === expandedGroupKey) { - return seg; - } + const visibleEvents = useMemo(() => { + let next = events; + if (filterType) { + next = next.filter(event => event.eventType === filterType); + } + if (zoomHours !== 'all' && next.length > 0) { + const last = parseEventTimestamp(next[next.length - 1].timestamp).getTime(); + const threshold = last - (zoomHours * 60 * 60 * 1000); + next = next.filter(event => parseEventTimestamp(event.timestamp).getTime() >= threshold); } - return null; - }, [expandedGroupKey, activeSegments]); + return next; + }, [events, filterType, zoomHours]); + + const segments = useMemo(() => buildSegments(visibleEvents), [visibleEvents]); + const eventTypes = useMemo(() => [...new Set(events.map(event => event.eventType))].sort(), [events]); useEffect(() => { - if (selectedSequence == null || selectedIndex < 0) return; - for (const seg of activeSegments) { - if (seg.kind !== 'group') continue; - const end = seg.startIndex + seg.items.length - 1; - if (selectedIndex >= seg.startIndex && selectedIndex <= end) { - setExpandedGroupKey(groupKey(seg.startIndex, seg.items.length)); + if (selectedSequence == null) { + return; + } + for (const segment of segments) { + if (segment.kind !== 'group') continue; + if (segment.items.some(item => item.sequenceNumber === selectedSequence)) { + setExpandedGroupKey(groupKey(segment.startIndex, segment.items.length)); return; } } setExpandedGroupKey(null); - }, [selectedSequence, selectedIndex, activeSegments]); + }, [segments, selectedSequence]); - useEffect(() => { - if (selectedSequence == null) return; - const id = requestAnimationFrame(() => { - const stepEl = document.querySelector(`[data-timeline-seq="${selectedSequence}"]`); - const anchorEl = document.querySelector('[data-timeline-group-anchor="1"]'); - (stepEl ?? anchorEl)?.scrollIntoView({ inline: 'center', block: 'nearest', behavior: 'smooth' }); - }); - return () => cancelAnimationFrame(id); - }, [selectedSequence, expandedGroupKey, activeSegments]); - - const toggleGroup = (startIndex: number, len: number) => { - const key = groupKey(startIndex, len); - setExpandedGroupKey(prev => (prev === key ? null : key)); - }; - - const handleKeyNav = useCallback((e: KeyboardEvent) => { - if (!activeEvents.length) return; - const target = e.target as HTMLElement; - if (target.tagName === 'INPUT') return; - - if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') { - e.preventDefault(); - const dir = e.key === 'ArrowLeft' ? -1 : 1; - - if (e.shiftKey) { - const currentSeg = selectedIndex >= 0 - ? activeSegments.find(seg => seg.kind === 'group' - ? selectedIndex >= seg.startIndex && selectedIndex < seg.startIndex + seg.items.length - : seg.index === selectedIndex) - : null; - const segIdx = currentSeg ? activeSegments.indexOf(currentSeg) : -1; - const targetSeg = activeSegments[segIdx + dir]; - if (targetSeg) { - const firstEvent = targetSeg.kind === 'single' ? targetSeg.event : targetSeg.items[0]; - onSelectEvent(firstEvent.sequenceNumber); - } - } else { - const nextIndex = selectedIndex + dir; - if (nextIndex >= 0 && nextIndex < activeEvents.length) { - onSelectEvent(activeEvents[nextIndex].sequenceNumber); - } - } - } + const rows = useMemo( + () => flattenRows(segments, expandedGroupKey, selectedSequence), + [expandedGroupKey, segments, selectedSequence], + ); - if (['1', '2', '3', '4'].includes(e.key) && !e.ctrlKey && !e.metaKey && !e.altKey) { - if (target.tagName !== 'INPUT' && target.tagName !== 'TEXTAREA') { - const tabMap: Record = { '1': 'changes', '2': 'before-after', '3': 'raw' }; - window.dispatchEvent(new CustomEvent('eventlens:switchtab', { detail: tabMap[e.key] })); + const selectedRowIndex = useMemo(() => { + if (selectedSequence == null) return -1; + return rows.findIndex(row => { + if (row.kind === 'group') { + return row.items.some(item => item.sequenceNumber === selectedSequence); } - } + return row.event.sequenceNumber === selectedSequence; + }); + }, [rows, selectedSequence]); - if (e.key === ' ' && target.tagName !== 'INPUT' && target.tagName !== 'TEXTAREA' && target.tagName !== 'BUTTON') { - e.preventDefault(); - window.dispatchEvent(new CustomEvent('eventlens:togglestream')); - } + useEffect(() => { + const handler = (event: Event) => { + const delta = (event as CustomEvent).detail; + if (!rows.length) return; + + if (delta < 0 || delta > 0) { + const startIndex = selectedRowIndex >= 0 ? selectedRowIndex : 0; + const nextIndex = Math.max(0, Math.min(rows.length - 1, startIndex + delta)); + onSelectEvent(firstSequenceForRow(rows[nextIndex])); + } + }; + window.addEventListener('eventlens:timeline-step', handler); + return () => window.removeEventListener('eventlens:timeline-step', handler); + }, [onSelectEvent, rows, selectedRowIndex]); - if (e.key === 'k' && (e.metaKey || e.ctrlKey)) { - e.preventDefault(); - document.getElementById('aggregate-search')?.focus(); - } - }, [activeEvents, activeSegments, selectedIndex, onSelectEvent]); + useEffect(() => { + const handler = (event: KeyboardEvent) => { + const target = event.target as HTMLElement | null; + const isTyping = !!target && ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName); + if (isTyping || !rows.length) { + return; + } - const handleKeyNavRef = useRef(handleKeyNav); - handleKeyNavRef.current = handleKeyNav; + if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && event.shiftKey) { + event.preventDefault(); + const direction = event.key === 'ArrowLeft' ? -1 : 1; + const groupRows = rows.filter((row): row is Extract => row.kind === 'group'); + if (!groupRows.length) { + return; + } - useEffect(() => { - const handler = (e: KeyboardEvent) => handleKeyNavRef.current(e); + const currentGroupIndex = groupRows.findIndex(row => + selectedSequence != null && row.items.some(item => item.sequenceNumber === selectedSequence), + ); + const nextGroupIndex = currentGroupIndex >= 0 + ? Math.max(0, Math.min(groupRows.length - 1, currentGroupIndex + direction)) + : (direction > 0 ? 0 : groupRows.length - 1); + onSelectEvent(groupRows[nextGroupIndex].items[0].sequenceNumber); + } + }; window.addEventListener('keydown', handler); return () => window.removeEventListener('keydown', handler); - }, []); + }, [onSelectEvent, rows, selectedSequence]); - const handleJump = () => { - const seq = parseInt(jumpInput, 10); - if (!Number.isNaN(seq) && activeEvents.some(event => event.sequenceNumber === seq)) { - onSelectEvent(seq); - setJumpInput(''); + useEffect(() => { + if (selectedRowIndex < 0 || !containerRef.current) return; + const top = selectedRowIndex * ROW_HEIGHT; + const bottom = top + ROW_HEIGHT; + if (top < scrollTop) { + containerRef.current.scrollTop = top; + } else if (bottom > scrollTop + VIEWPORT_HEIGHT) { + containerRef.current.scrollTop = bottom - VIEWPORT_HEIGHT; } - }; + }, [scrollTop, selectedRowIndex]); + + const startIndex = Math.max(0, Math.floor(scrollTop / ROW_HEIGHT) - OVERSCAN); + const endIndex = Math.min(rows.length, Math.ceil((scrollTop + VIEWPORT_HEIGHT) / ROW_HEIGHT) + OVERSCAN); + const renderedRows = rows.slice(startIndex, endIndex); if (isLoading) { return (
-
Event sequence
-
+
Timeline
+
); } @@ -226,22 +268,22 @@ export default function Timeline({ aggregateId, selectedSequence, onSelectEvent, if (!events.length) { return (
-
Event sequence
-

No events found for this aggregate.

+
Timeline
+

No events found.

); } + const minSeq = visibleEvents[0]?.sequenceNumber ?? 0; + const maxSeq = visibleEvents[visibleEvents.length - 1]?.sequenceNumber ?? 0; + return (
- Event sequence - - {filterType ? `${activeEvents.length} / ${totalEvents}` : totalEvents} events - + Enhanced Timeline + {visibleEvents.length} / {totalEvents} events
-
setJumpInput(e.target.value)} - onKeyDown={e => e.key === 'Enter' && handleJump()} + onKeyDown={e => { + if (e.key === 'Enter') { + const seq = Number(jumpInput); + if (visibleEvents.some(event => event.sequenceNumber === seq)) { + onSelectEvent(seq); + setJumpInput(''); + } + } + }} aria-label="Jump to sequence number" /> -
- {eventTypes.length > 1 && ( -
+
+ + {eventTypes.map(type => ( - {eventTypes.map(type => ( - - ))} -
- )} - -
-
-
- {activeSegments.map((seg, si) => ( - - {si > 0 && {'>'}} - {seg.kind === 'single' ? ( - - ) : ( - toggleGroup(seg.startIndex, seg.items.length)} - /> - )} - - ))} -
-
+ ))} +
+ +
+ + {ZOOM_OPTIONS.map(hours => ( + + ))} +
- {expandedSeg && ( -
-
- {expandedSeg.eventType} - - {expandedSeg.items.length} events steps {expandedSeg.startIndex + 1}- - {expandedSeg.startIndex + expandedSeg.items.length} - - + ); + } + + const event = row.event; + const selected = selectedSequence === event.sequenceNumber; + const compared = compareSequence === event.sequenceNumber; + const compactClass = row.kind === 'group-item' ? ' timeline-step-compact' : ''; + + return ( + -
-
- {expandedSeg.items.map((event, i) => ( - - {i > 0 && {'>'}} - - - ))} -
-
- )} + ); + })} +
First seq #{minSeq} - {stepDisplay != null ? ( + {selectedSequence != null ? ( <> - Step {stepDisplay} of {activeEvents.length} - sequence #{selectedSequence} -
- - {activeEvents.find(event => event.sequenceNumber === selectedSequence)?.eventType ?? ''} - + Selected seq #{selectedSequence} + {compareSequence != null && ` compared with #${compareSequence}`} + in {rows.length} visible rows - ) : ( - 'Select an event above or drag the scrubber' - )} + ) : 'Select an event'}
Last seq #{maxSeq}
); } - -function GroupSummaryChip({ - segment, - selectedSequence, - expanded, - onToggle, -}: { - segment: Extract; - selectedSequence: number | null; - expanded: boolean; - onToggle: () => void; -}) { - const { items, startIndex, eventType } = segment; - const first = items[0]; - const last = items[items.length - 1]; - const dc = dotClass(eventType); - const containsSelection = selectedSequence != null && items.some(event => event.sequenceNumber === selectedSequence); - const showAnchor = containsSelection && !expanded; - - return ( - - ); -} diff --git a/eventlens-ui/src/hooks/useJsonDiffWorker.ts b/eventlens-ui/src/hooks/useJsonDiffWorker.ts new file mode 100644 index 0000000..5c5a424 --- /dev/null +++ b/eventlens-ui/src/hooks/useJsonDiffWorker.ts @@ -0,0 +1,37 @@ +import { useEffect, useMemo, useState } from 'react'; +import type { DiffPatch } from '../api/client'; +import type { DiffResult } from '../workers/json-diff.worker'; + +export function useJsonDiffWorker(left: unknown, right: unknown, enabled = true) { + const [patches, setPatches] = useState([]); + const [durationMs, setDurationMs] = useState(0); + const [loading, setLoading] = useState(false); + const requestId = useMemo(() => `${Date.now()}-${Math.random()}`, [left, right]); + + useEffect(() => { + if (!enabled) { + setPatches([]); + setDurationMs(0); + setLoading(false); + return; + } + const worker = new Worker(new URL('../workers/json-diff.worker.ts', import.meta.url), { type: 'module' }); + setLoading(true); + const handleMessage = (event: MessageEvent) => { + if (event.data.requestId !== requestId) { + return; + } + setPatches(event.data.patches); + setDurationMs(event.data.durationMs); + setLoading(false); + }; + worker.addEventListener('message', handleMessage); + worker.postMessage({ left, right, requestId }); + return () => { + worker.removeEventListener('message', handleMessage); + worker.terminate(); + }; + }, [enabled, left, right, requestId]); + + return { patches, durationMs, loading }; +} diff --git a/eventlens-ui/src/hooks/useReplay.ts b/eventlens-ui/src/hooks/useReplay.ts index 57b40fc..b7f68eb 100644 --- a/eventlens-ui/src/hooks/useReplay.ts +++ b/eventlens-ui/src/hooks/useReplay.ts @@ -5,5 +5,6 @@ export function useReplay(aggregateId: string, source?: string | null) { return useQuery({ queryKey: ['transitions', aggregateId, source ?? 'default'], queryFn: () => getTransitions(aggregateId, source), + enabled: !!aggregateId, }); } diff --git a/eventlens-ui/src/hooks/useStatistics.ts b/eventlens-ui/src/hooks/useStatistics.ts new file mode 100644 index 0000000..a2a51db --- /dev/null +++ b/eventlens-ui/src/hooks/useStatistics.ts @@ -0,0 +1,10 @@ +import { useQuery } from '@tanstack/react-query'; +import { getStatistics } from '../api/client'; + +export function useStatistics(source?: string | null, bucketHours = 1, maxBuckets = 24) { + return useQuery({ + queryKey: ['statistics', source ?? 'default', bucketHours, maxBuckets], + queryFn: () => getStatistics(source, bucketHours, maxBuckets), + staleTime: 30_000, + }); +} diff --git a/eventlens-ui/src/hooks/useTimeline.ts b/eventlens-ui/src/hooks/useTimeline.ts index dc1a352..126c88b 100644 --- a/eventlens-ui/src/hooks/useTimeline.ts +++ b/eventlens-ui/src/hooks/useTimeline.ts @@ -5,5 +5,6 @@ export function useTimeline(aggregateId: string, source?: string | null) { return useQuery({ queryKey: ['timeline', aggregateId, source ?? 'default', 'metadata'], queryFn: () => getTimeline(aggregateId, 500, 0, source, 'metadata'), + enabled: !!aggregateId, }); } diff --git a/eventlens-ui/src/index.css b/eventlens-ui/src/index.css index 36a3d95..c1c2552 100644 --- a/eventlens-ui/src/index.css +++ b/eventlens-ui/src/index.css @@ -2595,3 +2595,154 @@ body::after { .app-main { padding-bottom: 40px; } + +.command-palette-backdrop { + position: fixed; + inset: 0; + background: rgba(5, 5, 8, 0.7); + display: flex; + align-items: flex-start; + justify-content: center; + padding-top: 12vh; + z-index: 1000; +} + +.command-palette { + width: min(640px, calc(100vw - 32px)); + background: var(--bg-raised); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow); + overflow: hidden; +} + +.command-palette-input { + width: 100%; + border: 0; + border-bottom: 1px solid var(--border); + background: transparent; + color: var(--text-primary); + padding: 16px; + font: inherit; +} + +.command-palette-list { + list-style: none; + max-height: 320px; + overflow: auto; +} + +.command-palette-item { + padding: 12px 16px; + cursor: pointer; + color: var(--text-primary); +} + +.command-palette-item.active, +.command-palette-item:hover { + background: var(--neon-cyan-dim); +} + +.command-palette-item.muted { + color: var(--text-muted); +} + +.statistics-toolbar, +.stats-kpis, +.stats-distribution { + display: flex; + gap: 12px; + flex-wrap: wrap; +} + +.stats-kpis { + margin: 12px 0 16px; +} + +.stat-card { + min-width: 140px; + padding: 14px; + background: rgba(255,255,255,0.02); + border: 1px solid var(--border); + border-radius: var(--radius); + display: flex; + flex-direction: column; + gap: 6px; +} + +.stat-card strong { + font-size: 24px; +} + +.stats-chart { + display: grid; + gap: 8px; + margin-bottom: 16px; +} + +.stats-bar-row, +.stats-list-row, +.replay-toolbar { + display: flex; + align-items: center; + gap: 10px; +} + +.stats-bar-track { + flex: 1; + height: 10px; + background: rgba(255,255,255,0.06); + border-radius: 999px; + overflow: hidden; +} + +.stats-bar-fill { + height: 100%; + background: linear-gradient(90deg, var(--neon-cyan), var(--accent-blue)); +} + +.stats-distribution > div, +.replay-state { + flex: 1; + min-width: 260px; +} + +.replay-toolbar { + justify-content: space-between; + margin-bottom: 12px; +} + +.timeline-virtual-container { + margin-top: 12px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: rgba(255,255,255,0.02); +} + +.timeline-step { + display: grid; + grid-template-columns: 110px 90px 1fr 90px; + align-items: center; + width: calc(100% - 8px); + margin: 3px 4px; + padding: 0 12px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: rgba(14, 18, 32, 0.95); + color: var(--text-primary); + text-align: left; +} + +.timeline-step-compare { + box-shadow: inset 0 0 0 1px var(--neon-magenta); +} + +.diff-split-row--added .diff-split-new, +.diff-split-row--changed .diff-split-new { + background: rgba(0,255,136,0.06); +} + +.diff-split-row--removed .diff-split-old, +.diff-split-row--changed .diff-split-old { + background: rgba(255,51,85,0.06); +} diff --git a/eventlens-ui/src/workers/json-diff.worker.ts b/eventlens-ui/src/workers/json-diff.worker.ts new file mode 100644 index 0000000..90684f7 --- /dev/null +++ b/eventlens-ui/src/workers/json-diff.worker.ts @@ -0,0 +1,67 @@ +export interface DiffRequest { + left: unknown; + right: unknown; + requestId: string; +} + +export interface DiffPatch { + path: string; + type: 'added' | 'removed' | 'changed'; + oldValue?: unknown; + newValue?: unknown; +} + +export interface DiffResult { + requestId: string; + patches: DiffPatch[]; + durationMs: number; +} + +function isObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +function diffRecursive(left: unknown, right: unknown, path: string, patches: DiffPatch[]): void { + if (JSON.stringify(left) === JSON.stringify(right)) { + return; + } + + if (left === undefined || left === null) { + patches.push({ path, type: 'added', newValue: right }); + return; + } + if (right === undefined || right === null) { + patches.push({ path, type: 'removed', oldValue: left }); + return; + } + + if (Array.isArray(left) && Array.isArray(right)) { + const max = Math.max(left.length, right.length); + for (let i = 0; i < max; i += 1) { + diffRecursive(left[i], right[i], `${path}[${i}]`, patches); + } + return; + } + + if (isObject(left) && isObject(right)) { + const keys = new Set([...Object.keys(left), ...Object.keys(right)]); + for (const key of keys) { + diffRecursive(left[key], right[key], path === '$' ? `$.${key}` : `${path}.${key}`, patches); + } + return; + } + + patches.push({ path, type: 'changed', oldValue: left, newValue: right }); +} + +self.onmessage = (event: MessageEvent) => { + const start = performance.now(); + const patches: DiffPatch[] = []; + diffRecursive(event.data.left, event.data.right, '$', patches); + const payload: DiffResult = { + requestId: event.data.requestId, + patches, + durationMs: performance.now() - start, + }; + self.postMessage(payload); +}; From 2636167228ed17449235f90dcd3ab0ab9b5bb785 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Wed, 25 Mar 2026 16:54:36 +0200 Subject: [PATCH 04/10] feat(v4): finish remaining epic gaps --- .github/workflows/build.yml | 7 + ...{index-DjroUjh3.css => index-B30Asjwx.css} | 2 +- .../resources/web/assets/index-C4jzZb0y.js | 14 + .../resources/web/assets/index-DNgDBNrF.js | 14 - .../web/assets/json-diff.worker-ClgOBOoF.js | 1 - .../web/assets/json-diff.worker-DTKMBXSt.js | 1 + .../src/main/resources/web/index.html | 4 +- .../api/SourceAwarePanelsIntegrationTest.java | 92 +++++ .../eventlens/api/V4ReadinessApiE2ETest.java | 60 ++- eventlens-ui/build.gradle.kts | 42 ++ eventlens-ui/package-lock.json | 377 +++++++++++++++++- eventlens-ui/package.json | 4 +- eventlens-ui/playwright.config.ts | 8 +- eventlens-ui/src/App.tsx | 33 +- eventlens-ui/src/api/client.ts | 58 ++- .../src/components/CommandPalette.tsx | 10 +- .../src/components/ReplayDebugger.tsx | 12 +- eventlens-ui/src/components/SearchBar.tsx | 9 +- eventlens-ui/src/components/StateViewer.tsx | 8 +- .../src/components/StatisticsPanel.tsx | 4 +- eventlens-ui/src/components/Timeline.tsx | 95 +---- eventlens-ui/src/demo/demoData.ts | 28 ++ eventlens-ui/src/index.css | 11 + eventlens-ui/src/utils/jsonDiff.test.ts | 28 ++ eventlens-ui/src/utils/jsonDiff.ts | 49 +++ eventlens-ui/src/utils/timelineRows.test.ts | 57 +++ eventlens-ui/src/utils/timelineRows.ts | 99 +++++ eventlens-ui/src/workers/json-diff.worker.ts | 41 +- eventlens-ui/vitest.config.ts | 8 + 29 files changed, 995 insertions(+), 181 deletions(-) rename eventlens-api/src/main/resources/web/assets/{index-DjroUjh3.css => index-B30Asjwx.css} (99%) create mode 100644 eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js delete mode 100644 eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js delete mode 100644 eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js create mode 100644 eventlens-api/src/main/resources/web/assets/json-diff.worker-DTKMBXSt.js create mode 100644 eventlens-ui/src/utils/jsonDiff.test.ts create mode 100644 eventlens-ui/src/utils/jsonDiff.ts create mode 100644 eventlens-ui/src/utils/timelineRows.test.ts create mode 100644 eventlens-ui/src/utils/timelineRows.ts create mode 100644 eventlens-ui/vitest.config.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 32d8de5..64bf42d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,6 +30,13 @@ jobs: - name: Compile and build (skip integration tests) run: ./gradlew build -x :eventlens-stream-kafka:test -x :eventlens-source-postgres:test --no-daemon + - name: Install Playwright browser + working-directory: eventlens-ui + run: npx playwright install --with-deps chromium + + - name: Run frontend browser gate + run: ./gradlew :eventlens-ui:npmTestE2e --no-daemon + integration-tests: runs-on: ubuntu-latest needs: build diff --git a/eventlens-api/src/main/resources/web/assets/index-DjroUjh3.css b/eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css similarity index 99% rename from eventlens-api/src/main/resources/web/assets/index-DjroUjh3.css rename to eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css index e43db06..2add8b2 100644 --- a/eventlens-api/src/main/resources/web/assets/index-DjroUjh3.css +++ b/eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css @@ -1 +1 @@ -:root{--bg-base:#050508;--bg-surface:#0a0c14;--bg-raised:#0f1220;--bg-elevated:#161b2e;--bg-panel:linear-gradient(145deg, #0c0f1a 0%, #0a0d18 50%, #080b14 100%);--border:#1a2040;--border-muted:#121830;--border-glow:#00f0ff26;--text-primary:#e8eef8;--text-secondary:#94a3c0;--text-muted:#5a6a8a;--neon-cyan:#00f0ff;--neon-cyan-dim:#00f0ff14;--neon-cyan-mid:#00f0ff40;--neon-magenta:#ff00e5;--neon-magenta-dim:#ff00e514;--neon-green:#0f8;--neon-green-dim:#00ff881a;--neon-amber:#fa0;--neon-amber-dim:#ffaa001a;--neon-red:#f35;--neon-red-dim:#ff33551a;--neon-purple:#a855f7;--accent-blue:#4f9cf9;--accent-blue-dim:#4f9cf926;--accent-green:var(--neon-green);--accent-red:var(--neon-red);--accent-yellow:var(--neon-amber);--accent-purple:var(--neon-purple);--font-sans:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-display:"Orbitron", var(--font-sans);--radius:6px;--radius-lg:10px;--shadow:0 4px 24px #0009;--shadow-neon:0 0 20px #00f0ff14, 0 0 60px #00f0ff08;--transition:.2s ease;--bottom-panel-scroll-height:280px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00f0ff04 2px 4px);position:fixed;inset:0}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{--header-pad-x:24px;--header-pad-right:48px;--header-control-h:34px;padding:0 var(--header-pad-right) 0 var(--header-pad-x);border-bottom:1px solid var(--border);z-index:100;background:linear-gradient(#0d1020 0%,#080b14 100%);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(12px,2vw,20px);height:64px;display:grid;position:sticky;top:0;box-shadow:0 2px 20px #00000080,inset 0 -1px #00f0ff0f}.brand{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:relative}.brand-logo svg{width:36px;height:36px;filter:drop-shadow(0 0 6px var(--neon-cyan)) drop-shadow(0 0 12px #00f0ff4d)}.brand-name{font-family:var(--font-display);letter-spacing:1.5px;color:var(--text-primary);text-transform:uppercase;font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);letter-spacing:.5px;font-size:10px}.header-title{font-family:var(--font-display);letter-spacing:3px;text-transform:uppercase;background:linear-gradient(135deg, var(--neon-cyan), #4facfe, var(--neon-magenta));-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 8px #00f0ff66);text-align:center;-webkit-background-clip:text;background-clip:text;flex-shrink:0;margin:0;font-size:20px;font-weight:800;line-height:1}.header-center{flex-flow:row;justify-content:center;justify-self:center;align-items:center;gap:clamp(10px,1.5vw,16px);min-width:0;display:flex}.header-demo-pill{box-sizing:border-box;height:var(--header-control-h);background:var(--neon-amber-dim);color:var(--neon-amber);font-family:var(--font-mono);white-space:nowrap;border:1px solid #ffaa0059;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0 12px;font-size:11px;line-height:1;display:inline-flex}.header-actions{flex-direction:row;justify-content:flex-end;justify-self:end;align-items:center;gap:clamp(10px,1.2vw,16px);min-width:0;display:flex}.header-actions .conn-stats,.header-actions .header-status{flex-shrink:0}.workspace-datasource{flex-direction:column;gap:6px;min-width:0;margin:0;display:flex}.workspace-datasource-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;line-height:1}.workspace-datasource-select{box-sizing:border-box;appearance:none;width:100%;height:34px;color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);background-color:#0c1020f2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3c0' d='M3 4.5 6 8l3-3.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;border:1px solid #ffffff24;border-radius:8px;padding:0 32px 0 12px;font-size:12px;line-height:1;box-shadow:inset 0 1px #00f0ff0f}.workspace-datasource-select:hover{border-color:#00f0ff40}.workspace-datasource-select:focus{border-color:var(--neon-cyan-mid);outline:none;box-shadow:0 0 0 1px #00f0ff33}.header-status{font-size:12px;font-family:var(--font-sans);letter-spacing:.3px;align-items:center;gap:8px;display:flex}.header-status .status-text{color:var(--neon-green);text-shadow:0 0 8px #00ff8880}.header-status .status-text.offline{color:var(--neon-red);text-shadow:0 0 8px #ff335580}.dot{border-radius:50%;width:8px;height:8px}.dot-green{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green), 0 0 12px #0f86;animation:2s infinite pulse-neon}.dot-red{background:var(--neon-red);box-shadow:0 0 6px var(--neon-red)}.dot-yellow{background:var(--neon-amber);box-shadow:0 0 6px var(--neon-amber);animation:1.5s infinite pulse-neon}@keyframes pulse-neon{0%,to{opacity:1}50%{opacity:.4}}.app-main{flex-direction:column;flex:1;gap:16px;width:100%;max-width:1440px;margin:0 auto;padding:20px;display:flex}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow), var(--shadow-neon);padding:20px;position:relative;overflow:hidden}.card.card--dropdown-host{z-index:30;overflow:visible}.card:before{content:"";background:linear-gradient(90deg, transparent, var(--neon-cyan-mid), transparent);height:1px;position:absolute;top:0;left:0;right:0}.card:after{content:"";background:linear-gradient(90deg,#0000,#ff00e51a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.card-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;text-shadow:0 0 6px #00f0ff33;align-items:center;gap:8px;margin-bottom:16px;font-size:13px;font-weight:600;display:flex}.control-ribbon{padding:14px 18px}.control-ribbon-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.control-ribbon-title{margin-bottom:4px}.control-ribbon-subtitle{color:var(--text-muted);font-size:12px}.control-ribbon-nav{align-items:center;gap:12px;font-size:13px;display:inline-flex}.control-ribbon-nav a{text-decoration:none}.control-ribbon-nav a[aria-current=page]{text-underline-offset:2px;text-decoration:underline}.control-panel{gap:12px;padding:16px 18px;display:grid}.control-panel-grid{grid-template-columns:minmax(220px,360px) minmax(0,1fr);align-items:end;gap:12px;display:grid}.control-field,.control-field--search{min-width:0}.control-field-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;display:block}.control-select{width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);background:#0d1123eb;border:1px solid #ffffff24;border-radius:10px;outline:none;padding:10px 12px;font-size:12px}.control-select:focus{border-color:var(--neon-cyan-mid);box-shadow:0 0 14px #00f0ff26}.datasource-pills{flex-wrap:wrap;gap:8px;display:flex}.datasource-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:4px 8px}.selection-summary{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);margin-top:2px}.selection-clear-btn{color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border:none;margin-left:12px}.selection-clear-btn:hover{color:var(--neon-cyan)}.workspace-dock{z-index:110;border:1px solid var(--border-muted);pointer-events:auto;border-right:none;border-radius:10px 0 0 10px;flex-direction:row;align-items:center;width:auto;height:auto;max-height:min(72vh,100vh - 112px);transition:box-shadow .2s;display:flex;position:fixed;inset:50% 0 auto auto;overflow:hidden;transform:translateY(-50%);box-shadow:-6px 4px 22px #0000006b}.workspace-dock--open{box-shadow:-8px 6px 28px #0000007a,0 0 0 1px #00f0ff14}.workspace-dock-handle{border:none;border-left:1px solid var(--border-muted);width:36px;height:36px;color:var(--neon-cyan);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition), color var(--transition);background:linear-gradient(#0f1324 0%,#0a0e18 100%);flex-direction:row;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.workspace-dock-handle:hover{color:var(--text-primary);background:linear-gradient(#141a30 0%,#0d1220 100%)}.workspace-dock-handle:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:-2px}.workspace-dock-chevron{font-size:15px;font-weight:700;line-height:1}.workspace-dock-panel{border-left:1px solid var(--border);background:linear-gradient(145deg,#0c101c 0%,#080c14 100%);flex-direction:column;flex:0 auto;gap:8px;width:min(252px,100vw - 48px);min-width:0;max-height:min(72vh,100vh - 112px);padding:10px 12px 12px 14px;display:flex;overflow:hidden auto}.workspace-dock-panel[hidden]{display:none!important}.workspace-dock-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:12px;font-weight:600}.workspace-dock-scrim{z-index:109;cursor:pointer;background:#03050c73;border:none;margin:0;padding:0;position:fixed;inset:64px 0 36px}.workspace-sidebar-kpis{border:1px solid var(--border-muted);border-radius:var(--radius);background:#080b148c;gap:6px;padding:8px 10px;display:grid}.workspace-kpi-row{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);justify-content:space-between;gap:8px;display:flex}.workspace-kpi-row strong{color:var(--text-primary)}.workspace-sidebar-links{color:var(--text-secondary);gap:6px;font-size:12px;display:grid}.workspace-content{gap:16px;display:grid}.search-panel{width:100%;min-width:0}.selection-clear-btn:focus-visible,.control-ribbon-nav a:focus-visible,.control-select:focus-visible,.workspace-datasource-select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.plugin-dashboard{gap:14px;display:grid}.plugin-cards-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.plugin-cards-grid--dense{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plugin-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(140deg,#101527f2,#0a0e1cf2);padding:12px 14px;box-shadow:inset 0 1px #ffffff05}.plugin-card--interactive{transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition)}.plugin-card--interactive:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 16px #00f0ff1a}.plugin-card--interactive:focus-within{border-color:var(--neon-cyan-mid);box-shadow:0 0 0 2px #00f0ff26}.plugin-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.plugin-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:2px 8px}.plugin-card-meta{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);overflow-wrap:anywhere;margin-top:8px}.plugin-card-detail{color:var(--text-secondary);margin-top:8px;font-size:12px;line-height:1.55}.search-wrapper{position:relative}.search-input{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);outline:none;padding:14px 16px 14px 44px;font-size:13px}.search-input:focus{border-color:var(--neon-cyan);box-shadow:0 0 14px #00f0ff2e}.search-input::placeholder{color:var(--text-muted)}.search-icon{color:var(--neon-cyan);pointer-events:none;filter:drop-shadow(0 0 4px #00f0ff80);font-size:16px;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.search-results{background:var(--bg-raised);border:1px solid var(--neon-cyan-mid);border-radius:var(--radius);z-index:500;max-height:min(55vh,420px);position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden auto;box-shadow:0 12px 40px #000000a6,0 0 24px #00f0ff14}.search-result-item{cursor:pointer;transition:background var(--transition);font-family:var(--font-mono);color:var(--text-primary);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:13px;display:flex}.search-result-item:hover{background:var(--bg-elevated);box-shadow:inset 3px 0 0 var(--neon-cyan)}.search-result-item+.search-result-item{border-top:1px solid var(--border-muted)}.search-result-chevron{color:var(--text-muted);flex-shrink:0;padding-right:4px}.search-result-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:0 6px;min-width:0;display:flex}.search-result-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;font-size:10px}.search-result-colon{color:var(--text-muted);flex-shrink:0;margin-right:2px}.search-result-value{overflow-wrap:anywhere;word-break:break-word;flex:1;min-width:0}.conn-stats{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:16px;font-size:11px;display:flex}.conn-stat{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.conn-stat-label{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);font-size:9px}.conn-stat-value{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66;font-size:12px}.conn-stat-value.green{color:var(--neon-green);text-shadow:0 0 6px #0f86}.conn-stat-value.amber{color:var(--neon-amber);text-shadow:0 0 6px #fa06}.conn-stat--metric .conn-stat-value,.conn-stat-value--uptime{text-align:right;font-variant-numeric:tabular-nums;min-width:6.5ch;display:inline-block}.mini-wave{align-items:flex-end;gap:1px;height:24px;display:flex}.mini-wave-bar{background:var(--neon-cyan);border-radius:1px;width:3px;animation:1.2s ease-in-out infinite wave-pulse;box-shadow:0 0 4px #00f0ff4d}@keyframes wave-pulse{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}.timeline-count-pill{color:var(--accent-blue);font-family:var(--font-mono);background:var(--accent-blue-dim);border:1px solid #4f9cf940;border-radius:999px;padding:2px 10px;font-size:11px}.timeline-hint{color:var(--text-muted);max-width:52rem;margin:-8px 0 12px;font-size:12px;line-height:1.5}.timeline-rail{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-base);position:relative;box-shadow:inset 0 1px #00f0ff0a}.timeline-stepper{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);padding:12px 14px 14px;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.timeline-stepper-track{flex-wrap:nowrap;align-items:center;gap:4px;width:max-content;min-height:88px;display:flex}.timeline-step-arrow{color:var(--text-muted);opacity:.7;flex-shrink:0;align-self:center;padding:0 2px;font-size:11px}.timeline-step-arrow-compact{padding:0 1px;font-size:9px}.timeline-step{border-radius:var(--radius);border:1px solid var(--border-muted);background:var(--bg-raised);cursor:pointer;text-align:left;min-width:118px;max-width:200px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-step-compact{gap:2px;min-width:96px;max-width:140px;padding:8px 10px}.timeline-step-compact .timeline-step-badge{font-size:8px}.timeline-step-compact .timeline-step-type{-webkit-line-clamp:1;font-size:10px}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-step.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-step-badge{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:10px;font-weight:600}.timeline-step-seq{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.timeline-step-type{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.timeline-step-created{border-left:3px solid var(--neon-green)}.timeline-step-deleted{border-left:3px solid var(--neon-red)}.timeline-step-completed{border-left:3px solid var(--neon-green)}.timeline-step-failed{border-left:3px solid var(--neon-red)}.timeline-step-transfer{border-left:3px solid var(--neon-amber)}.timeline-step-item{border-left:3px solid var(--neon-purple)}.timeline-step-progress{border-left:3px solid #38bdf8}.timeline-step-default{border-left:3px solid var(--neon-cyan)}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);cursor:pointer;text-align:left;min-width:140px;max-width:240px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-group-chip.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-group-chip.expanded{border-color:#00f0ff59}.timeline-group-chip-top{justify-content:space-between;align-items:center;gap:8px;width:100%;display:flex}.timeline-group-count{font-family:var(--font-display);letter-spacing:.5px;color:var(--neon-cyan);font-size:16px;font-weight:800;line-height:1}.timeline-group-chevron{color:var(--text-muted);font-size:10px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.timeline-group-range{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);line-height:1.4}.timeline-expanded-deck{border-top:1px solid var(--border-muted);background:#00000040;padding:10px 14px 14px}.timeline-expanded-head{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.timeline-expanded-title{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:12px;font-weight:700}.timeline-expanded-meta{font-family:var(--font-mono);color:var(--text-muted);flex:1;font-size:11px}.timeline-expanded-close{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-raised);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition);margin-left:auto;padding:4px 12px;font-size:11px}.timeline-expanded-close:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan)}.timeline-expanded-strip{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex-wrap:nowrap;align-items:center;gap:4px;width:100%;padding-bottom:6px;display:flex;overflow-x:auto}.timeline-slider{width:100%;accent-color:var(--neon-cyan);cursor:pointer;margin-top:4px}.timeline-info{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);grid-template-columns:minmax(0,1fr) minmax(0,2.2fr) minmax(0,1fr);align-items:start;gap:12px;margin-top:12px;display:grid}.timeline-info-edge{color:var(--text-muted);font-size:11px}.timeline-info-center{text-align:center;color:var(--text-secondary);line-height:1.55}.timeline-info-center strong{color:var(--neon-cyan);font-weight:600}.timeline-info-muted{color:var(--text-muted);font-weight:400}.timeline-info-type{color:var(--text-primary);font-size:11px}.state-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.state-panel h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px;font-size:10px;font-weight:600}.state-panel-before h4{color:var(--text-muted)}.state-panel-after h4{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.json-block{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);font-family:var(--font-mono);max-height:260px;color:var(--text-secondary);white-space:pre;padding:12px;font-size:12px;line-height:1.7;overflow:auto}.json-tree-root{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);max-height:320px;font-family:var(--font-mono);color:var(--text-secondary);padding:10px 12px;font-size:13px;line-height:1.75;overflow:auto}.json-tree-line{flex-wrap:wrap;align-items:baseline;gap:2px 0;min-height:1.5em;display:flex}.json-tree-toggle{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-right:4px;padding:0;font-size:10px;line-height:1}.json-tree-toggle:hover{color:var(--neon-cyan);background:var(--neon-cyan-dim)}.json-key{color:#7dd3fc}.json-string{color:#86efac}.json-number{color:#fcd34d}.json-boolean{color:#c4b5fd}.json-null{color:var(--text-muted);font-style:italic}.json-punct{color:var(--text-muted)}.json-ellipsis{color:var(--text-muted);font-size:11px;font-style:italic}.json-unknown{color:var(--neon-amber)}.diff-panel{border-top:1px solid var(--border-muted);margin-top:20px;padding-top:16px}.diff-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.diff-toolbar-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:13px;font-weight:600}.diff-view-toggle{border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);font-size:11px;display:flex;overflow:hidden}.diff-view-toggle button{background:var(--bg-raised);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:6px 14px}.diff-view-toggle button+button{border-left:1px solid var(--border)}.diff-view-toggle button:hover{color:var(--text-secondary)}.diff-view-toggle button.active{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.diff-body{align-items:stretch;gap:10px;display:flex}.diff-minimap{border:1px solid var(--border-muted);background:var(--bg-base);border-radius:4px;flex-direction:column;flex-shrink:0;width:10px;max-height:280px;display:flex;overflow:hidden}.diff-minimap-chunk{background:var(--border);cursor:pointer;min-height:8px;transition:background var(--transition);border:none;flex:1;margin:0;padding:0}.diff-minimap-chunk:hover,.diff-minimap-chunk:focus-visible{background:var(--neon-cyan-mid);outline:none}.diff-scroll{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex:1;min-width:0;max-height:280px;overflow:auto}.diff-list{flex-direction:column;gap:0;display:flex}.diff-row{font-family:var(--font-mono);background:var(--bg-raised);border-left:3px solid var(--neon-cyan);border-bottom:1px solid var(--border-muted);border-radius:0;align-items:stretch;gap:0;padding:0;font-size:12px;line-height:1.65;display:flex}.diff-row:last-child{border-radius:0 0 var(--radius) var(--radius);border-bottom:none}.diff-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.diff-line-no{text-align:right;width:36px;color:var(--text-muted);background:var(--bg-base);border-right:1px solid var(--border-muted);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:10px 6px;font-size:10px}.diff-row-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:8px 12px;padding:10px 12px;display:flex}.diff-field{color:var(--text-primary);min-width:6rem;font-weight:700}.diff-values-inline{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.diff-old{color:var(--neon-red);font-weight:400;text-decoration:line-through}.diff-arrow{color:var(--text-muted);flex-shrink:0}.diff-new{color:var(--neon-green);text-shadow:0 0 4px #00ff8840;font-weight:400}.diff-split-head{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg-raised);z-index:1;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px 8px 48px;font-size:11px;display:grid;position:sticky;top:0}.diff-split-old-label{color:var(--neon-red)}.diff-split-new-label{color:var(--neon-green)}.diff-split-row{border-bottom:1px solid var(--border-muted);align-items:stretch;gap:0;display:flex}.diff-split-row:last-child{border-bottom:none}.diff-split-cells{flex:1;grid-template-columns:1fr 1fr;gap:8px;min-width:0;padding:8px 12px 8px 0;display:grid}.diff-split-cell{border-radius:var(--radius);background:var(--bg-base);border:1px solid var(--border-muted);min-width:0;padding:8px 10px}.diff-split-cell .diff-field{margin-bottom:6px;font-size:11px;display:block}.diff-cell-value{overflow-wrap:anywhere;word-break:break-word;font-size:12px;font-weight:400;line-height:1.6}.diff-split-old .diff-cell-value{color:var(--neon-red);opacity:.9}.diff-split-new .diff-cell-value{color:var(--neon-green)}.event-meta{color:var(--text-muted);grid-template-columns:repeat(2,1fr);gap:10px 16px;margin-top:20px;font-size:12px;display:grid}.event-meta-bar{background:var(--bg-raised);border:1px solid var(--border-muted);border-radius:var(--radius);padding:14px 16px;box-shadow:inset 0 1px #00f0ff0a}.event-meta-time{font-family:var(--font-mono);color:var(--text-secondary);font-size:12px;font-weight:500}.event-meta-id{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;grid-column:1/-1;font-size:11px;line-height:1.5}.event-meta-extra{font-family:var(--font-mono);color:var(--text-secondary);font-size:11px}@media (width<=900px){.diff-split-cells{grid-template-columns:1fr}.diff-split-head{display:none}}.copy-btn{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);font-size:12px;font-family:var(--font-mono);margin-top:12px;padding:6px 14px}.copy-btn:hover{background:var(--bg-raised);color:var(--neon-cyan);border-color:var(--neon-cyan);box-shadow:0 0 10px #00f0ff1a}.live-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.live-indicator{font-family:var(--font-sans);letter-spacing:.2px;align-items:center;gap:6px;font-size:11px;display:flex}.pause-btn{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);border-radius:4px;padding:5px 12px;font-size:11px}.pause-btn:hover{background:var(--bg-raised);border-color:var(--neon-cyan);color:var(--neon-cyan);box-shadow:0 0 8px #00f0ff1a}.event-stream{height:var(--bottom-panel-scroll-height);min-height:0;font-family:var(--font-mono);flex-direction:column;gap:3px;padding-right:4px;font-size:12px;display:flex;overflow-y:auto}.event-stream,.anomaly-scroll-region,.search-results{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base)}.event-stream::-webkit-scrollbar{width:6px}.anomaly-scroll-region::-webkit-scrollbar{width:6px}.search-results::-webkit-scrollbar{width:6px}.event-stream::-webkit-scrollbar-track{background:var(--bg-base)}.anomaly-scroll-region::-webkit-scrollbar-track{background:var(--bg-base)}.search-results::-webkit-scrollbar-track{background:var(--bg-base)}.event-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.anomaly-scroll-region::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.search-results::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.event-stream::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.anomaly-scroll-region::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.search-results::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.event-row{transition:all var(--transition);cursor:default;background:#ffffff03;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:12px;padding:6px 10px;display:flex}.event-row:hover{background:var(--bg-elevated)}.event-row.type-withdrawn{border-left-color:var(--neon-magenta)}.event-row.type-deposited{border-left-color:var(--neon-cyan)}.event-row.type-created{border-left-color:var(--neon-green)}.event-row.type-transfer{border-left-color:var(--neon-amber)}.event-row.type-deleted{border-left-color:var(--neon-red)}.event-row.type-completed{border-left-color:var(--neon-green)}.event-row.type-failed{border-left-color:var(--neon-red)}.event-row.type-default{border-left-color:var(--neon-purple)}.event-time{color:var(--text-muted);flex-shrink:0;width:75px;font-size:11px}.event-type{flex-shrink:0;width:180px;font-weight:500}.event-agg{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.event-icon{text-align:center;flex-shrink:0;width:20px;font-size:14px}.type-created{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-deleted{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-completed{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-failed{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-transfer{color:var(--neon-amber);text-shadow:0 0 6px #ffaa004d}.type-default{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.type-withdrawn{color:var(--neon-magenta);text-shadow:0 0 6px #ff00e54d}.type-deposited{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.anomaly-panel-inner{position:relative}.anomaly-shield{background:radial-gradient(#00ff880f 0%,#0000 70%);border:1px solid #00ff8826;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;padding:30px 20px;display:flex}.shield-icon{justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:12px;display:flex;position:relative}.shield-icon svg{filter:drop-shadow(0 0 12px #00ff8880)drop-shadow(0 0 24px #0f83);width:64px;height:64px}.shield-icon:after{content:"";border:1px solid #00ff8826;border-radius:50%;animation:3s ease-in-out infinite shield-pulse;position:absolute;inset:-8px}@keyframes shield-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.8;transform:scale(1.15)}}.shield-text{font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;color:var(--neon-green);text-shadow:0 0 8px #0f86;font-size:13px;font-weight:600}.gauge-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.gauge-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:12px;position:relative;overflow:hidden}.gauge-card:before{content:"";height:2px;position:absolute;bottom:0;left:0;right:0}.gauge-card.optimal:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-card.baseline:before{background:var(--neon-cyan);box-shadow:0 0 8px #00f0ff66}.gauge-card.zero:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);margin-bottom:6px;font-size:10px;font-weight:500}.gauge-value{font-family:var(--font-display);letter-spacing:1px;font-size:13px;font-weight:700}.gauge-value.optimal{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-value.baseline{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66}.gauge-value.zero{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-wave{justify-content:center;align-items:flex-end;gap:2px;height:20px;margin-top:6px;display:flex}.gauge-wave-bar{border-radius:1px;width:2px;animation:1.5s ease-in-out infinite gauge-wave-anim}.gauge-wave-bar.green{background:var(--neon-green);box-shadow:0 0 3px #0f86}.gauge-wave-bar.cyan{background:var(--neon-cyan);box-shadow:0 0 3px #00f0ff66}@keyframes gauge-wave-anim{0%,to{height:4px}50%{height:16px}}.anomaly-scroll-region{box-sizing:border-box;height:var(--bottom-panel-scroll-height);max-height:var(--bottom-panel-scroll-height);z-index:1;min-height:0;padding-right:4px;position:relative;overflow:hidden auto}.anomaly-list-inner{flex-direction:column;gap:10px;display:flex}.anomaly-card-title-row{flex-wrap:wrap;width:100%}.anomaly-title-text{flex:1}.anomaly-header-count{min-width:28px;height:28px;font-family:var(--font-display);color:var(--bg-base);background:var(--neon-amber);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 10px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:0 0 12px #ffaa0059}.anomaly-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-raised);transition:border-color var(--transition), box-shadow var(--transition);overflow:hidden}.anomaly-card.CRITICAL{border-left:4px solid #f44}.anomaly-card.HIGH{border-left:4px solid var(--neon-red)}.anomaly-card.MEDIUM{border-left:4px solid var(--neon-amber)}.anomaly-card.LOW{border-left:4px solid var(--neon-cyan)}.anomaly-card-summary{cursor:pointer;font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:14px 16px;list-style:none;display:flex}.anomaly-card-summary::-webkit-details-marker{display:none}.anomaly-severity-badge{font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:9px;font-weight:700}.anomaly-severity-badge.sev-critical{color:#f66;background:#f443;border:1px solid #ff444459}.anomaly-severity-badge.sev-high{background:var(--neon-red-dim);color:var(--neon-red);border:1px solid #ff335559}.anomaly-severity-badge.sev-medium{background:var(--neon-amber-dim);color:var(--neon-amber);border:1px solid #ffaa0059}.anomaly-severity-badge.sev-low{background:var(--neon-cyan-dim);color:var(--neon-cyan);border:1px solid #00f0ff40}.anomaly-card-title{min-width:0;color:var(--text-primary);flex:1;font-size:15px;font-weight:600;line-height:1.45}.anomaly-card-chevron{color:var(--text-muted);transition:transform var(--transition);flex-shrink:0;font-size:10px}.anomaly-card[open] .anomaly-card-chevron{transform:rotate(-180deg)}.anomaly-card-body{border-top:1px solid var(--border-muted);background:#0003;padding:0 16px 16px}.anomaly-card-meta{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:12px;font-size:13px;line-height:1.5;display:flex}.anomaly-card-meta:first-child{margin-top:12px}.anomaly-meta-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);min-width:72px;font-size:10px}.anomaly-meta-value{font-family:var(--font-mono);color:var(--text-secondary);overflow-wrap:anywhere}.no-anomalies{color:var(--neon-green);align-items:center;gap:8px;padding:20px 0;font-size:13px;display:flex}.bottom-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.bottom-grid>.card{flex-direction:column;align-items:stretch;min-width:0;min-height:0;display:flex}.bottom-grid>.card>.card-title,.bottom-grid>.card>.live-header,.bottom-grid .anomaly-scroll-region,.bottom-grid .event-stream{flex-shrink:0}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-elevated) 50%, var(--bg-raised) 75%);border-radius:var(--radius);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast-container{z-index:999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-primary);box-shadow:var(--shadow);border-left:3px solid var(--neon-amber);padding:10px 16px;font-size:13px;animation:.2s slideIn}.toast.error{border-left-color:var(--neon-red)}.toast.success{border-left-color:var(--neon-green)}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.demo-banner{font-size:13px;font-family:var(--font-mono);color:var(--neon-amber);background:var(--neon-amber-dim);border-radius:var(--radius);border:1px solid #ffaa0059;margin:0 0 16px;padding:10px 16px}.demo-banner code{color:var(--neon-cyan)}@media (width<=900px){.state-grid,.bottom-grid{grid-template-columns:1fr}.header-center .header-demo-pill{display:none}.workspace-dock-panel{width:min(240px,88vw)}.gauge-row,.control-panel-grid{grid-template-columns:1fr}.timeline-info{text-align:center;grid-template-columns:1fr}.timeline-info-edge{display:none}}.state-tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;padding-bottom:0;display:flex}.state-tab{color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:color var(--transition), border-color var(--transition);border-radius:var(--radius) var(--radius) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.state-tab:hover{color:var(--text-secondary)}.state-tab.active{color:var(--neon-cyan);border-bottom-color:var(--neon-cyan);background:var(--neon-cyan-dim);text-shadow:0 0 8px #00f0ff33}.state-tab-emoji{font-size:14px}.state-tab-content{min-height:80px}.summary-tab{padding-top:4px}.summary-changes{flex-direction:column;gap:8px;display:flex}.summary-changes-header{color:var(--text-muted);border-bottom:1px solid var(--border-muted);margin-bottom:4px;padding-bottom:6px;font-size:12px;font-weight:600}.summary-change-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-amber);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.summary-change-row:hover{background:var(--bg-elevated)}.summary-change-field{color:var(--text-primary);min-width:5rem;font-weight:700;font-family:var(--font-sans)}.summary-change-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.summary-change-arrow{color:var(--text-muted);flex-shrink:0}.summary-change-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.summary-no-changes{color:var(--neon-green);align-items:center;gap:12px;padding:20px 0;font-size:14px;display:flex}.event-summary-bar{background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);border:1px solid var(--border);border-left:3px solid var(--neon-cyan);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:10px 20px;display:flex;box-shadow:0 0 16px #00f0ff0d}.event-summary-left{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.event-summary-type{font-family:var(--font-sans);color:var(--text-primary);font-size:14px;font-weight:600}.event-summary-meta{font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.event-summary-changes{color:var(--neon-amber);font-size:12px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;flex-shrink:0;padding:3px 10px;font-weight:600}.diff-count-badge{color:var(--neon-amber);font-size:11px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;align-items:center;margin-left:6px;padding:2px 8px;font-weight:500;display:inline-flex}.diff-summary-view{flex-direction:column;gap:6px;display:flex}.diff-summary-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-cyan);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.diff-summary-row:hover{background:var(--bg-elevated)}.diff-summary-field{color:var(--text-primary);min-width:6rem;font-weight:700;font-family:var(--font-sans)}.diff-summary-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.diff-summary-arrow{color:var(--text-muted);flex-shrink:0}.diff-summary-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.diff-jump-next{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;margin-left:auto;padding:2px 8px;font-size:10px}.diff-jump-next:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.json-tree-changed{border-radius:3px;background:#ffaa001a!important}.timeline-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.timeline-jump-group{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:0;display:flex;overflow:hidden}.timeline-jump-input{background:var(--bg-raised);border:none;border-right:1px solid var(--border);width:100px;color:var(--text-primary);font-family:var(--font-mono);outline:none;padding:5px 8px;font-size:12px}.timeline-jump-input:focus{border-right-color:var(--neon-cyan);background:var(--bg-elevated)}.timeline-jump-input::placeholder{color:var(--text-muted)}.timeline-jump-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input[type=number]{-moz-appearance:textfield}.timeline-jump-btn{background:var(--bg-elevated);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:5px 10px;font-size:14px}.timeline-jump-btn:hover{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.timeline-filter-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.filter-chip{border:1px solid var(--border);background:var(--bg-raised);color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:160px;padding:3px 10px;font-size:11px;overflow:hidden}.filter-chip:hover{border-color:var(--neon-cyan-mid);color:var(--text-secondary)}.filter-chip.active{background:var(--neon-cyan-dim);color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff33;border-color:#00f0ff66}.timeline-anomaly-marker{color:var(--neon-amber);text-shadow:0 0 4px #fa09;align-self:flex-start;font-size:7px;line-height:1}.keyboard-hints{z-index:200;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);background:#080b14eb;position:fixed;bottom:0;left:0;right:0}.keyboard-hints-bar{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:6px 24px;font-size:11px;display:flex}.keyboard-hints-item{align-items:center;gap:5px;display:flex}.keyboard-hints-sep{color:var(--border);font-size:14px;line-height:1}.keyboard-hints-grid{flex-wrap:wrap;justify-content:center;gap:10px 24px;padding:14px 24px;display:flex}.keyboard-hint-row{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:10px;font-size:12px;display:flex}.keyboard-hint-desc{color:var(--text-muted)}.keyboard-key{border:1px solid var(--border);border-bottom:2px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:4px;align-items:center;padding:2px 8px;font-size:11px;display:inline-flex}.keyboard-key-mini{border:1px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:3px;align-items:center;padding:1px 5px;font-size:10px;display:inline-flex}.keyboard-hints-close{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;padding:4px 12px;font-size:11px}.keyboard-hints-close:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.app-main{padding-bottom:40px}.command-palette-backdrop{z-index:1000;background:#050508b3;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.command-palette{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(640px,100vw - 32px);box-shadow:var(--shadow);overflow:hidden}.command-palette-input{border:0;border-bottom:1px solid var(--border);width:100%;color:var(--text-primary);font:inherit;background:0 0;padding:16px}.command-palette-list{max-height:320px;list-style:none;overflow:auto}.command-palette-item{cursor:pointer;color:var(--text-primary);padding:12px 16px}.command-palette-item.active,.command-palette-item:hover{background:var(--neon-cyan-dim)}.command-palette-item.muted{color:var(--text-muted)}.statistics-toolbar,.stats-kpis,.stats-distribution{flex-wrap:wrap;gap:12px;display:flex}.stats-kpis{margin:12px 0 16px}.stat-card{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;flex-direction:column;gap:6px;min-width:140px;padding:14px;display:flex}.stat-card strong{font-size:24px}.stats-chart{gap:8px;margin-bottom:16px;display:grid}.stats-bar-row,.stats-list-row,.replay-toolbar{align-items:center;gap:10px;display:flex}.stats-bar-track{background:#ffffff0f;border-radius:999px;flex:1;height:10px;overflow:hidden}.stats-bar-fill{background:linear-gradient(90deg, var(--neon-cyan), var(--accent-blue));height:100%}.stats-distribution>div,.replay-state{flex:1;min-width:260px}.replay-toolbar{justify-content:space-between;margin-bottom:12px}.timeline-virtual-container{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;margin-top:12px}.timeline-step{border:1px solid var(--border);border-radius:var(--radius);width:calc(100% - 8px);color:var(--text-primary);text-align:left;background:#0e1220f2;grid-template-columns:110px 90px 1fr 90px;align-items:center;margin:3px 4px;padding:0 12px;display:grid}.timeline-step-compare{box-shadow:inset 0 0 0 1px var(--neon-magenta)}.diff-split-row--added .diff-split-new,.diff-split-row--changed .diff-split-new{background:#00ff880f}.diff-split-row--removed .diff-split-old,.diff-split-row--changed .diff-split-old{background:#ff33550f} +:root{--bg-base:#050508;--bg-surface:#0a0c14;--bg-raised:#0f1220;--bg-elevated:#161b2e;--bg-panel:linear-gradient(145deg, #0c0f1a 0%, #0a0d18 50%, #080b14 100%);--border:#1a2040;--border-muted:#121830;--border-glow:#00f0ff26;--text-primary:#e8eef8;--text-secondary:#94a3c0;--text-muted:#5a6a8a;--neon-cyan:#00f0ff;--neon-cyan-dim:#00f0ff14;--neon-cyan-mid:#00f0ff40;--neon-magenta:#ff00e5;--neon-magenta-dim:#ff00e514;--neon-green:#0f8;--neon-green-dim:#00ff881a;--neon-amber:#fa0;--neon-amber-dim:#ffaa001a;--neon-red:#f35;--neon-red-dim:#ff33551a;--neon-purple:#a855f7;--accent-blue:#4f9cf9;--accent-blue-dim:#4f9cf926;--accent-green:var(--neon-green);--accent-red:var(--neon-red);--accent-yellow:var(--neon-amber);--accent-purple:var(--neon-purple);--font-sans:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-display:"Orbitron", var(--font-sans);--radius:6px;--radius-lg:10px;--shadow:0 4px 24px #0009;--shadow-neon:0 0 20px #00f0ff14, 0 0 60px #00f0ff08;--transition:.2s ease;--bottom-panel-scroll-height:280px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00f0ff04 2px 4px);position:fixed;inset:0}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{--header-pad-x:24px;--header-pad-right:48px;--header-control-h:34px;padding:0 var(--header-pad-right) 0 var(--header-pad-x);border-bottom:1px solid var(--border);z-index:100;background:linear-gradient(#0d1020 0%,#080b14 100%);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(12px,2vw,20px);height:64px;display:grid;position:sticky;top:0;box-shadow:0 2px 20px #00000080,inset 0 -1px #00f0ff0f}.brand{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:relative}.brand-logo svg{width:36px;height:36px;filter:drop-shadow(0 0 6px var(--neon-cyan)) drop-shadow(0 0 12px #00f0ff4d)}.brand-name{font-family:var(--font-display);letter-spacing:1.5px;color:var(--text-primary);text-transform:uppercase;font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);letter-spacing:.5px;font-size:10px}.header-title{font-family:var(--font-display);letter-spacing:3px;text-transform:uppercase;background:linear-gradient(135deg, var(--neon-cyan), #4facfe, var(--neon-magenta));-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 8px #00f0ff66);text-align:center;-webkit-background-clip:text;background-clip:text;flex-shrink:0;margin:0;font-size:20px;font-weight:800;line-height:1}.header-center{flex-flow:row;justify-content:center;justify-self:center;align-items:center;gap:clamp(10px,1.5vw,16px);min-width:0;display:flex}.header-demo-pill{box-sizing:border-box;height:var(--header-control-h);background:var(--neon-amber-dim);color:var(--neon-amber);font-family:var(--font-mono);white-space:nowrap;border:1px solid #ffaa0059;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0 12px;font-size:11px;line-height:1;display:inline-flex}.header-actions{flex-direction:row;justify-content:flex-end;justify-self:end;align-items:center;gap:clamp(10px,1.2vw,16px);min-width:0;display:flex}.header-actions .conn-stats,.header-actions .header-status{flex-shrink:0}.workspace-datasource{flex-direction:column;gap:6px;min-width:0;margin:0;display:flex}.workspace-datasource-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;line-height:1}.workspace-datasource-select{box-sizing:border-box;appearance:none;width:100%;height:34px;color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);background-color:#0c1020f2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3c0' d='M3 4.5 6 8l3-3.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;border:1px solid #ffffff24;border-radius:8px;padding:0 32px 0 12px;font-size:12px;line-height:1;box-shadow:inset 0 1px #00f0ff0f}.workspace-datasource-select:hover{border-color:#00f0ff40}.workspace-datasource-select:focus{border-color:var(--neon-cyan-mid);outline:none;box-shadow:0 0 0 1px #00f0ff33}.header-status{font-size:12px;font-family:var(--font-sans);letter-spacing:.3px;align-items:center;gap:8px;display:flex}.header-status .status-text{color:var(--neon-green);text-shadow:0 0 8px #00ff8880}.header-status .status-text.offline{color:var(--neon-red);text-shadow:0 0 8px #ff335580}.dot{border-radius:50%;width:8px;height:8px}.dot-green{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green), 0 0 12px #0f86;animation:2s infinite pulse-neon}.dot-red{background:var(--neon-red);box-shadow:0 0 6px var(--neon-red)}.dot-yellow{background:var(--neon-amber);box-shadow:0 0 6px var(--neon-amber);animation:1.5s infinite pulse-neon}@keyframes pulse-neon{0%,to{opacity:1}50%{opacity:.4}}.app-main{flex-direction:column;flex:1;gap:16px;width:100%;max-width:1440px;margin:0 auto;padding:20px;display:flex}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow), var(--shadow-neon);padding:20px;position:relative;overflow:hidden}.card.card--dropdown-host{z-index:30;overflow:visible}.card:before{content:"";background:linear-gradient(90deg, transparent, var(--neon-cyan-mid), transparent);height:1px;position:absolute;top:0;left:0;right:0}.card:after{content:"";background:linear-gradient(90deg,#0000,#ff00e51a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.card-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;text-shadow:0 0 6px #00f0ff33;align-items:center;gap:8px;margin-bottom:16px;font-size:13px;font-weight:600;display:flex}.control-ribbon{padding:14px 18px}.control-ribbon-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.control-ribbon-title{margin-bottom:4px}.control-ribbon-subtitle{color:var(--text-muted);font-size:12px}.control-ribbon-nav{align-items:center;gap:12px;font-size:13px;display:inline-flex}.control-ribbon-nav a{text-decoration:none}.control-ribbon-nav a[aria-current=page]{text-underline-offset:2px;text-decoration:underline}.control-panel{gap:12px;padding:16px 18px;display:grid}.control-panel-grid{grid-template-columns:minmax(220px,360px) minmax(0,1fr);align-items:end;gap:12px;display:grid}.control-field,.control-field--search{min-width:0}.control-field-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;display:block}.control-select{width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);background:#0d1123eb;border:1px solid #ffffff24;border-radius:10px;outline:none;padding:10px 12px;font-size:12px}.control-select:focus{border-color:var(--neon-cyan-mid);box-shadow:0 0 14px #00f0ff26}.datasource-pills{flex-wrap:wrap;gap:8px;display:flex}.datasource-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:4px 8px}.selection-summary{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);margin-top:2px}.selection-clear-btn{color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border:none;margin-left:12px}.selection-clear-btn:hover{color:var(--neon-cyan)}.workspace-dock{z-index:110;border:1px solid var(--border-muted);pointer-events:auto;border-right:none;border-radius:10px 0 0 10px;flex-direction:row;align-items:center;width:auto;height:auto;max-height:min(72vh,100vh - 112px);transition:box-shadow .2s;display:flex;position:fixed;inset:50% 0 auto auto;overflow:hidden;transform:translateY(-50%);box-shadow:-6px 4px 22px #0000006b}.workspace-dock--open{box-shadow:-8px 6px 28px #0000007a,0 0 0 1px #00f0ff14}.workspace-dock-handle{border:none;border-left:1px solid var(--border-muted);width:36px;height:36px;color:var(--neon-cyan);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition), color var(--transition);background:linear-gradient(#0f1324 0%,#0a0e18 100%);flex-direction:row;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.workspace-dock-handle:hover{color:var(--text-primary);background:linear-gradient(#141a30 0%,#0d1220 100%)}.workspace-dock-handle:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:-2px}.workspace-dock-chevron{font-size:15px;font-weight:700;line-height:1}.workspace-dock-panel{border-left:1px solid var(--border);background:linear-gradient(145deg,#0c101c 0%,#080c14 100%);flex-direction:column;flex:0 auto;gap:8px;width:min(252px,100vw - 48px);min-width:0;max-height:min(72vh,100vh - 112px);padding:10px 12px 12px 14px;display:flex;overflow:hidden auto}.workspace-dock-panel[hidden]{display:none!important}.workspace-dock-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:12px;font-weight:600}.workspace-dock-scrim{z-index:109;cursor:pointer;background:#03050c73;border:none;margin:0;padding:0;position:fixed;inset:64px 0 36px}.workspace-sidebar-kpis{border:1px solid var(--border-muted);border-radius:var(--radius);background:#080b148c;gap:6px;padding:8px 10px;display:grid}.workspace-kpi-row{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);justify-content:space-between;gap:8px;display:flex}.workspace-kpi-row strong{color:var(--text-primary)}.workspace-sidebar-links{color:var(--text-secondary);gap:6px;font-size:12px;display:grid}.workspace-content{gap:16px;display:grid}.search-panel{width:100%;min-width:0}.selection-clear-btn:focus-visible,.control-ribbon-nav a:focus-visible,.control-select:focus-visible,.workspace-datasource-select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.plugin-dashboard{gap:14px;display:grid}.plugin-cards-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.plugin-cards-grid--dense{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plugin-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(140deg,#101527f2,#0a0e1cf2);padding:12px 14px;box-shadow:inset 0 1px #ffffff05}.plugin-card--interactive{transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition)}.plugin-card--interactive:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 16px #00f0ff1a}.plugin-card--interactive:focus-within{border-color:var(--neon-cyan-mid);box-shadow:0 0 0 2px #00f0ff26}.plugin-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.plugin-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:2px 8px}.plugin-card-meta{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);overflow-wrap:anywhere;margin-top:8px}.plugin-card-detail{color:var(--text-secondary);margin-top:8px;font-size:12px;line-height:1.55}.search-wrapper{position:relative}.search-input{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);outline:none;padding:14px 16px 14px 44px;font-size:13px}.search-input:focus{border-color:var(--neon-cyan);box-shadow:0 0 14px #00f0ff2e}.search-input::placeholder{color:var(--text-muted)}.search-icon{color:var(--neon-cyan);pointer-events:none;filter:drop-shadow(0 0 4px #00f0ff80);font-size:16px;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.search-results{background:var(--bg-raised);border:1px solid var(--neon-cyan-mid);border-radius:var(--radius);z-index:500;max-height:min(55vh,420px);position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden auto;box-shadow:0 12px 40px #000000a6,0 0 24px #00f0ff14}.search-result-item{cursor:pointer;transition:background var(--transition);font-family:var(--font-mono);color:var(--text-primary);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:13px;display:flex}.search-result-item:hover{background:var(--bg-elevated);box-shadow:inset 3px 0 0 var(--neon-cyan)}.search-result-item+.search-result-item{border-top:1px solid var(--border-muted)}.search-result-chevron{color:var(--text-muted);flex-shrink:0;padding-right:4px}.search-result-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:0 6px;min-width:0;display:flex}.search-result-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;font-size:10px}.search-result-colon{color:var(--text-muted);flex-shrink:0;margin-right:2px}.search-result-value{overflow-wrap:anywhere;word-break:break-word;flex:1;min-width:0}.conn-stats{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:16px;font-size:11px;display:flex}.conn-stat{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.conn-stat-label{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);font-size:9px}.conn-stat-value{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66;font-size:12px}.conn-stat-value.green{color:var(--neon-green);text-shadow:0 0 6px #0f86}.conn-stat-value.amber{color:var(--neon-amber);text-shadow:0 0 6px #fa06}.conn-stat--metric .conn-stat-value,.conn-stat-value--uptime{text-align:right;font-variant-numeric:tabular-nums;min-width:6.5ch;display:inline-block}.mini-wave{align-items:flex-end;gap:1px;height:24px;display:flex}.mini-wave-bar{background:var(--neon-cyan);border-radius:1px;width:3px;animation:1.2s ease-in-out infinite wave-pulse;box-shadow:0 0 4px #00f0ff4d}@keyframes wave-pulse{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}.timeline-count-pill{color:var(--accent-blue);font-family:var(--font-mono);background:var(--accent-blue-dim);border:1px solid #4f9cf940;border-radius:999px;padding:2px 10px;font-size:11px}.timeline-hint{color:var(--text-muted);max-width:52rem;margin:-8px 0 12px;font-size:12px;line-height:1.5}.timeline-rail{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-base);position:relative;box-shadow:inset 0 1px #00f0ff0a}.timeline-stepper{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);padding:12px 14px 14px;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.timeline-stepper-track{flex-wrap:nowrap;align-items:center;gap:4px;width:max-content;min-height:88px;display:flex}.timeline-step-arrow{color:var(--text-muted);opacity:.7;flex-shrink:0;align-self:center;padding:0 2px;font-size:11px}.timeline-step-arrow-compact{padding:0 1px;font-size:9px}.timeline-step{border-radius:var(--radius);border:1px solid var(--border-muted);background:var(--bg-raised);cursor:pointer;text-align:left;min-width:118px;max-width:200px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-step-compact{gap:2px;min-width:96px;max-width:140px;padding:8px 10px}.timeline-step-compact .timeline-step-badge{font-size:8px}.timeline-step-compact .timeline-step-type{-webkit-line-clamp:1;font-size:10px}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-step.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-step-badge{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:10px;font-weight:600}.timeline-step-seq{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.timeline-step-type{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.timeline-step-created{border-left:3px solid var(--neon-green)}.timeline-step-deleted{border-left:3px solid var(--neon-red)}.timeline-step-completed{border-left:3px solid var(--neon-green)}.timeline-step-failed{border-left:3px solid var(--neon-red)}.timeline-step-transfer{border-left:3px solid var(--neon-amber)}.timeline-step-item{border-left:3px solid var(--neon-purple)}.timeline-step-progress{border-left:3px solid #38bdf8}.timeline-step-default{border-left:3px solid var(--neon-cyan)}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);cursor:pointer;text-align:left;min-width:140px;max-width:240px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-group-chip.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-group-chip.expanded{border-color:#00f0ff59}.timeline-group-chip-top{justify-content:space-between;align-items:center;gap:8px;width:100%;display:flex}.timeline-group-count{font-family:var(--font-display);letter-spacing:.5px;color:var(--neon-cyan);font-size:16px;font-weight:800;line-height:1}.timeline-group-chevron{color:var(--text-muted);font-size:10px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.timeline-group-range{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);line-height:1.4}.timeline-expanded-deck{border-top:1px solid var(--border-muted);background:#00000040;padding:10px 14px 14px}.timeline-expanded-head{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.timeline-expanded-title{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:12px;font-weight:700}.timeline-expanded-meta{font-family:var(--font-mono);color:var(--text-muted);flex:1;font-size:11px}.timeline-expanded-close{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-raised);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition);margin-left:auto;padding:4px 12px;font-size:11px}.timeline-expanded-close:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan)}.timeline-expanded-strip{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex-wrap:nowrap;align-items:center;gap:4px;width:100%;padding-bottom:6px;display:flex;overflow-x:auto}.timeline-slider{width:100%;accent-color:var(--neon-cyan);cursor:pointer;margin-top:4px}.timeline-info{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);grid-template-columns:minmax(0,1fr) minmax(0,2.2fr) minmax(0,1fr);align-items:start;gap:12px;margin-top:12px;display:grid}.timeline-info-edge{color:var(--text-muted);font-size:11px}.timeline-info-center{text-align:center;color:var(--text-secondary);line-height:1.55}.timeline-info-center strong{color:var(--neon-cyan);font-weight:600}.timeline-info-muted{color:var(--text-muted);font-weight:400}.timeline-info-type{color:var(--text-primary);font-size:11px}.state-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.state-panel h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px;font-size:10px;font-weight:600}.state-panel-before h4{color:var(--text-muted)}.state-panel-after h4{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.json-block{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);font-family:var(--font-mono);max-height:260px;color:var(--text-secondary);white-space:pre;padding:12px;font-size:12px;line-height:1.7;overflow:auto}.json-tree-root{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);max-height:320px;font-family:var(--font-mono);color:var(--text-secondary);padding:10px 12px;font-size:13px;line-height:1.75;overflow:auto}.json-tree-line{flex-wrap:wrap;align-items:baseline;gap:2px 0;min-height:1.5em;display:flex}.json-tree-toggle{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-right:4px;padding:0;font-size:10px;line-height:1}.json-tree-toggle:hover{color:var(--neon-cyan);background:var(--neon-cyan-dim)}.json-key{color:#7dd3fc}.json-string{color:#86efac}.json-number{color:#fcd34d}.json-boolean{color:#c4b5fd}.json-null{color:var(--text-muted);font-style:italic}.json-punct{color:var(--text-muted)}.json-ellipsis{color:var(--text-muted);font-size:11px;font-style:italic}.json-unknown{color:var(--neon-amber)}.diff-panel{border-top:1px solid var(--border-muted);margin-top:20px;padding-top:16px}.diff-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.diff-toolbar-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:13px;font-weight:600}.diff-view-toggle{border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);font-size:11px;display:flex;overflow:hidden}.diff-view-toggle button{background:var(--bg-raised);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:6px 14px}.diff-view-toggle button+button{border-left:1px solid var(--border)}.diff-view-toggle button:hover{color:var(--text-secondary)}.diff-view-toggle button.active{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.diff-body{align-items:stretch;gap:10px;display:flex}.diff-minimap{border:1px solid var(--border-muted);background:var(--bg-base);border-radius:4px;flex-direction:column;flex-shrink:0;width:10px;max-height:280px;display:flex;overflow:hidden}.diff-minimap-chunk{background:var(--border);cursor:pointer;min-height:8px;transition:background var(--transition);border:none;flex:1;margin:0;padding:0}.diff-minimap-chunk:hover,.diff-minimap-chunk:focus-visible{background:var(--neon-cyan-mid);outline:none}.diff-scroll{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex:1;min-width:0;max-height:280px;overflow:auto}.diff-list{flex-direction:column;gap:0;display:flex}.diff-row{font-family:var(--font-mono);background:var(--bg-raised);border-left:3px solid var(--neon-cyan);border-bottom:1px solid var(--border-muted);border-radius:0;align-items:stretch;gap:0;padding:0;font-size:12px;line-height:1.65;display:flex}.diff-row:last-child{border-radius:0 0 var(--radius) var(--radius);border-bottom:none}.diff-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.diff-line-no{text-align:right;width:36px;color:var(--text-muted);background:var(--bg-base);border-right:1px solid var(--border-muted);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:10px 6px;font-size:10px}.diff-row-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:8px 12px;padding:10px 12px;display:flex}.diff-field{color:var(--text-primary);min-width:6rem;font-weight:700}.diff-values-inline{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.diff-old{color:var(--neon-red);font-weight:400;text-decoration:line-through}.diff-arrow{color:var(--text-muted);flex-shrink:0}.diff-new{color:var(--neon-green);text-shadow:0 0 4px #00ff8840;font-weight:400}.diff-split-head{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg-raised);z-index:1;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px 8px 48px;font-size:11px;display:grid;position:sticky;top:0}.diff-split-old-label{color:var(--neon-red)}.diff-split-new-label{color:var(--neon-green)}.diff-split-row{border-bottom:1px solid var(--border-muted);align-items:stretch;gap:0;display:flex}.diff-split-row:last-child{border-bottom:none}.diff-split-cells{flex:1;grid-template-columns:1fr 1fr;gap:8px;min-width:0;padding:8px 12px 8px 0;display:grid}.diff-split-cell{border-radius:var(--radius);background:var(--bg-base);border:1px solid var(--border-muted);min-width:0;padding:8px 10px}.diff-split-cell .diff-field{margin-bottom:6px;font-size:11px;display:block}.diff-cell-value{overflow-wrap:anywhere;word-break:break-word;font-size:12px;font-weight:400;line-height:1.6}.diff-split-old .diff-cell-value{color:var(--neon-red);opacity:.9}.diff-split-new .diff-cell-value{color:var(--neon-green)}.event-meta{color:var(--text-muted);grid-template-columns:repeat(2,1fr);gap:10px 16px;margin-top:20px;font-size:12px;display:grid}.event-meta-bar{background:var(--bg-raised);border:1px solid var(--border-muted);border-radius:var(--radius);padding:14px 16px;box-shadow:inset 0 1px #00f0ff0a}.event-meta-time{font-family:var(--font-mono);color:var(--text-secondary);font-size:12px;font-weight:500}.event-meta-id{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;grid-column:1/-1;font-size:11px;line-height:1.5}.event-meta-extra{font-family:var(--font-mono);color:var(--text-secondary);font-size:11px}@media (width<=900px){.diff-split-cells{grid-template-columns:1fr}.diff-split-head{display:none}}.copy-btn{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);font-size:12px;font-family:var(--font-mono);margin-top:12px;padding:6px 14px}.copy-btn:hover{background:var(--bg-raised);color:var(--neon-cyan);border-color:var(--neon-cyan);box-shadow:0 0 10px #00f0ff1a}.live-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.live-indicator{font-family:var(--font-sans);letter-spacing:.2px;align-items:center;gap:6px;font-size:11px;display:flex}.pause-btn{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);border-radius:4px;padding:5px 12px;font-size:11px}.pause-btn:hover{background:var(--bg-raised);border-color:var(--neon-cyan);color:var(--neon-cyan);box-shadow:0 0 8px #00f0ff1a}.event-stream{height:var(--bottom-panel-scroll-height);min-height:0;font-family:var(--font-mono);flex-direction:column;gap:3px;padding-right:4px;font-size:12px;display:flex;overflow-y:auto}.event-stream,.anomaly-scroll-region,.search-results{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base)}.event-stream::-webkit-scrollbar{width:6px}.anomaly-scroll-region::-webkit-scrollbar{width:6px}.search-results::-webkit-scrollbar{width:6px}.event-stream::-webkit-scrollbar-track{background:var(--bg-base)}.anomaly-scroll-region::-webkit-scrollbar-track{background:var(--bg-base)}.search-results::-webkit-scrollbar-track{background:var(--bg-base)}.event-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.anomaly-scroll-region::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.search-results::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.event-stream::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.anomaly-scroll-region::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.search-results::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.event-row{transition:all var(--transition);cursor:default;background:#ffffff03;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:12px;padding:6px 10px;display:flex}.event-row:hover{background:var(--bg-elevated)}.event-row.type-withdrawn{border-left-color:var(--neon-magenta)}.event-row.type-deposited{border-left-color:var(--neon-cyan)}.event-row.type-created{border-left-color:var(--neon-green)}.event-row.type-transfer{border-left-color:var(--neon-amber)}.event-row.type-deleted{border-left-color:var(--neon-red)}.event-row.type-completed{border-left-color:var(--neon-green)}.event-row.type-failed{border-left-color:var(--neon-red)}.event-row.type-default{border-left-color:var(--neon-purple)}.event-time{color:var(--text-muted);flex-shrink:0;width:75px;font-size:11px}.event-type{flex-shrink:0;width:180px;font-weight:500}.event-agg{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.event-icon{text-align:center;flex-shrink:0;width:20px;font-size:14px}.type-created{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-deleted{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-completed{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-failed{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-transfer{color:var(--neon-amber);text-shadow:0 0 6px #ffaa004d}.type-default{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.type-withdrawn{color:var(--neon-magenta);text-shadow:0 0 6px #ff00e54d}.type-deposited{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.anomaly-panel-inner{position:relative}.anomaly-shield{background:radial-gradient(#00ff880f 0%,#0000 70%);border:1px solid #00ff8826;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;padding:30px 20px;display:flex}.shield-icon{justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:12px;display:flex;position:relative}.shield-icon svg{filter:drop-shadow(0 0 12px #00ff8880)drop-shadow(0 0 24px #0f83);width:64px;height:64px}.shield-icon:after{content:"";border:1px solid #00ff8826;border-radius:50%;animation:3s ease-in-out infinite shield-pulse;position:absolute;inset:-8px}@keyframes shield-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.8;transform:scale(1.15)}}.shield-text{font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;color:var(--neon-green);text-shadow:0 0 8px #0f86;font-size:13px;font-weight:600}.gauge-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.gauge-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:12px;position:relative;overflow:hidden}.gauge-card:before{content:"";height:2px;position:absolute;bottom:0;left:0;right:0}.gauge-card.optimal:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-card.baseline:before{background:var(--neon-cyan);box-shadow:0 0 8px #00f0ff66}.gauge-card.zero:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);margin-bottom:6px;font-size:10px;font-weight:500}.gauge-value{font-family:var(--font-display);letter-spacing:1px;font-size:13px;font-weight:700}.gauge-value.optimal{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-value.baseline{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66}.gauge-value.zero{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-wave{justify-content:center;align-items:flex-end;gap:2px;height:20px;margin-top:6px;display:flex}.gauge-wave-bar{border-radius:1px;width:2px;animation:1.5s ease-in-out infinite gauge-wave-anim}.gauge-wave-bar.green{background:var(--neon-green);box-shadow:0 0 3px #0f86}.gauge-wave-bar.cyan{background:var(--neon-cyan);box-shadow:0 0 3px #00f0ff66}@keyframes gauge-wave-anim{0%,to{height:4px}50%{height:16px}}.anomaly-scroll-region{box-sizing:border-box;height:var(--bottom-panel-scroll-height);max-height:var(--bottom-panel-scroll-height);z-index:1;min-height:0;padding-right:4px;position:relative;overflow:hidden auto}.anomaly-list-inner{flex-direction:column;gap:10px;display:flex}.anomaly-card-title-row{flex-wrap:wrap;width:100%}.anomaly-title-text{flex:1}.anomaly-header-count{min-width:28px;height:28px;font-family:var(--font-display);color:var(--bg-base);background:var(--neon-amber);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 10px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:0 0 12px #ffaa0059}.anomaly-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-raised);transition:border-color var(--transition), box-shadow var(--transition);overflow:hidden}.anomaly-card.CRITICAL{border-left:4px solid #f44}.anomaly-card.HIGH{border-left:4px solid var(--neon-red)}.anomaly-card.MEDIUM{border-left:4px solid var(--neon-amber)}.anomaly-card.LOW{border-left:4px solid var(--neon-cyan)}.anomaly-card-summary{cursor:pointer;font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:14px 16px;list-style:none;display:flex}.anomaly-card-summary::-webkit-details-marker{display:none}.anomaly-severity-badge{font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:9px;font-weight:700}.anomaly-severity-badge.sev-critical{color:#f66;background:#f443;border:1px solid #ff444459}.anomaly-severity-badge.sev-high{background:var(--neon-red-dim);color:var(--neon-red);border:1px solid #ff335559}.anomaly-severity-badge.sev-medium{background:var(--neon-amber-dim);color:var(--neon-amber);border:1px solid #ffaa0059}.anomaly-severity-badge.sev-low{background:var(--neon-cyan-dim);color:var(--neon-cyan);border:1px solid #00f0ff40}.anomaly-card-title{min-width:0;color:var(--text-primary);flex:1;font-size:15px;font-weight:600;line-height:1.45}.anomaly-card-chevron{color:var(--text-muted);transition:transform var(--transition);flex-shrink:0;font-size:10px}.anomaly-card[open] .anomaly-card-chevron{transform:rotate(-180deg)}.anomaly-card-body{border-top:1px solid var(--border-muted);background:#0003;padding:0 16px 16px}.anomaly-card-meta{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:12px;font-size:13px;line-height:1.5;display:flex}.anomaly-card-meta:first-child{margin-top:12px}.anomaly-meta-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);min-width:72px;font-size:10px}.anomaly-meta-value{font-family:var(--font-mono);color:var(--text-secondary);overflow-wrap:anywhere}.no-anomalies{color:var(--neon-green);align-items:center;gap:8px;padding:20px 0;font-size:13px;display:flex}.bottom-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.bottom-grid>.card{flex-direction:column;align-items:stretch;min-width:0;min-height:0;display:flex}.bottom-grid>.card>.card-title,.bottom-grid>.card>.live-header,.bottom-grid .anomaly-scroll-region,.bottom-grid .event-stream{flex-shrink:0}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-elevated) 50%, var(--bg-raised) 75%);border-radius:var(--radius);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast-container{z-index:999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-primary);box-shadow:var(--shadow);border-left:3px solid var(--neon-amber);padding:10px 16px;font-size:13px;animation:.2s slideIn}.toast.error{border-left-color:var(--neon-red)}.toast.success{border-left-color:var(--neon-green)}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.demo-banner{font-size:13px;font-family:var(--font-mono);color:var(--neon-amber);background:var(--neon-amber-dim);border-radius:var(--radius);border:1px solid #ffaa0059;margin:0 0 16px;padding:10px 16px}.demo-banner code{color:var(--neon-cyan)}@media (width<=900px){.state-grid,.bottom-grid{grid-template-columns:1fr}.header-center .header-demo-pill{display:none}.workspace-dock-panel{width:min(240px,88vw)}.gauge-row,.control-panel-grid{grid-template-columns:1fr}.timeline-info{text-align:center;grid-template-columns:1fr}.timeline-info-edge{display:none}}.state-tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;padding-bottom:0;display:flex}.state-tab{color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:color var(--transition), border-color var(--transition);border-radius:var(--radius) var(--radius) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.state-tab:hover{color:var(--text-secondary)}.state-tab.active{color:var(--neon-cyan);border-bottom-color:var(--neon-cyan);background:var(--neon-cyan-dim);text-shadow:0 0 8px #00f0ff33}.state-tab-emoji{font-size:14px}.state-tab-content{min-height:80px}.summary-tab{padding-top:4px}.summary-changes{flex-direction:column;gap:8px;display:flex}.summary-changes-header{color:var(--text-muted);border-bottom:1px solid var(--border-muted);margin-bottom:4px;padding-bottom:6px;font-size:12px;font-weight:600}.summary-change-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-amber);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.summary-change-row:hover{background:var(--bg-elevated)}.summary-change-field{color:var(--text-primary);min-width:5rem;font-weight:700;font-family:var(--font-sans)}.summary-change-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.summary-change-arrow{color:var(--text-muted);flex-shrink:0}.summary-change-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.summary-no-changes{color:var(--neon-green);align-items:center;gap:12px;padding:20px 0;font-size:14px;display:flex}.event-summary-bar{background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);border:1px solid var(--border);border-left:3px solid var(--neon-cyan);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:10px 20px;display:flex;box-shadow:0 0 16px #00f0ff0d}.event-summary-left{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.event-summary-type{font-family:var(--font-sans);color:var(--text-primary);font-size:14px;font-weight:600}.event-summary-meta{font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.event-summary-changes{color:var(--neon-amber);font-size:12px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;flex-shrink:0;padding:3px 10px;font-weight:600}.diff-count-badge{color:var(--neon-amber);font-size:11px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;align-items:center;margin-left:6px;padding:2px 8px;font-weight:500;display:inline-flex}.diff-summary-view{flex-direction:column;gap:6px;display:flex}.diff-summary-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-cyan);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.diff-summary-row:hover{background:var(--bg-elevated)}.diff-summary-field{color:var(--text-primary);min-width:6rem;font-weight:700;font-family:var(--font-sans)}.diff-summary-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.diff-summary-arrow{color:var(--text-muted);flex-shrink:0}.diff-summary-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.diff-jump-next{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;margin-left:auto;padding:2px 8px;font-size:10px}.diff-jump-next:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.json-tree-changed{border-radius:3px;background:#ffaa001a!important}.timeline-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.timeline-jump-group{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:0;display:flex;overflow:hidden}.timeline-jump-input{background:var(--bg-raised);border:none;border-right:1px solid var(--border);width:100px;color:var(--text-primary);font-family:var(--font-mono);outline:none;padding:5px 8px;font-size:12px}.timeline-jump-input:focus{border-right-color:var(--neon-cyan);background:var(--bg-elevated)}.timeline-jump-input::placeholder{color:var(--text-muted)}.timeline-jump-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input[type=number]{-moz-appearance:textfield}.timeline-jump-btn{background:var(--bg-elevated);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:5px 10px;font-size:14px}.timeline-jump-btn:hover{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.timeline-filter-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.filter-chip{border:1px solid var(--border);background:var(--bg-raised);color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:160px;padding:3px 10px;font-size:11px;overflow:hidden}.filter-chip:hover{border-color:var(--neon-cyan-mid);color:var(--text-secondary)}.filter-chip.active{background:var(--neon-cyan-dim);color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff33;border-color:#00f0ff66}.timeline-anomaly-marker{color:var(--neon-amber);text-shadow:0 0 4px #fa09;align-self:flex-start;font-size:7px;line-height:1}.keyboard-hints{z-index:200;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);background:#080b14eb;position:fixed;bottom:0;left:0;right:0}.keyboard-hints-bar{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:6px 24px;font-size:11px;display:flex}.keyboard-hints-item{align-items:center;gap:5px;display:flex}.keyboard-hints-sep{color:var(--border);font-size:14px;line-height:1}.keyboard-hints-grid{flex-wrap:wrap;justify-content:center;gap:10px 24px;padding:14px 24px;display:flex}.keyboard-hint-row{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:10px;font-size:12px;display:flex}.keyboard-hint-desc{color:var(--text-muted)}.keyboard-key{border:1px solid var(--border);border-bottom:2px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:4px;align-items:center;padding:2px 8px;font-size:11px;display:inline-flex}.keyboard-key-mini{border:1px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:3px;align-items:center;padding:1px 5px;font-size:10px;display:inline-flex}.keyboard-hints-close{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;padding:4px 12px;font-size:11px}.keyboard-hints-close:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.app-main{padding-bottom:40px}.command-palette-backdrop{z-index:1000;background:#050508b3;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.command-palette{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(640px,100vw - 32px);box-shadow:var(--shadow);overflow:hidden}.command-palette-input{border:0;border-bottom:1px solid var(--border);width:100%;color:var(--text-primary);font:inherit;background:0 0;padding:16px}.command-palette-list{max-height:320px;list-style:none;overflow:auto}.command-palette-item{cursor:pointer;color:var(--text-primary);padding:12px 16px}.command-palette-item.active,.command-palette-item:hover{background:var(--neon-cyan-dim)}.command-palette-item.muted{color:var(--text-muted)}.statistics-toolbar,.stats-kpis,.stats-distribution{flex-wrap:wrap;gap:12px;display:flex}.stats-kpis{margin:12px 0 16px}.stat-card{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;flex-direction:column;gap:6px;min-width:140px;padding:14px;display:flex}.stat-card strong{font-size:24px}.stats-chart{gap:8px;margin-bottom:16px;display:grid}.stats-bar-row,.stats-list-row,.replay-toolbar{align-items:center;gap:10px;display:flex}.stats-bar-track{background:#ffffff0f;border-radius:999px;flex:1;height:10px;overflow:hidden}.stats-bar-fill{background:linear-gradient(90deg, var(--neon-cyan), var(--accent-blue));height:100%}.stats-distribution>div,.replay-state{flex:1;min-width:260px}.replay-toolbar{justify-content:space-between;margin-bottom:12px}.timeline-virtual-container{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;margin-top:12px}.timeline-step{border:1px solid var(--border);border-radius:var(--radius);width:calc(100% - 8px);color:var(--text-primary);text-align:left;background:#0e1220f2;grid-template-columns:110px 90px 1fr 90px;align-items:center;margin:3px 4px;padding:0 12px;display:grid}.timeline-step-compare{box-shadow:inset 0 0 0 1px var(--neon-magenta)}.diff-split-row--added .diff-split-new,.diff-split-row--changed .diff-split-new{background:#00ff880f}.diff-split-row--removed .diff-split-old,.diff-split-row--changed .diff-split-old{background:#ff33550f}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden} diff --git a/eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js b/eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js new file mode 100644 index 0000000..ab9b467 --- /dev/null +++ b/eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js @@ -0,0 +1,14 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():S=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function O(e,t){fe++,de[fe]=e.current,e.current=t}var he=pe(null),ge=pe(null),_e=pe(null),ve=pe(null);function ye(e,t){switch(O(_e,t),O(ge,e),O(he,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}me(he),O(he,e)}function be(){me(he),me(ge),me(_e)}function xe(e){e.memoizedState!==null&&O(ve,e);var t=he.current,n=Hd(t,e.type);t!==n&&(O(ge,e),O(he,n))}function Se(e){ge.current===e&&(me(he),me(ge)),ve.current===e&&(me(ve),Qf._currentValue=ue)}var Ce,k;function we(e){if(Ce===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Ce=t&&t[1]||``,k=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Te=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?we(n):``}function De(e,t){switch(e.tag){case 26:case 27:case 5:return we(e.type);case 16:return we(`Lazy`);case 13:return e.child!==t&&t!==null?we(`Suspense Fallback`):we(`Suspense`);case 19:return we(`SuspenseList`);case 0:case 15:return Ee(e.type,!1);case 11:return Ee(e.type.render,!1);case 1:return Ee(e.type,!0);case 31:return we(`Activity`);default:return``}}function Oe(e){try{var t=``,n=null;do t+=De(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var ke=Object.prototype.hasOwnProperty,Ae=t.unstable_scheduleCallback,je=t.unstable_cancelCallback,Me=t.unstable_shouldYield,Ne=t.unstable_requestPaint,Pe=t.unstable_now,Fe=t.unstable_getCurrentPriorityLevel,Ie=t.unstable_ImmediatePriority,Le=t.unstable_UserBlockingPriority,Re=t.unstable_NormalPriority,ze=t.unstable_LowPriority,Be=t.unstable_IdlePriority,Ve=t.log,He=t.unstable_setDisableYieldValue,Ue=null,We=null;function Ge(e){if(typeof Ve==`function`&&He(e),We&&typeof We.setStrictMode==`function`)try{We.setStrictMode(Ue,e)}catch{}}var Ke=Math.clz32?Math.clz32:Ye,qe=Math.log,Je=Math.LN2;function Ye(e){return e>>>=0,e===0?32:31-(qe(e)/Je|0)|0}var Xe=256,Ze=262144,Qe=4194304;function $e(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function et(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=$e(n))):i=$e(o):i=$e(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=$e(n))):i=$e(o)):i=$e(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function A(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function j(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function tt(){var e=Qe;return Qe<<=1,!(Qe&62914560)&&(Qe=4194304),e}function nt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function rt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function it(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),gn=!1;if(hn)try{var _n={};Object.defineProperty(_n,`passive`,{get:function(){gn=!0}}),window.addEventListener(`test`,_n,_n),window.removeEventListener(`test`,_n,_n)}catch{gn=!1}var vn=null,yn=null,bn=null;function xn(){if(bn)return bn;var e,t=yn,n=t.length,r,i=`value`in vn?vn.value:vn.textContent,a=i.length;for(e=0;e=Zn),er=` `,tr=!1;function nr(e,t){switch(e){case`keyup`:return Yn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function rr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var ir=!1;function ar(e,t){switch(e){case`compositionend`:return rr(t);case`keypress`:return t.which===32?(tr=!0,er):null;case`textInput`:return e=t.data,e===er&&tr?null:e;default:return null}}function or(e,t){if(ir)return e===`compositionend`||!Xn&&nr(e,t)?(e=xn(),bn=yn=vn=null,ir=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Or(n)}}function Ar(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ar(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ht(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ht(e.document)}return t}function Mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Nr=hn&&`documentMode`in document&&11>=document.documentMode,Pr=null,Fr=null,Ir=null,Lr=!1;function Rr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Lr||Pr==null||Pr!==Ht(r)||(r=Pr,`selectionStart`in r&&Mr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ir&&Dr(Ir,r)||(Ir=r,r=Ed(Fr,`onSelect`),0>=o,i-=o,ki=1<<32-Ke(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),L&&ji(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),L&&ji(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return L&&ji(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),L&&ji(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&ka(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ia(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=gi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=hi(o.type,o.key,o.props,null,e.mode,c),Ia(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=yi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=ka(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Fa(o),c);if(o.$$typeof===C)return b(e,r,ia(e,o),c);La(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=_i(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Pa=0;var i=b(e,t,n,r);return Na=null,i}catch(t){if(t===Ca||t===Ta)throw t;var a=F(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var za=Ra(!0),Ba=Ra(!1),Va=!1;function Ha(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Wa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ga(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=li(e),ci(e,null,n),t}return ai(e,r,t,n),li(e)}function Ka(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}function qa(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ja=!1;function Ya(){if(Ja){var e=ma;if(e!==null)throw e}}function Xa(e,t,n,r){Ja=!1;var i=e.updateQueue;Va=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===pa&&(Ja=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Va=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Za(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Fs(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ps(e,t,_a(c,r),pu(e)):Ps(e,t,r,pu(e))}catch(n){Ps(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function ws(){}function Ts(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Es(e).queue;Cs(e,a,t,ue,n===null?ws:function(){return Ds(e),n(r)})}function Es(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ds(e){var t=Es(e);t.next===null&&(t=e.alternate.memoizedState),Ps(e,t.next.queue,{},pu())}function Os(){return ra(Qf)}function ks(){return jo().memoizedState}function As(){return jo().memoizedState}function js(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Wa(n);var r=Ga(t,e,n);r!==null&&(hu(r,t,n),Ka(r,t,n)),t={cache:la()},e.payload=t;return}t=t.return}}function Ms(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Is(e)?Ls(t,n):(n=oi(e,t,n,r),n!==null&&(hu(n,e,r),Rs(n,t,r)))}function Ns(e,t,n){Ps(e,t,n,pu())}function Ps(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Is(e))Ls(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Er(s,o))return ai(e,t,i,0),K===null&&ii(),!1}catch{}if(n=oi(e,t,i,r),n!==null)return hu(n,e,r),Rs(n,t,r),!0}return!1}function Fs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Is(e)){if(t)throw Error(i(479))}else t=oi(e,n,r,2),t!==null&&hu(t,e,2)}function Is(e){var t=e.alternate;return e===B||t!==null&&t===B}function Ls(e,t){go=ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Rs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}var zs={readContext:ra,use:Po,useCallback:H,useContext:H,useEffect:H,useImperativeHandle:H,useLayoutEffect:H,useInsertionEffect:H,useMemo:H,useReducer:H,useRef:H,useState:H,useDebugValue:H,useDeferredValue:H,useTransition:H,useSyncExternalStore:H,useId:H,useHostTransitionStatus:H,useFormState:H,useActionState:H,useOptimistic:H,useMemoCache:H,useCacheRefresh:H};zs.useEffectEvent=H;var Bs={readContext:ra,use:Po,useCallback:function(e,t){return Ao().memoizedState=[e,t===void 0?null:t],e},useContext:ra,useEffect:us,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),cs(4194308,4,gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cs(4194308,4,e,t)},useInsertionEffect:function(e,t){cs(4,2,e,t)},useMemo:function(e,t){var n=Ao();t=t===void 0?null:t;var r=e();if(_o){Ge(!0);try{e()}finally{Ge(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Ao();if(n!==void 0){var i=n(t);if(_o){Ge(!0);try{n(t)}finally{Ge(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ms.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Ao();return e={current:e},t.memoizedState=e},useState:function(e){e=Ko(e);var t=e.queue,n=Ns.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:vs,useDeferredValue:function(e,t){return xs(Ao(),e,t)},useTransition:function(){var e=Ko(!1);return e=Cs.bind(null,B,e.queue,!0,!1),Ao().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=Ao();if(L){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Vo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,us(Uo.bind(null,r,o,e),[e]),r.flags|=2048,os(9,{destroy:void 0},Ho.bind(null,r,o,n,t),null),n},useId:function(){var e=Ao(),t=K.identifierPrefix;if(L){var n=Ai,r=ki;n=(r&~(1<<32-Ke(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=vo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[pt]=t,o[mt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Pc(t)}}return U(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Pc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=_e.current,Ui(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ii,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[pt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||Bi(t,!0)}else e=Bd(e).createTextNode(r),e[pt]=t,t.stateNode=e}return U(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Ui(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[pt]=t}else Wi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),e=!1}else n=Gi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(uo(t),t):(uo(t),null);if(t.flags&128)throw Error(i(558))}return U(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Ui(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[pt]=t}else Wi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),a=!1}else a=Gi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(uo(t),t):(uo(t),null)}return uo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Lc(t,t.updateQueue),U(t),null);case 4:return be(),e===null&&Sd(t.stateNode.containerInfo),U(t),null;case 10:return Zi(t.type),U(t),null;case 19:if(me(z),r=t.memoizedState,r===null)return U(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Rc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,Rc(r,!1),e=o.updateQueue,t.updateQueue=e,Lc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)mi(n,e),n=n.sibling;return O(z,z.current&1|2),L&&ji(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Pe()>tu&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Lc(t,e),Rc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!L)return U(t),null}else 2*Pe()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(U(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Pe(),e.sibling=null,n=z.current,O(z,a?n&1|2:n&1),L&&ji(t,r.treeForkCount),e);case 22:case 23:return uo(t),ro(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(U(t),t.subtreeFlags&6&&(t.flags|=8192)):U(t),n=t.updateQueue,n!==null&&Lc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&me(ya),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Zi(R),U(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Pi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Zi(R),be(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Se(t),null;case 31:if(t.memoizedState!==null){if(uo(t),t.alternate===null)throw Error(i(340));Wi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(uo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Wi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return me(z),null;case 4:return be(),null;case 10:return Zi(t.type),null;case 22:case 23:return uo(t),ro(),e!==null&&me(ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Zi(R),null;case 25:return null;default:return null}}function Vc(e,t){switch(Pi(t),t.tag){case 3:Zi(R),be();break;case 26:case 27:case 5:Se(t);break;case 4:be();break;case 31:t.memoizedState!==null&&uo(t);break;case 13:uo(t);break;case 19:me(z);break;case 10:Zi(t.type);break;case 22:case 23:uo(t),ro(),e!==null&&me(ya);break;case 24:Zi(R)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Qa(t,n)}catch(t){Z(e,e.return,t)}}}function Gc(e,t,n){n.props=qs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[mt]=t}catch(t){Z(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=on));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[pt]=e,t[mt]=n}catch(t){Z(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=jr(e),Mr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[pt]=e,M(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=kr(s,h),v=kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),We&&typeof We.onPostCommitFiberRoot==`function`)try{We.onPostCommitFiberRoot(Ue,o)}catch{}return!0}finally{D.p=a,E.T=r,Vu(e,t)}}function Wu(e,t,n){t=xi(n,t),t=$s(e.stateNode,t,2),e=Ga(e,t,2),e!==null&&(rt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=xi(n,e),n=ec(2),r=Ga(t,n,2),r!==null&&(tc(n,r,t,e),rt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Pe()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=tt()),e=si(e,t),e!==null&&(rt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return Ae(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ke(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=et(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||A(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Pe(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Wt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),M(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Wt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Wt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Wt(n.imageSizes)+`"]`)):i+=`[href="`+Wt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),M(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Wt(r)+`"][href="`+Wt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),M(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=Tt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);M(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),M(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),M(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=_e.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=Tt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=Tt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=Tt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Wt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),M(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Wt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Wt(n.href)+`"]`);if(r)return t.instance=r,M(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),M(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,M(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),M(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,M(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),M(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,M(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),M(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},b={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},x=new class{#e=b;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function S(e){setTimeout(e,0)}var C=typeof window>`u`||`Deno`in globalThis;function w(){}function ee(e,t){return typeof e==`function`?e(t):e}function te(e){return typeof e==`number`&&e>=0&&e!==1/0}function ne(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){return typeof e==`function`?e(t):e}function ie(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==oe(o,t.options))return!1}else if(!ce(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ae(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(se(t.options.mutationKey)!==se(a))return!1}else if(!ce(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function oe(e,t){return(t?.queryKeyHashFn||se)(e)}function se(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ce(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>ce(e[n],t[n])):!1}var le=Object.prototype.hasOwnProperty;function E(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{x.setTimeout(t,e)})}function me(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function O(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function he(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var ge=Symbol();function _e(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===ge?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ve(e,t){return typeof e==`function`?e(...t):!!e}function ye(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var be=(()=>{let e=()=>C;return{isServer(){return e()},setIsServer(t){e=t}}})();function xe(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var Se=S;function Ce(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=Se,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var k=Ce(),we=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function Te(e){return Math.min(1e3*2**e,3e4)}function Ee(e){return(e??`online`)===`online`?we.isOnline():!0}var De=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Oe(e){let t=!1,n=0,r,i=xe(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new De(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>y.isFocused()&&(e.networkMode===`always`||we.isOnline())&&e.canRun(),u=()=>Ee(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(be.isServer()?0:3),o=e.retryDelay??Te,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ke=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),te(this.gcTime)&&(this.#e=x.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(be.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e&&=(x.clearTimeout(this.#e),void 0)}},Ae=class extends ke{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Ne(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Ne(this.options);e.data!==void 0&&(this.setState(Me(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=me(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#c({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(w).catch(w):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>re(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===ge||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>T(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!ne(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o||this.#s()?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#s(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=_e(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=Oe({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof De&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof De){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#c(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...je(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Me(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),k.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function je(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Ee(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Me(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Ne(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Pe=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=xe(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Ie(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Le(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Le(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof re(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Re(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return Be(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(w)),t}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(be.isServer()||this.#r.isStale||!te(e))return;let t=ne(this.#r.dataUpdatedAt,e)+1;this.#d=x.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(be.isServer()||re(this.options.enabled,this.#t)===!1||!te(this.#p)||this.#p===0)&&(this.#f=x.setInterval(()=>{(this.options.refetchIntervalInBackground||y.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d&&=(x.clearTimeout(this.#d),void 0)}#x(){this.#f&&=(x.clearInterval(this.#f),void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Ie(e,t),o=i&&Re(e,n,t,r);(a||o)&&(l={...l,...je(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=me(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=me(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:ze(e,t),refetch:this.refetch,promise:this.#o,isEnabled:re(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=xe())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!D(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){k.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Fe(e,t){return re(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Ie(e,t){return Fe(e,t)||e.state.data!==void 0&&Le(e,t,t.refetchOnMount)}function Le(e,t,n){if(re(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&ze(e,t)}return!1}function Re(e,t,n,r){return(e!==t||re(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&ze(e,n)}function ze(e,t){return re(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}function Be(e,t){return!D(e.getCurrentResult(),t)}function Ve(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ye(e,()=>t.signal,()=>n=!0)},u=_e(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?he:O;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?Ue:He,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:He(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function He(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Ue(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var We=class extends ke{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||Ge(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Oe({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),k.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function Ge(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Ke=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new We({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=qe(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=qe(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=qe(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=qe(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){k.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ae(t,e))}findAll(e={}){return this.getAll().filter(t=>ae(e,t))}notify(e){k.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return k.batch(()=>Promise.all(e.map(e=>e.continue().catch(w))))}};function qe(e){return e.options.scope?.id}function Je(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Ye(e,t,n){let r=e.slice(0);return r[t]=n,r}var Xe=class extends v{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,k.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!D(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(Je(e,n).forEach(e=>{e.destroy()}),Je(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=E(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new Pe(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Ye(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&k.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Ze=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??oe(r,t),a=this.get(i);return a||(a=new Ae({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){k.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ie(e,t)):t}notify(e){k.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){k.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){k.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Qe=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ze,this.#t=e.mutationCache||new Ke,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=we.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(T(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=ee(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return k.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;k.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return k.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=k.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(w).catch(w)}invalidateQueries(e,t={}){return k.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=k.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(w)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(w)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(T(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(w).catch(w)}fetchInfiniteQuery(e){return e.behavior=Ve(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(w).catch(w)}ensureInfiniteQueryData(e){return e.behavior=Ve(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return we.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(se(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(se(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=oe(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===ge&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},$e=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),et=o(((e,t)=>{t.exports=$e()})),A=l(d(),1),j=et(),tt=A.createContext(void 0),nt=e=>{let t=A.useContext(tt);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},rt=({client:e,children:t})=>(A.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,j.jsx)(tt.Provider,{value:e,children:t})),it=A.createContext(!1),at=()=>A.useContext(it);it.Provider;function ot(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var st=A.createContext(ot()),ct=()=>A.useContext(st),lt=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?ve(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},ut=e=>{A.useEffect(()=>{e.clearReset()},[e])},dt=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||ve(n,[e.error,r])),ft=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},pt=(e,t)=>e.isLoading&&e.isFetching&&!t,mt=(e,t)=>e?.suspense&&t.isPending,ht=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function gt({queries:e,...t},n){let r=nt(n),i=at(),a=ct(),o=A.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{ft(e),lt(e,a,r.getQueryCache().get(e.queryHash))}),ut(a);let[s]=A.useState(()=>new Xe(r,o,t)),[c,l,u]=s.getOptimisticResult(o,t.combine),d=!i&&t.subscribed!==!1;A.useSyncExternalStore(A.useCallback(e=>d?s.subscribe(k.batchCalls(e)):w,[s,d]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),A.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let f=c.some((e,t)=>mt(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&mt(n,e)?ht(n,new Pe(r,n),a):[]}):[];if(f.length>0)throw Promise.all(f);let p=c.find((e,t)=>{let n=o[t];return n&&dt({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(p?.error)throw p.error;return l(u())}function _t(e,t,n){let r=at(),i=ct(),a=nt(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,ft(o),lt(o,i,s),ut(i);let c=!a.getQueryCache().get(o.queryHash),[l]=A.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(A.useSyncExternalStore(A.useCallback(e=>{let t=d?l.subscribe(k.batchCalls(e)):w;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),A.useEffect(()=>{l.setOptions(o)},[o,l]),mt(o,u))throw ht(o,l,i);if(dt({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!be.isServer()&&pt(u,r)&&(c?ht(o,l,i):s?.promise)?.catch(w).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function vt(e,t){return _t(e,Pe,t)}function yt(e,t){return function(){return e.apply(t,arguments)}}var{toString:bt}=Object.prototype,{getPrototypeOf:xt}=Object,{iterator:St,toStringTag:Ct}=Symbol,wt=(e=>t=>{let n=bt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Tt=e=>(e=e.toLowerCase(),t=>wt(t)===e),M=e=>t=>typeof t===e,{isArray:Et}=Array,Dt=M(`undefined`);function Ot(e){return e!==null&&!Dt(e)&&e.constructor!==null&&!Dt(e.constructor)&&Mt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var kt=Tt(`ArrayBuffer`);function At(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&kt(e.buffer),t}var jt=M(`string`),Mt=M(`function`),Nt=M(`number`),Pt=e=>typeof e==`object`&&!!e,Ft=e=>e===!0||e===!1,It=e=>{if(wt(e)!==`object`)return!1;let t=xt(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Ct in e)&&!(St in e)},Lt=e=>{if(!Pt(e)||Ot(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Rt=Tt(`Date`),zt=Tt(`File`),Bt=e=>!!(e&&e.uri!==void 0),Vt=e=>e&&e.getParts!==void 0,Ht=Tt(`Blob`),Ut=Tt(`FileList`),Wt=e=>Pt(e)&&Mt(e.pipe);function Gt(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var Kt=Gt(),qt=Kt.FormData===void 0?void 0:Kt.FormData,Jt=e=>{let t;return e&&(qt&&e instanceof qt||Mt(e.append)&&((t=wt(e))===`formdata`||t===`object`&&Mt(e.toString)&&e.toString()===`[object FormData]`))},Yt=Tt(`URLSearchParams`),[Xt,Zt,Qt,$t]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(Tt),en=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function tn(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),Et(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}var rn=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,an=e=>!Dt(e)&&e!==rn;function on(){let{caseless:e,skipUndefined:t}=an(this)&&this||{},n={},r=(r,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=e&&nn(n,i)||i;It(n[a])&&It(r)?n[a]=on(n[a],r):It(r)?n[a]=on({},r):Et(r)?n[a]=r.slice():(!t||!Dt(r))&&(n[a]=r)};for(let e=0,t=arguments.length;e(tn(t,(t,r)=>{n&&Mt(t)?Object.defineProperty(e,r,{value:yt(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),cn=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),ln=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{value:t.prototype}),n&&Object.assign(e.prototype,n)},un=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&xt(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},dn=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},fn=e=>{if(!e)return null;if(Et(e))return e;let t=e.length;if(!Nt(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},pn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&xt(Uint8Array)),mn=(e,t)=>{let n=(e&&e[St]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},hn=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},gn=Tt(`HTMLFormElement`),_n=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),vn=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),yn=Tt(`RegExp`),bn=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};tn(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},xn=e=>{bn(e,(t,n)=>{if(Mt(e)&&[`arguments`,`caller`,`callee`].indexOf(n)!==-1)return!1;let r=e[n];if(Mt(r)){if(t.enumerable=!1,`writable`in t){t.writable=!1;return}t.set||=()=>{throw Error(`Can not rewrite read-only method '`+n+`'`)}}})},Sn=(e,t)=>{let n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Et(e)?r(e):r(String(e).split(t)),n},Cn=()=>{},wn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Tn(e){return!!(e&&Mt(e.append)&&e[Ct]===`FormData`&&e[St])}var En=e=>{let t=Array(10),n=(e,r)=>{if(Pt(e)){if(t.indexOf(e)>=0)return;if(Ot(e))return e;if(!(`toJSON`in e)){t[r]=e;let i=Et(e)?[]:{};return tn(e,(e,t)=>{let a=n(e,r+1);!Dt(a)&&(i[t]=a)}),t[r]=void 0,i}}return e};return n(e,0)},Dn=Tt(`AsyncFunction`),On=e=>e&&(Pt(e)||Mt(e))&&Mt(e.then)&&Mt(e.catch),kn=((e,t)=>e?setImmediate:t?((e,t)=>(rn.addEventListener(`message`,({source:n,data:r})=>{n===rn&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),rn.postMessage(e,`*`)}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate==`function`,Mt(rn.postMessage)),N={isArray:Et,isArrayBuffer:kt,isBuffer:Ot,isFormData:Jt,isArrayBufferView:At,isString:jt,isNumber:Nt,isBoolean:Ft,isObject:Pt,isPlainObject:It,isEmptyObject:Lt,isReadableStream:Xt,isRequest:Zt,isResponse:Qt,isHeaders:$t,isUndefined:Dt,isDate:Rt,isFile:zt,isReactNativeBlob:Bt,isReactNative:Vt,isBlob:Ht,isRegExp:yn,isFunction:Mt,isStream:Wt,isURLSearchParams:Yt,isTypedArray:pn,isFileList:Ut,forEach:tn,merge:on,extend:sn,trim:en,stripBOM:cn,inherits:ln,toFlatObject:un,kindOf:wt,kindOfTest:Tt,endsWith:dn,toArray:fn,forEachEntry:mn,matchAll:hn,isHTMLForm:gn,hasOwnProperty:vn,hasOwnProp:vn,reduceDescriptors:bn,freezeMethods:xn,toObjectSet:Sn,toCamelCase:_n,noop:Cn,toFiniteNumber:wn,findKey:nn,global:rn,isContextDefined:an,isSpecCompliantForm:Tn,toJSONObject:En,isAsyncFn:Dn,isThenable:On,setImmediate:kn,asap:typeof queueMicrotask<`u`?queueMicrotask.bind(rn):typeof process<`u`&&process.nextTick||kn,isIterable:e=>e!=null&&Mt(e[St])},P=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:N.toJSONObject(this.config),code:this.code,status:this.status}}};P.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,P.ERR_BAD_OPTION=`ERR_BAD_OPTION`,P.ECONNABORTED=`ECONNABORTED`,P.ETIMEDOUT=`ETIMEDOUT`,P.ERR_NETWORK=`ERR_NETWORK`,P.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,P.ERR_DEPRECATED=`ERR_DEPRECATED`,P.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,P.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,P.ERR_CANCELED=`ERR_CANCELED`,P.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,P.ERR_INVALID_URL=`ERR_INVALID_URL`;function An(e){return N.isPlainObject(e)||N.isArray(e)}function jn(e){return N.endsWith(e,`[]`)?e.slice(0,-2):e}function Mn(e,t,n){return e?e.concat(t).map(function(e,t){return e=jn(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function Nn(e){return N.isArray(e)&&!e.some(An)}var Pn=N.toFlatObject(N,{},null,function(e){return/^is[A-Z]/.test(e)});function Fn(e,t,n){if(!N.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=N.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!N.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||l,a=n.dots,o=n.indexes,s=(n.Blob||typeof Blob<`u`&&Blob)&&N.isSpecCompliantForm(t);if(!N.isFunction(i))throw TypeError(`visitor must be a function`);function c(e){if(e===null)return``;if(N.isDate(e))return e.toISOString();if(N.isBoolean(e))return e.toString();if(!s&&N.isBlob(e))throw new P(`Blob is not supported. Use a Buffer instead.`);return N.isArrayBuffer(e)||N.isTypedArray(e)?s&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function l(e,n,i){let s=e;if(N.isReactNative(t)&&N.isReactNativeBlob(e))return t.append(Mn(i,n,a),c(e)),!1;if(e&&!i&&typeof e==`object`){if(N.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(N.isArray(e)&&Nn(e)||(N.isFileList(e)||N.endsWith(n,`[]`))&&(s=N.toArray(e)))return n=jn(n),s.forEach(function(e,r){!(N.isUndefined(e)||e===null)&&t.append(o===!0?Mn([n],r,a):o===null?n:n+`[]`,c(e))}),!1}return An(e)?!0:(t.append(Mn(i,n,a),c(e)),!1)}let u=[],d=Object.assign(Pn,{defaultVisitor:l,convertValue:c,isVisitable:An});function f(e,n){if(!N.isUndefined(e)){if(u.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));u.push(e),N.forEach(e,function(e,r){(!(N.isUndefined(e)||e===null)&&i.call(t,e,N.isString(r)?r.trim():r,n,d))===!0&&f(e,n?n.concat(r):[r])}),u.pop()}}if(!N.isObject(e))throw TypeError(`data must be an object`);return f(e),t}function In(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`,"%00":`\0`};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function Ln(e,t){this._pairs=[],e&&Fn(e,this,t)}var Rn=Ln.prototype;Rn.append=function(e,t){this._pairs.push([e,t])},Rn.toString=function(e){let t=e?function(t){return e.call(this,t,In)}:In;return this._pairs.map(function(e){return t(e[0])+`=`+t(e[1])},``).join(`&`)};function zn(e){return encodeURIComponent(e).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`).replace(/%20/g,`+`)}function Bn(e,t,n){if(!t)return e;let r=n&&n.encode||zn,i=N.isFunction(n)?{serialize:n}:n,a=i&&i.serialize,o;if(o=a?a(t,i):N.isURLSearchParams(t)?t.toString():new Ln(t,i).toString(r),o){let t=e.indexOf(`#`);t!==-1&&(e=e.slice(0,t)),e+=(e.indexOf(`?`)===-1?`?`:`&`)+o}return e}var Vn=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&=[]}forEach(e){N.forEach(this.handlers,function(t){t!==null&&e(t)})}},Hn={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Un={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<`u`?URLSearchParams:Ln,FormData:typeof FormData<`u`?FormData:null,Blob:typeof Blob<`u`?Blob:null},protocols:[`http`,`https`,`file`,`blob`,`url`,`data`]},Wn=s({hasBrowserEnv:()=>Gn,hasStandardBrowserEnv:()=>qn,hasStandardBrowserWebWorkerEnv:()=>Jn,navigator:()=>Kn,origin:()=>Yn}),Gn=typeof window<`u`&&typeof document<`u`,Kn=typeof navigator==`object`&&navigator||void 0,qn=Gn&&(!Kn||[`ReactNative`,`NativeScript`,`NS`].indexOf(Kn.product)<0),Jn=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope&&typeof self.importScripts==`function`,Yn=Gn&&window.location.href||`http://localhost`,Xn={...Wn,...Un};function Zn(e,t){return Fn(e,new Xn.classes.URLSearchParams,{visitor:function(e,t,n,r){return Xn.isNode&&N.isBuffer(e)?(this.append(t,e.toString(`base64`)),!1):r.defaultVisitor.apply(this,arguments)},...t})}function Qn(e){return N.matchAll(/\w+|\[(\w*)]/g,e).map(e=>e[0]===`[]`?``:e[1]||e[0])}function $n(e){let t={},n=Object.keys(e),r,i=n.length,a;for(r=0;r=e.length;return a=!a&&N.isArray(r)?r.length:a,s?(N.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!o):((!r[a]||!N.isObject(r[a]))&&(r[a]=[]),t(e,n,r[a],i)&&N.isArray(r[a])&&(r[a]=$n(r[a])),!o)}if(N.isFormData(e)&&N.isFunction(e.entries)){let n={};return N.forEachEntry(e,(e,r)=>{t(Qn(e),r,n,0)}),n}return null}function tr(e,t,n){if(N.isString(e))try{return(t||JSON.parse)(e),N.trim(e)}catch(e){if(e.name!==`SyntaxError`)throw e}return(n||JSON.stringify)(e)}var nr={transitional:Hn,adapter:[`xhr`,`http`,`fetch`],transformRequest:[function(e,t){let n=t.getContentType()||``,r=n.indexOf(`application/json`)>-1,i=N.isObject(e);if(i&&N.isHTMLForm(e)&&(e=new FormData(e)),N.isFormData(e))return r?JSON.stringify(er(e)):e;if(N.isArrayBuffer(e)||N.isBuffer(e)||N.isStream(e)||N.isFile(e)||N.isBlob(e)||N.isReadableStream(e))return e;if(N.isArrayBufferView(e))return e.buffer;if(N.isURLSearchParams(e))return t.setContentType(`application/x-www-form-urlencoded;charset=utf-8`,!1),e.toString();let a;if(i){if(n.indexOf(`application/x-www-form-urlencoded`)>-1)return Zn(e,this.formSerializer).toString();if((a=N.isFileList(e))||n.indexOf(`multipart/form-data`)>-1){let t=this.env&&this.env.FormData;return Fn(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||r?(t.setContentType(`application/json`,!1),tr(e)):e}],transformResponse:[function(e){let t=this.transitional||nr.transitional,n=t&&t.forcedJSONParsing,r=this.responseType===`json`;if(N.isResponse(e)||N.isReadableStream(e))return e;if(e&&N.isString(e)&&(n&&!this.responseType||r)){let n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n)throw e.name===`SyntaxError`?P.from(e,P.ERR_BAD_RESPONSE,this,null,this.response):e}}return e}],timeout:0,xsrfCookieName:`XSRF-TOKEN`,xsrfHeaderName:`X-XSRF-TOKEN`,maxContentLength:-1,maxBodyLength:-1,env:{FormData:Xn.classes.FormData,Blob:Xn.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:`application/json, text/plain, */*`,"Content-Type":void 0}}};N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`],e=>{nr.headers[e]={}});var rr=N.toObjectSet([`age`,`authorization`,`content-length`,`content-type`,`etag`,`expires`,`from`,`host`,`if-modified-since`,`if-unmodified-since`,`last-modified`,`location`,`max-forwards`,`proxy-authorization`,`referer`,`retry-after`,`user-agent`]),ir=e=>{let t={},n,r,i;return e&&e.split(` +`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&rr[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t},ar=Symbol(`internals`);function or(e){return e&&String(e).trim().toLowerCase()}function sr(e){return e===!1||e==null?e:N.isArray(e)?e.map(sr):String(e)}function cr(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var lr=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ur(e,t,n,r,i){if(N.isFunction(r))return r.call(this,t,n);if(i&&(t=n),N.isString(t)){if(N.isString(r))return t.indexOf(r)!==-1;if(N.isRegExp(r))return r.test(t)}}function dr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function fr(e,t){let n=N.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var pr=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=or(t);if(!i)throw Error(`header name must be a non-empty string`);let a=N.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=sr(e))}let a=(e,t)=>N.forEach(e,(e,n)=>i(e,n,t));if(N.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(N.isString(e)&&(e=e.trim())&&!lr(e))a(ir(e),t);else if(N.isObject(e)&&N.isIterable(e)){let n={},r,i;for(let t of e){if(!N.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?N.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=or(e),e){let n=N.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return cr(e);if(N.isFunction(t))return t.call(this,e,n);if(N.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=or(e),e){let n=N.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||ur(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=or(e),e){let i=N.findKey(n,e);i&&(!t||ur(n,n[i],i,t))&&(delete n[i],r=!0)}}return N.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||ur(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return N.forEach(this,(r,i)=>{let a=N.findKey(n,i);if(a){t[a]=sr(r),delete t[i];return}let o=e?dr(i):String(i).trim();o!==i&&delete t[i],t[o]=sr(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return N.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&N.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(` +`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[ar]=this[ar]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=or(e);t[r]||(fr(n,e),t[r]=!0)}return N.isArray(e)?e.forEach(r):r(e),this}};pr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),N.reduceDescriptors(pr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),N.freezeMethods(pr);function mr(e,t){let n=this||nr,r=t||n,i=pr.from(r.headers),a=r.data;return N.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function hr(e){return!!(e&&e.__CANCEL__)}var gr=class extends P{constructor(e,t,n){super(e??`canceled`,P.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function _r(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new P(`Request failed with status code `+n.status,[P.ERR_BAD_REQUEST,P.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function vr(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function yr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var xr=(e,t,n=3)=>{let r=0,i=yr(50,250);return br(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},Sr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Cr=e=>(...t)=>N.asap(()=>e(...t)),wr=Xn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Xn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Xn.origin),Xn.navigator&&/(msie|trident)/i.test(Xn.navigator.userAgent)):()=>!0,Tr=Xn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];N.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),N.isString(r)&&s.push(`path=${r}`),N.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),N.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Er(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Dr(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function Or(e,t,n){let r=!Er(t);return e&&(r||n==0)?Dr(e,t):t}var kr=e=>e instanceof pr?{...e}:e;function Ar(e,t){t||={};let n={};function r(e,t,n,r){return N.isPlainObject(e)&&N.isPlainObject(t)?N.merge.call({caseless:r},e,t):N.isPlainObject(t)?N.merge({},t):N.isArray(t)?t.slice():t}function i(e,t,n,i){if(!N.isUndefined(t))return r(e,t,n,i);if(!N.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!N.isUndefined(t))return r(void 0,t)}function o(e,t){if(!N.isUndefined(t))return r(void 0,t);if(!N.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(kr(e),kr(t),n,!0)};return N.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=N.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);N.isUndefined(o)&&a!==s||(n[r]=o)}),n}var jr=e=>{let t=Ar({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=pr.from(o),t.url=Bn(Or(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),N.isFormData(n)){if(Xn.hasStandardBrowserEnv||Xn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(N.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Xn.hasStandardBrowserEnv&&(r&&N.isFunction(r)&&(r=r(t)),r||r!==!1&&wr(t.url))){let e=i&&a&&Tr.read(a);e&&o.set(i,e)}return t},Mr=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=jr(e),i=r.data,a=pr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=pr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());_r(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new P(`Request aborted`,P.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new P(t&&t.message?t.message:`Network Error`,P.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Hn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new P(t,i.clarifyTimeoutError?P.ETIMEDOUT:P.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&N.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),N.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=xr(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=xr(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new gr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=vr(r.url);if(_&&Xn.protocols.indexOf(_)===-1){n(new P(`Unsupported protocol `+_+`:`,P.ERR_BAD_REQUEST,e));return}h.send(i||null)})},Nr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof P?t:new gr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new P(`timeout of ${t}ms exceeded`,P.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>N.asap(o),s}},Pr=function*(e,t){let n=e.byteLength;if(!t||n{let i=Fr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Rr=64*1024,{isFunction:zr}=N,Br=(({Request:e,Response:t})=>({Request:e,Response:t}))(N.global),{ReadableStream:Vr,TextEncoder:Hr}=N.global,Ur=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Wr=e=>{e=N.merge.call({skipUndefined:!0},Br,e);let{fetch:t,Request:n,Response:r}=e,i=t?zr(t):typeof fetch==`function`,a=zr(n),o=zr(r);if(!i)return!1;let s=i&&zr(Vr),c=i&&(typeof Hr==`function`?(e=>t=>e.encode(t))(new Hr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&Ur(()=>{let e=!1,t=new n(Xn.origin,{body:new Vr,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&Ur(()=>N.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new P(`Response type '${e}' is not supported`,P.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(N.isBlob(e))return e.size;if(N.isSpecCompliantForm(e))return(await new n(Xn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(N.isArrayBufferView(e)||N.isArrayBuffer(e))return e.byteLength;if(N.isURLSearchParams(e)&&(e+=``),N.isString(e))return(await c(e)).byteLength},p=async(e,t)=>N.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=jr(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=Nr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(N.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=Sr(ee,xr(Cr(g)));s=Lr(e.body,Rr,t,n)}}N.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=N.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&Sr(t,xr(Cr(h),!0))||[];f=new r(Lr(f.body,Rr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[N.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{_r(t,n,{data:te,headers:pr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new P(`Network Error`,P.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):P.from(t,t&&t.code,e,C,t&&t.response)}}},Gr=new Map,Kr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Gr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Wr(t)),l=c;return c};Kr();var qr={http:null,xhr:Mr,fetch:{get:Kr}};N.forEach(qr,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var Jr=e=>`- ${e}`,Yr=e=>N.isFunction(e)||e===null||e===!1;function Xr(e,t){e=N.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new P(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : +`+e.map(Jr).join(` +`):` `+Jr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var Zr={getAdapter:Xr,adapters:qr};function Qr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new gr(null,e)}function $r(e){return Qr(e),e.headers=pr.from(e.headers),e.data=mr.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),Zr.getAdapter(e.adapter||nr.adapter,e)(e).then(function(t){return Qr(e),t.data=mr.call(e,e.transformResponse,t),t.headers=pr.from(t.headers),t},function(t){return hr(t)||(Qr(e),t&&t.response&&(t.response.data=mr.call(e,e.transformResponse,t.response),t.response.headers=pr.from(t.response.headers))),Promise.reject(t)})}var ei=`1.13.6`,ti={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{ti[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var ni={};ti.transitional=function(e,t,n){function r(e,t){return`[Axios v`+ei+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new P(r(i,` has been removed`+(t?` in `+t:``)),P.ERR_DEPRECATED);return t&&!ni[i]&&(ni[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},ti.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function ri(e,t,n){if(typeof e!=`object`)throw new P(`options must be an object`,P.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new P(`option `+a+` must be `+n,P.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new P(`Unknown option `+a,P.ERR_BAD_OPTION)}}var ii={assertOptions:ri,validators:ti},ai=ii.validators,oi=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Vn,response:new Vn}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` +`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=Ar(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ii.assertOptions(n,{silentJSONParsing:ai.transitional(ai.boolean),forcedJSONParsing:ai.transitional(ai.boolean),clarifyTimeoutError:ai.transitional(ai.boolean),legacyInterceptorReqResOrdering:ai.transitional(ai.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:ii.assertOptions(r,{encode:ai.function,serialize:ai.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ii.assertOptions(t,{baseUrl:ai.spelling(`baseURL`),withXsrfToken:ai.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=pr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Hn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[$r.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new gr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function ci(e){return function(t){return e.apply(null,t)}}function li(e){return N.isObject(e)&&e.isAxiosError===!0}var ui={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ui).forEach(([e,t])=>{ui[t]=e});function di(e){let t=new oi(e),n=yt(oi.prototype.request,t);return N.extend(n,oi.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return di(Ar(e,t))},n}var F=di(nr);F.Axios=oi,F.CanceledError=gr,F.CancelToken=si,F.isCancel=hr,F.VERSION=ei,F.toFormData=Fn,F.AxiosError=P,F.Cancel=F.CanceledError,F.all=function(e){return Promise.all(e)},F.spread=ci,F.isAxiosError=li,F.mergeConfig=Ar,F.AxiosHeaders=pr,F.formToJSON=e=>er(N.isHTMLForm(e)?new FormData(e):e),F.getAdapter=Zr.getAdapter,F.HttpStatusCode=ui,F.default=F;var fi=l(_()),pi=`order-demo-001`;function mi(e,t,n,r,i,a){return{eventId:e,aggregateId:pi,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function hi(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(mi(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var gi=hi();function _i(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:pi,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var vi=_i(gi);function yi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function bi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function xi(e){let t=[],n={};for(let r of e){let e={...n};n=yi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:bi(e,i)})}return t}var Si=xi(gi);function Ci(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function wi(e){return Ci(e)?[pi]:[]}function Ti(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=gi.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:gi.slice(i,i+a),totalEvents:r}}function Ei(e){return e===`order-demo-001`?Si:[]}function Di(e){let t=Math.min(Math.max(e,1),500);return vi.slice(0,t)}function Oi(){return[...gi].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function ki(){return{status:`UP`,version:`demo`,demo:!0}}function Ai(e=1,t=24){let n=Math.max(e,1)*60*60*1e3,r=[...gi].sort((e,t)=>Date.parse(e.timestamp)-Date.parse(t.timestamp)),i=new Map,a=new Map,o=new Map;for(let e of r){let t=new Date(Math.floor(Date.parse(e.timestamp)/n)*n).toISOString();i.set(t,(i.get(t)??0)+1),a.set(e.eventType,(a.get(e.eventType)??0)+1),o.set(e.aggregateType,(o.get(e.aggregateType)??0)+1)}return{totalEvents:gi.length,distinctAggregates:1,eventTypes:[...a.entries()].map(([e,t])=>({type:e,count:t})),aggregateTypes:[...o.entries()].map(([e,t])=>({type:e,count:t})),throughput:[...i.entries()].slice(-Math.max(t,1)).map(([e,t])=>({bucket:e,count:t})),available:!0,message:null}}function ji(){return!1}var Mi=F.create({baseURL:`/api`});function Ni(e){return new Promise(t=>{setTimeout(t,e)})}function Pi(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var Fi=async(e,t=20,n)=>{let r=Pi(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(ji()){await Ni(40);let n=wi(e);try{let e=await Mi.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Mi.get(r).then(e=>e.data)},Ii=async(e,t=500,n=0,r,i=`full`)=>{if(ji()&&e===`order-demo-001`)return await Ni(50),Ti(e,t,n);let a=Pi(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Mi.get(a).then(e=>e.data)},I=async(e,t)=>ji()&&e===`order-demo-001`?(await Ni(50),Ei(e)):Mi.get(Pi(`/aggregates/${e}/transitions`,t)).then(e=>e.data),L=async(e=100,t)=>ji()?(await Ni(45),Di(e)):Mi.get(Pi(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),Li=async(e,t=1,n=24)=>{if(ji())return await Ni(30),Ai(t,n);let r=Pi(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Mi.get(r).then(e=>e.data)},Ri=async()=>ji()?(await Ni(20),ki()):Mi.get(`/health`).then(e=>e.data),zi=async()=>ji()?(await Ni(20),[{id:`demo-primary`,displayName:`Demo Primary`,status:`ready`,healthMessage:`Frontend demo datasource`,capabilities:[`timeline`,`replay`,`statistics`]}]):Mi.get(`/v1/datasources`).then(e=>e.data),Bi=async e=>ji()?(await Ni(20),{id:e,displayName:`Demo Primary`,status:`ready`,health:{state:`up`,message:`Frontend demo datasource`},lastHealthCheck:new Date().toISOString(),failureReason:``}):Mi.get(`/v1/datasources/${encodeURIComponent(e)}/health`).then(e=>e.data),Vi=async()=>ji()?(await Ni(20),[{instanceId:`demo-source`,typeId:`demo`,displayName:`Demo Source Plugin`,pluginType:`EVENT_SOURCE`,lifecycle:`ready`,health:{state:`up`,message:`Frontend demo plugin`},lastHealthCheck:new Date().toISOString(),failureReason:null}]):Mi.get(`/v1/plugins`).then(e=>e.data);function Hi(e,t){let[n,r]=(0,A.useState)(e);return(0,A.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function Ui({onSelect:e,source:t}){let[n,r]=(0,A.useState)(``),[i,a]=(0,A.useState)(!1),o=(0,A.useRef)(null),s=Hi(n,300),{data:c=[]}=vt({queryKey:[`search`,s,t??`default`],queryFn:()=>Fi(s,20,t),enabled:s.length>=2,staleTime:5e3});(0,A.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let l=(0,A.useRef)(null),u=(0,A.useCallback)(()=>{l.current?.focus(),l.current?.select()},[]);(0,A.useEffect)(()=>{let e=document.getElementById(`aggregate-search`);return e?.addEventListener(`focus`,u),()=>e?.removeEventListener(`focus`,u)},[u]);let d=t=>{r(t),a(!1),e(t)};return(0,j.jsxs)(`div`,{className:`search-wrapper`,ref:o,children:[(0,j.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,j.jsx)(`input`,{id:`aggregate-search`,ref:l,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:n,onChange:e=>{r(e.target.value),a(!0)},onFocus:()=>n.length>=2&&a(!0),onKeyDown:e=>{e.key===`Enter`&&n.trim()&&d(n.trim()),e.key===`Escape`&&a(!1)},autoComplete:`off`,"aria-expanded":i,"aria-controls":`aggregate-search-results`,"aria-autocomplete":`list`}),i&&c.length>0&&(0,j.jsx)(`div`,{className:`search-results`,role:`listbox`,id:`aggregate-search-results`,children:c.map(e=>(0,j.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>d(e),role:`option`,children:[(0,j.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,j.jsxs)(`span`,{className:`search-result-body`,children:[(0,j.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,j.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,j.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Wi(e,t){return vt({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Ii(e,500,0,t,`metadata`),enabled:!!e})}function Gi(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}function Ki(e){let t=[],n=0;for(;n=4)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function Yi(e,t){return e===t?null:t}var Xi=58,Zi=360,Qi=6,$i=[1,6,24,168];function ea(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function ta(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function na(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function ra({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Wi(e,a),[c,l]=(0,A.useState)(``),[u,d]=(0,A.useState)(``),[f,p]=(0,A.useState)(`all`),[m,h]=(0,A.useState)(null),[g,_]=(0,A.useState)(0),v=(0,A.useRef)(null),y=o?.events??[],b=o?.totalEvents??0,x=(0,A.useMemo)(()=>{let e=y;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Gi(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Gi(e.timestamp).getTime()>=t)}return e},[y,c,f]),S=(0,A.useMemo)(()=>Ki(x),[x]),C=(0,A.useMemo)(()=>[...new Set(y.map(e=>e.eventType))].sort(),[y]);(0,A.useEffect)(()=>{if(t!=null){for(let e of S)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(qi(e.startIndex,e.items.length));return}h(null)}},[S,t]);let w=(0,A.useMemo)(()=>Ji(S,m,t),[m,S,t]),ee=(0,A.useMemo)(()=>t==null?-1:w.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[w,t]);(0,A.useEffect)(()=>{let e=e=>{let t=e.detail;if(w.length&&(t<0||t>0)){let e=ee>=0?ee:0;r(ta(w[Math.max(0,Math.min(w.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,w,ee]),(0,A.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!w.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=w.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,w,t]),(0,A.useEffect)(()=>{if(ee<0||!v.current)return;let e=ee*Xi,t=e+Xi;eg+Zi&&(v.current.scrollTop=t-Zi)},[g,ee]);let te=Math.max(0,Math.floor(g/Xi)-Qi),ne=Math.min(w.length,Math.ceil((g+Zi)/Xi)+Qi),T=w.slice(te,ne);if(s)return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,j.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!y.length)return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let re=x[0]?.sequenceNumber??0,ie=x[x.length-1]?.sequenceNumber??0;return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,j.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Enhanced Timeline`,(0,j.jsxs)(`span`,{className:`timeline-count-pill`,children:[x.length,` / `,b,` events`]})]}),(0,j.jsx)(`div`,{className:`timeline-jump-group`,children:(0,j.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);x.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,j.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),C.map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,j.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),$i.map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,j.jsx)(`div`,{ref:v,className:`timeline-virtual-container`,style:{position:`relative`,overflowY:`auto`,maxHeight:Zi},onScroll:e=>_(e.currentTarget.scrollTop),children:(0,j.jsx)(`div`,{style:{height:w.length*Xi,position:`relative`},children:T.map((e,a)=>{let o=(te+a)*Xi;if(e.kind===`group`)return(0,j.jsxs)(`button`,{type:`button`,className:`timeline-group-chip timeline-step-${ea(e.eventType)} ${e.containsSelection?`active`:``} ${e.expanded?`expanded`:``}`,style:{position:`absolute`,top:o,left:0,right:0,height:Xi-6},onClick:()=>h(t=>t===qi(e.startIndex,e.items.length)?null:qi(e.startIndex,e.items.length)),"aria-expanded":e.expanded,children:[(0,j.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,j.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,j.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:e.expanded?`v`:`>`})]}),(0,j.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,j.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]},e.key);let s=e.event,c=t===s.sequenceNumber,l=n===s.sequenceNumber,u=e.kind===`group-item`?` timeline-step-compact`:``;return(0,j.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${ea(s.eventType)} ${c?`active`:``} ${l?`timeline-step-compare`:``}${u}`,style:{position:`absolute`,top:o,left:0,right:0,height:Xi-6},onClick:e=>{e.shiftKey&&i?i(Yi(n,s.sequenceNumber)):r(s.sequenceNumber)},"aria-current":c?`step`:void 0,"aria-selected":c,"aria-label":na(e.stepNumber,s),children:[(0,j.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,j.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,s.sequenceNumber]}),(0,j.jsx)(`span`,{className:`timeline-step-type`,children:s.eventType}),(0,j.jsx)(`span`,{className:`timeline-step-seq`,children:Gi(s.timestamp).toLocaleTimeString()})]},e.key)})})}),(0,j.jsx)(`input`,{type:`range`,className:`timeline-slider`,min:re,max:ie,value:t??ie,onChange:e=>r(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,j.jsxs)(`div`,{className:`timeline-info`,children:[(0,j.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,re]}),(0,j.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,j.jsxs)(`span`,{className:`timeline-info-muted`,children:[` in `,w.length,` visible rows`]})]})}),(0,j.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ie]})]})]})}function ia(e,t){return vt({queryKey:[`transitions`,e,t??`default`],queryFn:()=>I(e,t),enabled:!!e})}function aa(e,t,n=!0){let[r,i]=(0,A.useState)([]),[a,o]=(0,A.useState)(0),[s,c]=(0,A.useState)(!1),l=(0,A.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,A.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-DTKMBXSt.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function oa({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,j.jsxs)(`div`,{className:`diff-panel`,children:[(0,j.jsx)(`div`,{className:`diff-toolbar`,children:(0,j.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,j.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,j.jsx)(`div`,{className:`diff-body`,children:(0,j.jsx)(`div`,{className:`diff-scroll`,children:(0,j.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,j.jsxs)(`div`,{className:`diff-split-head`,children:[(0,j.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,j.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,j.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,j.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,j.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,j.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,j.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,j.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,j.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function sa({open:e,onToggle:t}){return(0,j.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function ca({value:e}){return e===null?(0,j.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,j.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,j.jsx)(`span`,{className:`json-number`,children:e}):(0,j.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function R({value:e,changedKeys:t}){return(0,j.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,j.jsx)(la,{value:e,depth:0,changedKeys:t,keyPath:``})})}function la({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,A.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(ca,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,j.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,j.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,j.jsx)(sa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,j.jsxs)(j.Fragment,{children:[e.map((e,n)=>(0,j.jsx)(la,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,j.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,j.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,j.jsx)(sa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,j.jsxs)(j.Fragment,{children:[i.map(([e,n])=>(0,j.jsx)(la,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var ua=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function da({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,active:a=!1,onActivate:o,source:s}){let{data:c=[],isLoading:l}=ia(e,s),[u,d]=(0,A.useState)(`changes`),f=r??u,p=e=>{d(e),i?.(e)},m=c.find(e=>e.event.sequenceNumber===t)??null,h=n==null?null:c.find(e=>e.event.sequenceNumber===n)??null,g=m!=null&&h!=null&&m.event.sequenceNumber!==h.event.sequenceNumber,_=g?h.stateAfter:m?.stateBefore,v=m?.stateAfter,{patches:y,loading:b,durationMs:x}=aa(_,v,g&&!!_&&!!v),S=(0,A.useMemo)(()=>g?new Set(y.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(m?.diff??{})),[g,y,m?.diff]);return l?(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`State`}),(0,j.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):m?(0,j.jsxs)(`section`,{className:`card`,role:`region`,"aria-label":`State viewer`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,j.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,m.event.sequenceNumber,(0,j.jsx)(`span`,{className:`diff-count-badge`,children:m.event.eventType}),g&&(0,j.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,h?.event.sequenceNumber]}),g&&!b&&(0,j.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,x.toFixed(1),`ms`]})]}),(0,j.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:ua.map(e=>(0,j.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":f===e.id,className:`state-tab ${f===e.id?`active`:``}`,onClick:()=>p(e.id),children:e.label},e.id))}),(0,j.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[f===`changes`&&(0,j.jsx)(`div`,{children:g?b?(0,j.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,j.jsx)(oa,{patches:y,title:`Structural diff`}):m.diff&&Object.keys(m.diff).length>0?(0,j.jsx)(oa,{diff:m.diff}):(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),f===`before-after`&&(0,j.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,j.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,j.jsx)(`h4`,{children:g?`Event #${h?.event.sequenceNumber}`:`Before`}),(0,j.jsx)(R,{value:_??{},changedKeys:S})]}),(0,j.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,j.jsx)(`h4`,{children:g?`Event #${m.event.sequenceNumber}`:`After`}),(0,j.jsx)(R,{value:v??{},changedKeys:S})]})]}),f===`raw`&&(0,j.jsx)(`div`,{style:{marginTop:12},children:(0,j.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(g?{leftEvent:h?.event,rightEvent:m.event,leftState:_,rightState:v}:m.event,null,2)})})]})]}):null}var fa=1e3,pa=3e4;function ma(e,t,n){let r=n?.enabled??!0,[i,a]=(0,A.useState)(()=>r?`connecting`:`connected`),o=(0,A.useRef)(null),s=(0,A.useRef)(t),c=(0,A.useRef)(fa);return s.current=t,(0,A.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=fa,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,pa),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var ha=(0,A.createContext)(void 0);function ga({children:e}){let[t,n]=(0,A.useState)([]),r=(0,A.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,j.jsxs)(ha.Provider,{value:{notify:r},children:[e,(0,j.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,j.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function _a(){let e=(0,A.useContext)(ha);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function va(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function ya(e){return va(e)}var ba=100;function xa(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function Sa({source:e}){return(0,j.jsx)(Ta,{source:e})}function Ca(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function wa(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function Ta({source:e}){let t=ji(),[n,r]=(0,A.useState)(()=>t?Oi():[]),[i,a]=(0,A.useState)(!1),[o,s]=(0,A.useState)(null),c=(0,A.useRef)(null),l=(0,A.useRef)(i);l.current=i;let{notify:u}=_a();(0,A.useEffect)(()=>{s(null),r(t?Oi():[])},[e,t]);let d=ma(wa(e),e=>{if(Ca(e)){s(e.source),r([]);return}s(null),!l.current&&r(t=>[...t.slice(-(ba-1)),e])},{enabled:!t}),f=(0,A.useRef)(u);f.current=u;let p=(0,A.useRef)(0);return(0,A.useEffect)(()=>{t||(d===`disconnected`?(p.current++,p.current<=1&&f.current(`Live stream disconnected. Retrying…`)):d===`connected`&&(p.current=0))},[d,t]),(0,A.useEffect)(()=>{!i&&c.current&&(c.current.scrollTop=c.current.scrollHeight)},[n,i]),(0,A.useEffect)(()=>{let e=()=>a(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`live-header`,children:[(0,j.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,j.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,j.jsxs)(`div`,{className:`live-indicator`,children:[(0,j.jsx)(`span`,{className:`dot ${d===`connected`?`dot-green`:d===`connecting`?`dot-yellow`:`dot-red`}`}),(0,j.jsx)(`span`,{style:{color:d===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:d===`connected`?i?`Paused`:`Live`:d})]}),(0,j.jsx)(`button`,{className:`pause-btn`,onClick:()=>a(!i),children:i?`▶ Resume`:`⏸ Pause`})]})]}),(0,j.jsxs)(`div`,{className:`event-stream`,ref:c,children:[o&&(0,j.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:o?` (${o})`:``,`.`]}),n.length===0&&(0,j.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:o?null:t?`Demo stream (static sample events)`:`Waiting for events…`}),n.map(e=>(0,j.jsxs)(`div`,{className:`event-row ${ya(e.eventType)}`,children:[(0,j.jsx)(`span`,{className:`event-icon`,children:xa(e.eventType)}),(0,j.jsx)(`span`,{className:`event-time`,children:Gi(e.timestamp).toLocaleTimeString()}),(0,j.jsx)(`span`,{className:`event-type ${va(e.eventType)}`,children:e.eventType}),(0,j.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function Ea(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Da(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Oa(){return(0,j.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,j.jsx)(`defs`,{children:(0,j.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,j.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,j.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,j.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function ka({color:e}){return(0,j.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,j.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Aa({source:e}){let{data:t,isLoading:n}=vt({queryKey:[`anomalies`,e??`default`],queryFn:()=>L(100,e),refetchInterval:3e4}),r=t&&t.length>0;return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,j.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!n&&r&&(0,j.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${t.length} anomalies`,children:t.length})]}),n&&(0,j.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!n&&!r&&(0,j.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,j.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,j.jsx)(`div`,{className:`shield-icon`,children:(0,j.jsx)(Oa,{})}),(0,j.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,j.jsxs)(`div`,{className:`gauge-row`,children:[(0,j.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,j.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,j.jsx)(ka,{color:`green`})]}),(0,j.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,j.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,j.jsx)(ka,{color:`cyan`})]}),(0,j.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,j.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,j.jsx)(ka,{color:`green`})]})]})]}),!n&&r&&(0,j.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,j.jsx)(`div`,{className:`anomaly-list-inner`,children:t.map((e,t)=>(0,j.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,j.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,j.jsx)(`span`,{className:`anomaly-severity-badge ${Ea(e.severity)}`,children:Da(e.severity)}),(0,j.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,j.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,j.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),(0,j.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,j.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,j.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,j.jsx)(`span`,{className:`anomaly-meta-value`,children:Gi(e.timestamp).toLocaleString()})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,j.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${t}`))})})]})}var ja=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Ma(){let[e,t]=(0,A.useState)(!1);return(0,A.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,j.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,j.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[ja.map(e=>(0,j.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,j.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,j.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,j.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}function Na({transitions:e,selectedSequence:t,onSelectSequence:n,active:r=!1,onActivate:i}){if(!e.length)return null;let a=e.find(e=>e.event.sequenceNumber===t)??e[0],o=e.findIndex(e=>e.event.sequenceNumber===a.event.sequenceNumber);return(0,j.jsxs)(`section`,{className:`card replay-debugger`,tabIndex:0,role:`region`,"aria-label":`Replay debugger`,"aria-current":r?`page`:void 0,onFocus:i,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,j.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.max(o-1,0)].event.sequenceNumber),title:`Step backward`,"aria-label":`Replay previous event`,children:`Previous`}),(0,j.jsxs)(`div`,{className:`replay-position`,children:[`Event `,o+1,` of `,e.length]}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.min(o+1,e.length-1)].event.sequenceNumber),title:`Step forward`,"aria-label":`Replay next event`,children:`Next`})]}),(0,j.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:o,onChange:t=>n(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,j.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,j.jsx)(`h4`,{children:`Current State`}),(0,j.jsx)(R,{value:a.stateAfter,changedKeys:new Set(Object.keys(a.diff))})]})]})}function Pa(e,t=1,n=24){return vt({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>Li(e,t,n),staleTime:3e4})}function Fa({source:e}){let[t,n]=(0,A.useState)(24),{data:r,isLoading:i}=Pa(e,1,t);return(0,j.jsxs)(`section`,{className:`card statistics-panel`,role:`region`,"aria-label":`Statistics panel`,"aria-busy":i,children:[(0,j.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,j.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${t===e?`active`:``}`,onClick:()=>n(e),children:e===72?`3d`:`${e}h`},e))}),i&&(0,j.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!i&&r&&!r.available&&(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`},children:r.message??`Statistics not available.`}),!i&&r?.available&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`stats-kpis`,children:[(0,j.jsxs)(`div`,{className:`stat-card`,children:[(0,j.jsx)(`strong`,{children:r.totalEvents}),(0,j.jsx)(`span`,{children:`Total events`})]}),(0,j.jsxs)(`div`,{className:`stat-card`,children:[(0,j.jsx)(`strong`,{children:r.distinctAggregates}),(0,j.jsx)(`span`,{children:`Aggregates`})]}),(0,j.jsxs)(`div`,{className:`stat-card`,children:[(0,j.jsx)(`strong`,{children:r.eventTypes.length}),(0,j.jsx)(`span`,{children:`Event types`})]})]}),(0,j.jsx)(`div`,{className:`stats-chart`,children:r.throughput.map(e=>(0,j.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,j.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,j.jsx)(`div`,{className:`stats-bar-track`,children:(0,j.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...r.throughput.map(e=>e.count),1)*100)}%`}})}),(0,j.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,j.jsxs)(`div`,{className:`stats-distribution`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h4`,{children:`Event Types`}),r.eventTypes.map(e=>(0,j.jsxs)(`div`,{className:`stats-list-row`,children:[(0,j.jsx)(`span`,{children:e.type}),(0,j.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h4`,{children:`Aggregate Types`}),r.aggregateTypes.map(e=>(0,j.jsxs)(`div`,{className:`stats-list-row`,children:[(0,j.jsx)(`span`,{children:e.type}),(0,j.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Ia({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenStats:i,onOpenPlugins:a}){let[o,s]=(0,A.useState)(``),[c,l]=(0,A.useState)(0),[u,d]=(0,A.useState)(null),{data:f=[]}=vt({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>Fi(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,A.useEffect)(()=>{e?(l(0),d(document.activeElement instanceof HTMLElement?document.activeElement:null)):(s(``),u?.focus())},[e,u]);let p=(0,A.useMemo)(()=>{let e=[{id:`stats`,label:`Go to statistics panel`,action:i},{id:`plugins`,label:`Go to plugin health`,action:a}],t=f.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&f.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[f,a,i,r,o]);return(0,A.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(p.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),p[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[p,n,e,c]),e?(0,j.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,j.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,"aria-describedby":`command-palette-help`,onClick:e=>e.stopPropagation(),children:[(0,j.jsx)(`p`,{id:`command-palette-help`,className:`sr-only`,children:`Search aggregates, open statistics, or open plugin health. Use arrow keys to move and Enter to confirm.`}),(0,j.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,j.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,"aria-label":`Command results`,children:[p.map((e,t)=>(0,j.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),p.length===0&&(0,j.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function La({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,A.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Ra(e){let t=e.toLowerCase();return t===`ready`||t===`up`?`#00ff88`:t===`degraded`||t===`initializing`?`#ffd166`:`#ff6b6b`}function za(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Ba(e){return e.toLowerCase()===`ready`}function Va({datasources:e,datasourceHealth:t,plugins:n}){return(0,j.jsxs)(`div`,{className:`plugin-dashboard`,children:[(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Datasources`}),(0,j.jsx)(`div`,{className:`plugin-cards-grid`,children:e.map((e,n)=>{let r=t[n],i=Ra(e.status);return(0,j.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,style:{borderLeft:`3px solid ${i}`},children:[(0,j.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,j.jsx)(`strong`,{children:e.displayName}),(0,j.jsx)(`span`,{className:`plugin-pill`,style:{color:i,borderColor:`${i}55`},children:e.status})]}),(0,j.jsx)(`div`,{className:`plugin-card-meta`,children:e.id}),r&&(0,j.jsxs)(`div`,{className:`plugin-card-detail`,children:[r.health.message,r.failureReason?` | ${r.failureReason}`:``]})]},e.id)})})]}),(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`All Plugins`}),(0,j.jsx)(`div`,{className:`plugin-cards-grid plugin-cards-grid--dense`,children:n.map(e=>(0,j.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,children:[(0,j.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,j.jsx)(`strong`,{children:e.displayName}),(0,j.jsx)(`span`,{className:`plugin-pill`,style:{color:Ra(e.lifecycle),borderColor:`${Ra(e.lifecycle)}55`},children:e.lifecycle})]}),(0,j.jsxs)(`div`,{className:`plugin-card-meta`,children:[e.pluginType,` | `,e.typeId]}),(0,j.jsx)(`div`,{className:`plugin-card-meta`,children:e.instanceId}),(0,j.jsxs)(`div`,{className:`plugin-card-detail`,children:[e.health.message,e.failureReason?` | ${e.failureReason}`:``]})]},e.instanceId))})]})]})}function Ha(){let[e,t]=(0,A.useState)(`state`),[n,r]=(0,A.useState)(null),[i,a]=(0,A.useState)(null),[o,s]=(0,A.useState)(null),[c,l]=(0,A.useState)(`changes`),[u,d]=(0,A.useState)(``),[f,p]=(0,A.useState)(window.location.hash||``),[m,h]=(0,A.useState)(!1),[g,_]=(0,A.useState)(!1);(0,A.useEffect)(()=>{let e=()=>p(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,A.useEffect)(()=>{let e=e=>{let t=e.detail;t&&l(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,A.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`panel`),f=e.get(`source`);n&&r(n),i&&a(Number(i)),o&&s(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&l(c),(u===`replay`||u===`state`)&&t(u),f&&d(f)},[]),(0,A.useEffect)(()=>{let t=new URLSearchParams(window.location.search);n?t.set(`aggregateId`,n):t.delete(`aggregateId`),i==null?t.delete(`seq`):t.set(`seq`,String(i)),o==null?t.delete(`compare`):t.set(`compare`,String(o)),t.set(`tab`,c),t.set(`panel`,e),u?t.set(`source`,u):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[e,c,o,n,i,u]);let{data:v}=vt({queryKey:[`health`],queryFn:Ri,refetchInterval:3e4}),{data:y=[]}=vt({queryKey:[`datasources`],queryFn:zi,staleTime:1e4}),{data:b=[]}=vt({queryKey:[`plugins`],queryFn:Vi,staleTime:1e4}),x=gt({queries:y.map(e=>({queryKey:[`datasource-health`,e.id],queryFn:()=>Bi(e.id),staleTime:1e4}))}).map(e=>e.data),{data:S=[]}=ia(n??``,u||null),{data:C}=vt({queryKey:[`timeline-summary`,n,u||`default`],queryFn:()=>Ii(n,500,0,u||null,`metadata`),enabled:!!n,staleTime:3e4}),w=v?.status===`UP`,ee=f===`#/plugins`,te=f===`#/stats`,ne=y.filter(e=>za(e.status)).length,T=b.filter(e=>za(e.lifecycle)).length,re=y.length-ne+(b.length-T),ie=e=>{r(e),a(null),s(null),t(`state`),window.location.hash=`#/timeline`};return(0,j.jsxs)(`div`,{className:`app`,children:[(0,j.jsx)(La,{paletteOpen:g,onOpenPalette:()=>_(!0),onClosePalette:()=>_(!1)}),(0,j.jsx)(Ia,{open:g,selectedSource:u||null,onClose:()=>_(!1),onSelectAggregate:ie,onOpenStats:()=>{window.location.hash=`#/stats`},onOpenPlugins:()=>{window.location.hash=`#/plugins`}}),(0,j.jsxs)(`header`,{className:`app-header`,children:[(0,j.jsx)(`div`,{className:`brand`,children:(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,j.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,j.jsxs)(`div`,{className:`header-center`,children:[ji()&&(0,j.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,j.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,j.jsx)(`div`,{className:`header-actions`,children:(0,j.jsxs)(`div`,{className:`header-status`,children:[(0,j.jsx)(`span`,{className:`dot ${w?`dot-green`:`dot-red`}`}),(0,j.jsx)(`span`,{className:`status-text ${w?``:`offline`}`,children:w?`Connected`:v?.status??`Connecting`})]})})]}),(0,j.jsxs)(`aside`,{className:`workspace-dock${m?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,j.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!m,children:[(0,j.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,j.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,j.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,j.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:u,onChange:e=>{d(e.target.value),a(null),s(null)},children:[(0,j.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),y.map(e=>(0,j.jsxs)(`option`,{value:e.id,disabled:!Ba(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,j.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Datasources Healthy`}),(0,j.jsxs)(`strong`,{children:[ne,`/`,y.length||0]})]}),(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Plugins Healthy`}),(0,j.jsxs)(`strong`,{children:[T,`/`,b.length||0]})]}),(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Issues`}),(0,j.jsx)(`strong`,{children:re})]})]})]}),(0,j.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>h(e=>!e),"aria-expanded":m,"aria-controls":`workspace-dock-panel`,children:(0,j.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:m?`>`:`<`})})]}),(0,j.jsx)(`main`,{className:`app-main`,role:`main`,"aria-label":`EventLens workspace`,children:(0,j.jsxs)(`div`,{className:`workspace-content`,children:[!ee&&!te&&(0,j.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,j.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,j.jsx)(Ui,{onSelect:ie,source:u||null}),n&&(0,j.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,j.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:n}),u?(0,j.jsxs)(`span`,{children:[` on `,u]}):(0,j.jsx)(`span`,{children:` on primary datasource`}),o!=null&&(0,j.jsxs)(`span`,{children:[` comparing with seq #`,o]}),(0,j.jsxs)(`span`,{className:`sr-only`,"aria-live":`polite`,children:[`Current panel `,e]}),(0,j.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{r(null),a(null),s(null)},children:`× clear`})]})]}),ee?(0,j.jsx)(Va,{datasources:y,datasourceHealth:x,plugins:b}):te?(0,j.jsx)(Fa,{source:u||null}):(0,j.jsxs)(j.Fragment,{children:[n&&(0,j.jsx)(ra,{aggregateId:n,selectedSequence:i,compareSequence:o,onSelectEvent:e=>{a(e),t(`state`)},onSelectCompare:s,source:u||null}),n&&i!==null&&(0,j.jsx)(da,{aggregateId:n,sequence:i,compareSequence:o,activeTab:c,onTabChange:e=>{l(e),t(`state`)},active:e===`state`,onActivate:()=>t(`state`),source:u||null}),n&&S.length>0&&(0,j.jsx)(Na,{transitions:S,selectedSequence:i,onSelectSequence:e=>{a(e),t(`replay`)},active:e===`replay`,onActivate:()=>t(`replay`)}),(0,j.jsxs)(`div`,{className:`bottom-grid`,children:[(0,j.jsx)(Sa,{source:u||null}),(0,j.jsx)(Aa,{source:u||null})]}),n&&C&&(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,j.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[C.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,j.jsx)(Ma,{})]})}var Ua=class extends A.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,j.jsx)(`div`,{className:`app`,children:(0,j.jsx)(`main`,{className:`app-main`,children:(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Wa=new Qe({defaultOptions:{queries:{staleTime:3e4,retry:2}}});fi.createRoot(document.getElementById(`root`)).render((0,j.jsx)(A.StrictMode,{children:(0,j.jsx)(rt,{client:Wa,children:(0,j.jsx)(ga,{children:(0,j.jsx)(Ua,{children:(0,j.jsx)(Ha,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js b/eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js deleted file mode 100644 index abbcc76..0000000 --- a/eventlens-api/src/main/resources/web/assets/index-DNgDBNrF.js +++ /dev/null @@ -1,14 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():S=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function k(e,t){fe++,de[fe]=e.current,e.current=t}var me=pe(null),he=pe(null),ge=pe(null),_e=pe(null);function ve(e,t){switch(k(ge,t),k(he,e),k(me,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}O(me),k(me,e)}function ye(){O(me),O(he),O(ge)}function be(e){e.memoizedState!==null&&k(_e,e);var t=me.current,n=Hd(t,e.type);t!==n&&(k(he,e),k(me,n))}function xe(e){he.current===e&&(O(me),O(he)),_e.current===e&&(O(_e),Qf._currentValue=ue)}var Se,A;function Ce(e){if(Se===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Se=t&&t[1]||``,A=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{we=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ce(n):``}function Ee(e,t){switch(e.tag){case 26:case 27:case 5:return Ce(e.type);case 16:return Ce(`Lazy`);case 13:return e.child!==t&&t!==null?Ce(`Suspense Fallback`):Ce(`Suspense`);case 19:return Ce(`SuspenseList`);case 0:case 15:return Te(e.type,!1);case 11:return Te(e.type.render,!1);case 1:return Te(e.type,!0);case 31:return Ce(`Activity`);default:return``}}function De(e){try{var t=``,n=null;do t+=Ee(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var Oe=Object.prototype.hasOwnProperty,ke=t.unstable_scheduleCallback,Ae=t.unstable_cancelCallback,je=t.unstable_shouldYield,Me=t.unstable_requestPaint,Ne=t.unstable_now,Pe=t.unstable_getCurrentPriorityLevel,Fe=t.unstable_ImmediatePriority,Ie=t.unstable_UserBlockingPriority,Le=t.unstable_NormalPriority,Re=t.unstable_LowPriority,ze=t.unstable_IdlePriority,Be=t.log,Ve=t.unstable_setDisableYieldValue,He=null,Ue=null;function We(e){if(typeof Be==`function`&&Ve(e),Ue&&typeof Ue.setStrictMode==`function`)try{Ue.setStrictMode(He,e)}catch{}}var Ge=Math.clz32?Math.clz32:Je,Ke=Math.log,qe=Math.LN2;function Je(e){return e>>>=0,e===0?32:31-(Ke(e)/qe|0)|0}var Ye=256,Xe=262144,Ze=4194304;function Qe(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function $e(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Qe(n))):i=Qe(o):i=Qe(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Qe(n))):i=Qe(o)):i=Qe(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function j(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function M(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function et(){var e=Ze;return Ze<<=1,!(Ze&62914560)&&(Ze=4194304),e}function tt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function nt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function rt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),hn=!1;if(mn)try{var gn={};Object.defineProperty(gn,`passive`,{get:function(){hn=!0}}),window.addEventListener(`test`,gn,gn),window.removeEventListener(`test`,gn,gn)}catch{hn=!1}var _n=null,vn=null,yn=null;function bn(){if(yn)return yn;var e,t=vn,n=t.length,r,i=`value`in _n?_n.value:_n.textContent,a=i.length;for(e=0;e=Xn),$n=` `,er=!1;function tr(e,t){switch(e){case`keyup`:return Jn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function nr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var rr=!1;function ir(e,t){switch(e){case`compositionend`:return nr(t);case`keypress`:return t.which===32?(er=!0,$n):null;case`textInput`:return e=t.data,e===$n&&er?null:e;default:return null}}function ar(e,t){if(rr)return e===`compositionend`||!Yn&&tr(e,t)?(e=bn(),yn=vn=_n=null,rr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Dr(n)}}function kr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?kr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ar(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Vt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Vt(e.document)}return t}function jr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Mr=mn&&`documentMode`in document&&11>=document.documentMode,Nr=null,Pr=null,Fr=null,Ir=!1;function Lr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ir||Nr==null||Nr!==Vt(r)||(r=Nr,`selectionStart`in r&&jr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Fr&&Er(Fr,r)||(Fr=r,r=Ed(Pr,`onSelect`),0>=o,i-=o,Oi=1<<32-Ge(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),R&&Ai(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),R&&Ai(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return R&&Ai(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),R&&Ai(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&Oa(l)===r.type){n(e,r.sibling),c=a(r,o.props),Fa(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=hi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=mi(o.type,o.key,o.props,null,e.mode,c),Fa(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=vi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=Oa(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Pa(o),c);if(o.$$typeof===C)return b(e,r,ra(e,o),c);Ia(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=gi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Na=0;var i=b(e,t,n,r);return Ma=null,i}catch(t){if(t===Sa||t===wa)throw t;var a=I(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ra=La(!0),za=La(!1),Ba=!1;function Va(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ha(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ua(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ci(e),si(e,null,n),t}return ii(e,r,t,n),ci(e)}function Ga(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,at(e,n)}}function Ka(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var qa=!1;function Ja(){if(qa){var e=pa;if(e!==null)throw e}}function Ya(e,t,n,r){qa=!1;var i=e.updateQueue;Ba=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===fa&&(qa=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Ba=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Xa(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Za(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Fs(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ps(e,t,ga(c,r),pu(e)):Ps(e,t,r,pu(e))}catch(n){Ps(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function ws(){}function Ts(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Es(e).queue;Cs(e,a,t,ue,n===null?ws:function(){return Ds(e),n(r)})}function Es(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ds(e){var t=Es(e);t.next===null&&(t=e.alternate.memoizedState),Ps(e,t.next.queue,{},pu())}function Os(){return na(Qf)}function ks(){return jo().memoizedState}function As(){return jo().memoizedState}function js(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Ua(n);var r=Wa(t,e,n);r!==null&&(hu(r,t,n),Ga(r,t,n)),t={cache:ca()},e.payload=t;return}t=t.return}}function Ms(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Is(e)?Ls(t,n):(n=ai(e,t,n,r),n!==null&&(hu(n,e,r),Rs(n,t,r)))}function Ns(e,t,n){Ps(e,t,n,pu())}function Ps(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Is(e))Ls(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Tr(s,o))return ii(e,t,i,0),K===null&&ri(),!1}catch{}if(n=ai(e,t,i,r),n!==null)return hu(n,e,r),Rs(n,t,r),!0}return!1}function Fs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Is(e)){if(t)throw Error(i(479))}else t=ai(e,n,r,2),t!==null&&hu(t,e,2)}function Is(e){var t=e.alternate;return e===B||t!==null&&t===B}function Ls(e,t){go=ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Rs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,at(e,n)}}var zs={readContext:na,use:Po,useCallback:H,useContext:H,useEffect:H,useImperativeHandle:H,useLayoutEffect:H,useInsertionEffect:H,useMemo:H,useReducer:H,useRef:H,useState:H,useDebugValue:H,useDeferredValue:H,useTransition:H,useSyncExternalStore:H,useId:H,useHostTransitionStatus:H,useFormState:H,useActionState:H,useOptimistic:H,useMemoCache:H,useCacheRefresh:H};zs.useEffectEvent=H;var Bs={readContext:na,use:Po,useCallback:function(e,t){return Ao().memoizedState=[e,t===void 0?null:t],e},useContext:na,useEffect:us,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),cs(4194308,4,gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cs(4194308,4,e,t)},useInsertionEffect:function(e,t){cs(4,2,e,t)},useMemo:function(e,t){var n=Ao();t=t===void 0?null:t;var r=e();if(_o){We(!0);try{e()}finally{We(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Ao();if(n!==void 0){var i=n(t);if(_o){We(!0);try{n(t)}finally{We(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ms.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Ao();return e={current:e},t.memoizedState=e},useState:function(e){e=Ko(e);var t=e.queue,n=Ns.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:vs,useDeferredValue:function(e,t){return xs(Ao(),e,t)},useTransition:function(){var e=Ko(!1);return e=Cs.bind(null,B,e.queue,!0,!1),Ao().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=Ao();if(R){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Vo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,us(Uo.bind(null,r,o,e),[e]),r.flags|=2048,os(9,{destroy:void 0},Ho.bind(null,r,o,n,t),null),n},useId:function(){var e=Ao(),t=K.identifierPrefix;if(R){var n=ki,r=Oi;n=(r&~(1<<32-Ge(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=vo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[ft]=t,o[pt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Pc(t)}}return U(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Pc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ge.current,Hi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Fi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[ft]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||zi(t,!0)}else e=Bd(e).createTextNode(r),e[ft]=t,t.stateNode=e}return U(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Hi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[ft]=t}else Ui(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),e=!1}else n=Wi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(lo(t),t):(lo(t),null);if(t.flags&128)throw Error(i(558))}return U(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Hi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[ft]=t}else Ui(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),a=!1}else a=Wi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(lo(t),t):(lo(t),null)}return lo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Lc(t,t.updateQueue),U(t),null);case 4:return ye(),e===null&&Sd(t.stateNode.containerInfo),U(t),null;case 10:return Xi(t.type),U(t),null;case 19:if(O(uo),r=t.memoizedState,r===null)return U(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Rc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,Rc(r,!1),e=o.updateQueue,t.updateQueue=e,Lc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)pi(n,e),n=n.sibling;return k(uo,uo.current&1|2),R&&Ai(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ne()>tu&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Lc(t,e),Rc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!R)return U(t),null}else 2*Ne()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(U(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ne(),e.sibling=null,n=uo.current,k(uo,a?n&1|2:n&1),R&&Ai(t,r.treeForkCount),e);case 22:case 23:return lo(t),no(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(U(t),t.subtreeFlags&6&&(t.flags|=8192)):U(t),n=t.updateQueue,n!==null&&Lc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&O(va),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Xi(z),U(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Ni(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Xi(z),ye(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return xe(t),null;case 31:if(t.memoizedState!==null){if(lo(t),t.alternate===null)throw Error(i(340));Ui()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(lo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ui()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return O(uo),null;case 4:return ye(),null;case 10:return Xi(t.type),null;case 22:case 23:return lo(t),no(),e!==null&&O(va),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Xi(z),null;case 25:return null;default:return null}}function Vc(e,t){switch(Ni(t),t.tag){case 3:Xi(z),ye();break;case 26:case 27:case 5:xe(t);break;case 4:ye();break;case 31:t.memoizedState!==null&&lo(t);break;case 13:lo(t);break;case 19:O(uo);break;case 10:Xi(t.type);break;case 22:case 23:lo(t),no(),e!==null&&O(va);break;case 24:Xi(z)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Za(t,n)}catch(t){Z(e,e.return,t)}}}function Gc(e,t,n){n.props=qs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[pt]=t}catch(t){Z(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=an));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[ft]=e,t[pt]=n}catch(t){Z(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=Ar(e),jr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[ft]=e,N(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Or(s,h),v=Or(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),Ue&&typeof Ue.onPostCommitFiberRoot==`function`)try{Ue.onPostCommitFiberRoot(He,o)}catch{}return!0}finally{D.p=a,E.T=r,Vu(e,t)}}function Wu(e,t,n){t=bi(n,t),t=$s(e.stateNode,t,2),e=Wa(e,t,2),e!==null&&(nt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=bi(n,e),n=ec(2),r=Wa(t,n,2),r!==null&&(tc(n,r,t,e),nt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Ne()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=et()),e=oi(e,t),e!==null&&(nt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return ke(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ge(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=$e(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||j(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Ne(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Ut(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),N(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ut(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ut(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ut(n.imageSizes)+`"]`)):i+=`[href="`+Ut(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),N(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ut(r)+`"][href="`+Ut(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),N(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=wt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);N(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=wt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),N(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=wt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),N(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=ge.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=wt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=wt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=wt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Ut(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),N(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Ut(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ut(n.href)+`"]`);if(r)return t.instance=r,N(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),N(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,N(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),N(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,N(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),N(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,N(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),N(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},b={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},x=new class{#e=b;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function S(e){setTimeout(e,0)}var C=typeof window>`u`||`Deno`in globalThis;function w(){}function ee(e,t){return typeof e==`function`?e(t):e}function te(e){return typeof e==`number`&&e>=0&&e!==1/0}function ne(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){return typeof e==`function`?e(t):e}function ie(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==oe(o,t.options))return!1}else if(!ce(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ae(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(se(t.options.mutationKey)!==se(a))return!1}else if(!ce(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function oe(e,t){return(t?.queryKeyHashFn||se)(e)}function se(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ce(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>ce(e[n],t[n])):!1}var le=Object.prototype.hasOwnProperty;function E(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{x.setTimeout(t,e)})}function O(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function k(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function me(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var he=Symbol();function ge(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===he?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function _e(e,t){return typeof e==`function`?e(...t):!!e}function ve(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var ye=(()=>{let e=()=>C;return{isServer(){return e()},setIsServer(t){e=t}}})();function be(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var xe=S;function Se(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=xe,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var A=Se(),Ce=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function we(e){return Math.min(1e3*2**e,3e4)}function Te(e){return(e??`online`)===`online`?Ce.isOnline():!0}var Ee=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function De(e){let t=!1,n=0,r,i=be(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Ee(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>y.isFocused()&&(e.networkMode===`always`||Ce.isOnline())&&e.canRun(),u=()=>Te(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(ye.isServer()?0:3),o=e.retryDelay??we,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var Oe=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),te(this.gcTime)&&(this.#e=x.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(ye.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e&&=(x.clearTimeout(this.#e),void 0)}},ke=class extends Oe{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Me(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Me(this.options);e.data!==void 0&&(this.setState(je(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=O(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#c({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(w).catch(w):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>re(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===he||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>T(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!ne(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o||this.#s()?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#s(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=ge(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=De({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Ee&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Ee){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#c(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Ae(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...je(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),A.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function Ae(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Te(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function je(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Me(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ne=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=be(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Fe(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Ie(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Ie(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof re(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Le(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return ze(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(w)),t}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(ye.isServer()||this.#r.isStale||!te(e))return;let t=ne(this.#r.dataUpdatedAt,e)+1;this.#d=x.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(ye.isServer()||re(this.options.enabled,this.#t)===!1||!te(this.#p)||this.#p===0)&&(this.#f=x.setInterval(()=>{(this.options.refetchIntervalInBackground||y.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d&&=(x.clearTimeout(this.#d),void 0)}#x(){this.#f&&=(x.clearInterval(this.#f),void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Fe(e,t),o=i&&Le(e,n,t,r);(a||o)&&(l={...l,...Ae(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=O(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=O(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Re(e,t),refetch:this.refetch,promise:this.#o,isEnabled:re(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=be())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!D(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){A.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Pe(e,t){return re(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Fe(e,t){return Pe(e,t)||e.state.data!==void 0&&Ie(e,t,t.refetchOnMount)}function Ie(e,t,n){if(re(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Re(e,t)}return!1}function Le(e,t,n,r){return(e!==t||re(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Re(e,n)}function Re(e,t){return re(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}function ze(e,t){return!D(e.getCurrentResult(),t)}function Be(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ve(e,()=>t.signal,()=>n=!0)},u=ge(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?me:k;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?He:Ve,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Ve(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function Ve(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function He(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Ue=class extends Oe{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||We(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=De({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),A.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function We(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Ge=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ue({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=Ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){A.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ae(t,e))}findAll(e={}){return this.getAll().filter(t=>ae(e,t))}notify(e){A.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return A.batch(()=>Promise.all(e.map(e=>e.continue().catch(w))))}};function Ke(e){return e.options.scope?.id}function qe(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Je(e,t,n){let r=e.slice(0);return r[t]=n,r}var Ye=class extends v{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,A.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!D(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(qe(e,n).forEach(e=>{e.destroy()}),qe(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=E(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new Ne(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Je(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&A.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Xe=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??oe(r,t),a=this.get(i);return a||(a=new ke({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){A.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ie(e,t)):t}notify(e){A.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){A.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){A.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Ze=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Xe,this.#t=e.mutationCache||new Ge,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Ce.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(T(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=ee(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return A.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;A.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return A.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=A.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(w).catch(w)}invalidateQueries(e,t={}){return A.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=A.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(w)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(w)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(T(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(w).catch(w)}fetchInfiniteQuery(e){return e.behavior=Be(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(w).catch(w)}ensureInfiniteQueryData(e){return e.behavior=Be(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Ce.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(se(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(se(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=oe(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===he&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Qe=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),$e=o(((e,t)=>{t.exports=Qe()})),j=l(d(),1),M=$e(),et=j.createContext(void 0),tt=e=>{let t=j.useContext(et);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},nt=({client:e,children:t})=>(j.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,M.jsx)(et.Provider,{value:e,children:t})),rt=j.createContext(!1),it=()=>j.useContext(rt);rt.Provider;function at(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var ot=j.createContext(at()),st=()=>j.useContext(ot),ct=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?_e(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},lt=e=>{j.useEffect(()=>{e.clearReset()},[e])},ut=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||_e(n,[e.error,r])),dt=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},ft=(e,t)=>e.isLoading&&e.isFetching&&!t,pt=(e,t)=>e?.suspense&&t.isPending,mt=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function ht({queries:e,...t},n){let r=tt(n),i=it(),a=st(),o=j.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{dt(e),ct(e,a,r.getQueryCache().get(e.queryHash))}),lt(a);let[s]=j.useState(()=>new Ye(r,o,t)),[c,l,u]=s.getOptimisticResult(o,t.combine),d=!i&&t.subscribed!==!1;j.useSyncExternalStore(j.useCallback(e=>d?s.subscribe(A.batchCalls(e)):w,[s,d]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),j.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let f=c.some((e,t)=>pt(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&pt(n,e)?mt(n,new Ne(r,n),a):[]}):[];if(f.length>0)throw Promise.all(f);let p=c.find((e,t)=>{let n=o[t];return n&&ut({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(p?.error)throw p.error;return l(u())}function gt(e,t,n){let r=it(),i=st(),a=tt(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,dt(o),ct(o,i,s),lt(i);let c=!a.getQueryCache().get(o.queryHash),[l]=j.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(j.useSyncExternalStore(j.useCallback(e=>{let t=d?l.subscribe(A.batchCalls(e)):w;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),j.useEffect(()=>{l.setOptions(o)},[o,l]),pt(o,u))throw mt(o,l,i);if(ut({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!ye.isServer()&&ft(u,r)&&(c?mt(o,l,i):s?.promise)?.catch(w).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function _t(e,t){return gt(e,Ne,t)}function vt(e,t){return function(){return e.apply(t,arguments)}}var{toString:yt}=Object.prototype,{getPrototypeOf:bt}=Object,{iterator:xt,toStringTag:St}=Symbol,Ct=(e=>t=>{let n=yt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),wt=e=>(e=e.toLowerCase(),t=>Ct(t)===e),N=e=>t=>typeof t===e,{isArray:Tt}=Array,Et=N(`undefined`);function Dt(e){return e!==null&&!Et(e)&&e.constructor!==null&&!Et(e.constructor)&&jt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Ot=wt(`ArrayBuffer`);function kt(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ot(e.buffer),t}var At=N(`string`),jt=N(`function`),Mt=N(`number`),Nt=e=>typeof e==`object`&&!!e,Pt=e=>e===!0||e===!1,Ft=e=>{if(Ct(e)!==`object`)return!1;let t=bt(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(St in e)&&!(xt in e)},It=e=>{if(!Nt(e)||Dt(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Lt=wt(`Date`),Rt=wt(`File`),zt=e=>!!(e&&e.uri!==void 0),Bt=e=>e&&e.getParts!==void 0,Vt=wt(`Blob`),Ht=wt(`FileList`),Ut=e=>Nt(e)&&jt(e.pipe);function Wt(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var Gt=Wt(),Kt=Gt.FormData===void 0?void 0:Gt.FormData,qt=e=>{let t;return e&&(Kt&&e instanceof Kt||jt(e.append)&&((t=Ct(e))===`formdata`||t===`object`&&jt(e.toString)&&e.toString()===`[object FormData]`))},Jt=wt(`URLSearchParams`),[Yt,Xt,Zt,Qt]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(wt),$t=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function en(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),Tt(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}var nn=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,rn=e=>!Et(e)&&e!==nn;function an(){let{caseless:e,skipUndefined:t}=rn(this)&&this||{},n={},r=(r,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=e&&tn(n,i)||i;Ft(n[a])&&Ft(r)?n[a]=an(n[a],r):Ft(r)?n[a]=an({},r):Tt(r)?n[a]=r.slice():(!t||!Et(r))&&(n[a]=r)};for(let e=0,t=arguments.length;e(en(t,(t,r)=>{n&&jt(t)?Object.defineProperty(e,r,{value:vt(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),sn=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),cn=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{value:t.prototype}),n&&Object.assign(e.prototype,n)},ln=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&bt(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},un=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},dn=e=>{if(!e)return null;if(Tt(e))return e;let t=e.length;if(!Mt(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},fn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&bt(Uint8Array)),pn=(e,t)=>{let n=(e&&e[xt]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},mn=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},hn=wt(`HTMLFormElement`),gn=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),_n=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),vn=wt(`RegExp`),yn=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};en(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},bn=e=>{yn(e,(t,n)=>{if(jt(e)&&[`arguments`,`caller`,`callee`].indexOf(n)!==-1)return!1;let r=e[n];if(jt(r)){if(t.enumerable=!1,`writable`in t){t.writable=!1;return}t.set||=()=>{throw Error(`Can not rewrite read-only method '`+n+`'`)}}})},xn=(e,t)=>{let n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Tt(e)?r(e):r(String(e).split(t)),n},Sn=()=>{},Cn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function wn(e){return!!(e&&jt(e.append)&&e[St]===`FormData`&&e[xt])}var Tn=e=>{let t=Array(10),n=(e,r)=>{if(Nt(e)){if(t.indexOf(e)>=0)return;if(Dt(e))return e;if(!(`toJSON`in e)){t[r]=e;let i=Tt(e)?[]:{};return en(e,(e,t)=>{let a=n(e,r+1);!Et(a)&&(i[t]=a)}),t[r]=void 0,i}}return e};return n(e,0)},En=wt(`AsyncFunction`),Dn=e=>e&&(Nt(e)||jt(e))&&jt(e.then)&&jt(e.catch),On=((e,t)=>e?setImmediate:t?((e,t)=>(nn.addEventListener(`message`,({source:n,data:r})=>{n===nn&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),nn.postMessage(e,`*`)}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate==`function`,jt(nn.postMessage)),P={isArray:Tt,isArrayBuffer:Ot,isBuffer:Dt,isFormData:qt,isArrayBufferView:kt,isString:At,isNumber:Mt,isBoolean:Pt,isObject:Nt,isPlainObject:Ft,isEmptyObject:It,isReadableStream:Yt,isRequest:Xt,isResponse:Zt,isHeaders:Qt,isUndefined:Et,isDate:Lt,isFile:Rt,isReactNativeBlob:zt,isReactNative:Bt,isBlob:Vt,isRegExp:vn,isFunction:jt,isStream:Ut,isURLSearchParams:Jt,isTypedArray:fn,isFileList:Ht,forEach:en,merge:an,extend:on,trim:$t,stripBOM:sn,inherits:cn,toFlatObject:ln,kindOf:Ct,kindOfTest:wt,endsWith:un,toArray:dn,forEachEntry:pn,matchAll:mn,isHTMLForm:hn,hasOwnProperty:_n,hasOwnProp:_n,reduceDescriptors:yn,freezeMethods:bn,toObjectSet:xn,toCamelCase:gn,noop:Sn,toFiniteNumber:Cn,findKey:tn,global:nn,isContextDefined:rn,isSpecCompliantForm:wn,toJSONObject:Tn,isAsyncFn:En,isThenable:Dn,setImmediate:On,asap:typeof queueMicrotask<`u`?queueMicrotask.bind(nn):typeof process<`u`&&process.nextTick||On,isIterable:e=>e!=null&&jt(e[xt])},F=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:P.toJSONObject(this.config),code:this.code,status:this.status}}};F.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,F.ERR_BAD_OPTION=`ERR_BAD_OPTION`,F.ECONNABORTED=`ECONNABORTED`,F.ETIMEDOUT=`ETIMEDOUT`,F.ERR_NETWORK=`ERR_NETWORK`,F.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,F.ERR_DEPRECATED=`ERR_DEPRECATED`,F.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,F.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,F.ERR_CANCELED=`ERR_CANCELED`,F.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,F.ERR_INVALID_URL=`ERR_INVALID_URL`;function kn(e){return P.isPlainObject(e)||P.isArray(e)}function An(e){return P.endsWith(e,`[]`)?e.slice(0,-2):e}function jn(e,t,n){return e?e.concat(t).map(function(e,t){return e=An(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function Mn(e){return P.isArray(e)&&!e.some(kn)}var Nn=P.toFlatObject(P,{},null,function(e){return/^is[A-Z]/.test(e)});function Pn(e,t,n){if(!P.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=P.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!P.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||l,a=n.dots,o=n.indexes,s=(n.Blob||typeof Blob<`u`&&Blob)&&P.isSpecCompliantForm(t);if(!P.isFunction(i))throw TypeError(`visitor must be a function`);function c(e){if(e===null)return``;if(P.isDate(e))return e.toISOString();if(P.isBoolean(e))return e.toString();if(!s&&P.isBlob(e))throw new F(`Blob is not supported. Use a Buffer instead.`);return P.isArrayBuffer(e)||P.isTypedArray(e)?s&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function l(e,n,i){let s=e;if(P.isReactNative(t)&&P.isReactNativeBlob(e))return t.append(jn(i,n,a),c(e)),!1;if(e&&!i&&typeof e==`object`){if(P.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(P.isArray(e)&&Mn(e)||(P.isFileList(e)||P.endsWith(n,`[]`))&&(s=P.toArray(e)))return n=An(n),s.forEach(function(e,r){!(P.isUndefined(e)||e===null)&&t.append(o===!0?jn([n],r,a):o===null?n:n+`[]`,c(e))}),!1}return kn(e)?!0:(t.append(jn(i,n,a),c(e)),!1)}let u=[],d=Object.assign(Nn,{defaultVisitor:l,convertValue:c,isVisitable:kn});function f(e,n){if(!P.isUndefined(e)){if(u.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));u.push(e),P.forEach(e,function(e,r){(!(P.isUndefined(e)||e===null)&&i.call(t,e,P.isString(r)?r.trim():r,n,d))===!0&&f(e,n?n.concat(r):[r])}),u.pop()}}if(!P.isObject(e))throw TypeError(`data must be an object`);return f(e),t}function Fn(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`,"%00":`\0`};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function In(e,t){this._pairs=[],e&&Pn(e,this,t)}var Ln=In.prototype;Ln.append=function(e,t){this._pairs.push([e,t])},Ln.toString=function(e){let t=e?function(t){return e.call(this,t,Fn)}:Fn;return this._pairs.map(function(e){return t(e[0])+`=`+t(e[1])},``).join(`&`)};function Rn(e){return encodeURIComponent(e).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`).replace(/%20/g,`+`)}function zn(e,t,n){if(!t)return e;let r=n&&n.encode||Rn,i=P.isFunction(n)?{serialize:n}:n,a=i&&i.serialize,o;if(o=a?a(t,i):P.isURLSearchParams(t)?t.toString():new In(t,i).toString(r),o){let t=e.indexOf(`#`);t!==-1&&(e=e.slice(0,t)),e+=(e.indexOf(`?`)===-1?`?`:`&`)+o}return e}var Bn=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&=[]}forEach(e){P.forEach(this.handlers,function(t){t!==null&&e(t)})}},Vn={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Hn={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<`u`?URLSearchParams:In,FormData:typeof FormData<`u`?FormData:null,Blob:typeof Blob<`u`?Blob:null},protocols:[`http`,`https`,`file`,`blob`,`url`,`data`]},Un=s({hasBrowserEnv:()=>Wn,hasStandardBrowserEnv:()=>Kn,hasStandardBrowserWebWorkerEnv:()=>qn,navigator:()=>Gn,origin:()=>Jn}),Wn=typeof window<`u`&&typeof document<`u`,Gn=typeof navigator==`object`&&navigator||void 0,Kn=Wn&&(!Gn||[`ReactNative`,`NativeScript`,`NS`].indexOf(Gn.product)<0),qn=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope&&typeof self.importScripts==`function`,Jn=Wn&&window.location.href||`http://localhost`,Yn={...Un,...Hn};function Xn(e,t){return Pn(e,new Yn.classes.URLSearchParams,{visitor:function(e,t,n,r){return Yn.isNode&&P.isBuffer(e)?(this.append(t,e.toString(`base64`)),!1):r.defaultVisitor.apply(this,arguments)},...t})}function Zn(e){return P.matchAll(/\w+|\[(\w*)]/g,e).map(e=>e[0]===`[]`?``:e[1]||e[0])}function Qn(e){let t={},n=Object.keys(e),r,i=n.length,a;for(r=0;r=e.length;return a=!a&&P.isArray(r)?r.length:a,s?(P.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!o):((!r[a]||!P.isObject(r[a]))&&(r[a]=[]),t(e,n,r[a],i)&&P.isArray(r[a])&&(r[a]=Qn(r[a])),!o)}if(P.isFormData(e)&&P.isFunction(e.entries)){let n={};return P.forEachEntry(e,(e,r)=>{t(Zn(e),r,n,0)}),n}return null}function er(e,t,n){if(P.isString(e))try{return(t||JSON.parse)(e),P.trim(e)}catch(e){if(e.name!==`SyntaxError`)throw e}return(n||JSON.stringify)(e)}var tr={transitional:Vn,adapter:[`xhr`,`http`,`fetch`],transformRequest:[function(e,t){let n=t.getContentType()||``,r=n.indexOf(`application/json`)>-1,i=P.isObject(e);if(i&&P.isHTMLForm(e)&&(e=new FormData(e)),P.isFormData(e))return r?JSON.stringify($n(e)):e;if(P.isArrayBuffer(e)||P.isBuffer(e)||P.isStream(e)||P.isFile(e)||P.isBlob(e)||P.isReadableStream(e))return e;if(P.isArrayBufferView(e))return e.buffer;if(P.isURLSearchParams(e))return t.setContentType(`application/x-www-form-urlencoded;charset=utf-8`,!1),e.toString();let a;if(i){if(n.indexOf(`application/x-www-form-urlencoded`)>-1)return Xn(e,this.formSerializer).toString();if((a=P.isFileList(e))||n.indexOf(`multipart/form-data`)>-1){let t=this.env&&this.env.FormData;return Pn(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||r?(t.setContentType(`application/json`,!1),er(e)):e}],transformResponse:[function(e){let t=this.transitional||tr.transitional,n=t&&t.forcedJSONParsing,r=this.responseType===`json`;if(P.isResponse(e)||P.isReadableStream(e))return e;if(e&&P.isString(e)&&(n&&!this.responseType||r)){let n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n)throw e.name===`SyntaxError`?F.from(e,F.ERR_BAD_RESPONSE,this,null,this.response):e}}return e}],timeout:0,xsrfCookieName:`XSRF-TOKEN`,xsrfHeaderName:`X-XSRF-TOKEN`,maxContentLength:-1,maxBodyLength:-1,env:{FormData:Yn.classes.FormData,Blob:Yn.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:`application/json, text/plain, */*`,"Content-Type":void 0}}};P.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`],e=>{tr.headers[e]={}});var nr=P.toObjectSet([`age`,`authorization`,`content-length`,`content-type`,`etag`,`expires`,`from`,`host`,`if-modified-since`,`if-unmodified-since`,`last-modified`,`location`,`max-forwards`,`proxy-authorization`,`referer`,`retry-after`,`user-agent`]),rr=e=>{let t={},n,r,i;return e&&e.split(` -`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&nr[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t},ir=Symbol(`internals`);function ar(e){return e&&String(e).trim().toLowerCase()}function or(e){return e===!1||e==null?e:P.isArray(e)?e.map(or):String(e)}function sr(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var cr=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function lr(e,t,n,r,i){if(P.isFunction(r))return r.call(this,t,n);if(i&&(t=n),P.isString(t)){if(P.isString(r))return t.indexOf(r)!==-1;if(P.isRegExp(r))return r.test(t)}}function ur(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function dr(e,t){let n=P.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var fr=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=ar(t);if(!i)throw Error(`header name must be a non-empty string`);let a=P.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=or(e))}let a=(e,t)=>P.forEach(e,(e,n)=>i(e,n,t));if(P.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(P.isString(e)&&(e=e.trim())&&!cr(e))a(rr(e),t);else if(P.isObject(e)&&P.isIterable(e)){let n={},r,i;for(let t of e){if(!P.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?P.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=ar(e),e){let n=P.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return sr(e);if(P.isFunction(t))return t.call(this,e,n);if(P.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=ar(e),e){let n=P.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||lr(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=ar(e),e){let i=P.findKey(n,e);i&&(!t||lr(n,n[i],i,t))&&(delete n[i],r=!0)}}return P.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||lr(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return P.forEach(this,(r,i)=>{let a=P.findKey(n,i);if(a){t[a]=or(r),delete t[i];return}let o=e?ur(i):String(i).trim();o!==i&&delete t[i],t[o]=or(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return P.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&P.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(` -`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[ir]=this[ir]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=ar(e);t[r]||(dr(n,e),t[r]=!0)}return P.isArray(e)?e.forEach(r):r(e),this}};fr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),P.reduceDescriptors(fr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),P.freezeMethods(fr);function pr(e,t){let n=this||tr,r=t||n,i=fr.from(r.headers),a=r.data;return P.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function mr(e){return!!(e&&e.__CANCEL__)}var hr=class extends F{constructor(e,t,n){super(e??`canceled`,F.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function gr(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new F(`Request failed with status code `+n.status,[F.ERR_BAD_REQUEST,F.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function _r(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function vr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var br=(e,t,n=3)=>{let r=0,i=vr(50,250);return yr(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},xr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Sr=e=>(...t)=>P.asap(()=>e(...t)),Cr=Yn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Yn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Yn.origin),Yn.navigator&&/(msie|trident)/i.test(Yn.navigator.userAgent)):()=>!0,wr=Yn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];P.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),P.isString(r)&&s.push(`path=${r}`),P.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),P.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Tr(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Er(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function Dr(e,t,n){let r=!Tr(t);return e&&(r||n==0)?Er(e,t):t}var Or=e=>e instanceof fr?{...e}:e;function kr(e,t){t||={};let n={};function r(e,t,n,r){return P.isPlainObject(e)&&P.isPlainObject(t)?P.merge.call({caseless:r},e,t):P.isPlainObject(t)?P.merge({},t):P.isArray(t)?t.slice():t}function i(e,t,n,i){if(!P.isUndefined(t))return r(e,t,n,i);if(!P.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!P.isUndefined(t))return r(void 0,t)}function o(e,t){if(!P.isUndefined(t))return r(void 0,t);if(!P.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(Or(e),Or(t),n,!0)};return P.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=P.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);P.isUndefined(o)&&a!==s||(n[r]=o)}),n}var Ar=e=>{let t=kr({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=fr.from(o),t.url=zn(Dr(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),P.isFormData(n)){if(Yn.hasStandardBrowserEnv||Yn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(P.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Yn.hasStandardBrowserEnv&&(r&&P.isFunction(r)&&(r=r(t)),r||r!==!1&&Cr(t.url))){let e=i&&a&&wr.read(a);e&&o.set(i,e)}return t},jr=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=Ar(e),i=r.data,a=fr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=fr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());gr(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new F(`Request aborted`,F.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new F(t&&t.message?t.message:`Network Error`,F.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Vn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new F(t,i.clarifyTimeoutError?F.ETIMEDOUT:F.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&P.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),P.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=br(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=br(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new hr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=_r(r.url);if(_&&Yn.protocols.indexOf(_)===-1){n(new F(`Unsupported protocol `+_+`:`,F.ERR_BAD_REQUEST,e));return}h.send(i||null)})},Mr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof F?t:new hr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new F(`timeout of ${t}ms exceeded`,F.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>P.asap(o),s}},Nr=function*(e,t){let n=e.byteLength;if(!t||n{let i=Pr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Lr=64*1024,{isFunction:Rr}=P,zr=(({Request:e,Response:t})=>({Request:e,Response:t}))(P.global),{ReadableStream:Br,TextEncoder:Vr}=P.global,Hr=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Ur=e=>{e=P.merge.call({skipUndefined:!0},zr,e);let{fetch:t,Request:n,Response:r}=e,i=t?Rr(t):typeof fetch==`function`,a=Rr(n),o=Rr(r);if(!i)return!1;let s=i&&Rr(Br),c=i&&(typeof Vr==`function`?(e=>t=>e.encode(t))(new Vr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&Hr(()=>{let e=!1,t=new n(Yn.origin,{body:new Br,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&Hr(()=>P.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new F(`Response type '${e}' is not supported`,F.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(P.isBlob(e))return e.size;if(P.isSpecCompliantForm(e))return(await new n(Yn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(P.isArrayBufferView(e)||P.isArrayBuffer(e))return e.byteLength;if(P.isURLSearchParams(e)&&(e+=``),P.isString(e))return(await c(e)).byteLength},p=async(e,t)=>P.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=Ar(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=Mr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(P.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=xr(ee,br(Sr(g)));s=Ir(e.body,Lr,t,n)}}P.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=P.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&xr(t,br(Sr(h),!0))||[];f=new r(Ir(f.body,Lr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[P.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{gr(t,n,{data:te,headers:fr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new F(`Network Error`,F.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):F.from(t,t&&t.code,e,C,t&&t.response)}}},Wr=new Map,Gr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Wr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Ur(t)),l=c;return c};Gr();var Kr={http:null,xhr:jr,fetch:{get:Gr}};P.forEach(Kr,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var qr=e=>`- ${e}`,Jr=e=>P.isFunction(e)||e===null||e===!1;function Yr(e,t){e=P.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new F(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : -`+e.map(qr).join(` -`):` `+qr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var Xr={getAdapter:Yr,adapters:Kr};function Zr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new hr(null,e)}function Qr(e){return Zr(e),e.headers=fr.from(e.headers),e.data=pr.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),Xr.getAdapter(e.adapter||tr.adapter,e)(e).then(function(t){return Zr(e),t.data=pr.call(e,e.transformResponse,t),t.headers=fr.from(t.headers),t},function(t){return mr(t)||(Zr(e),t&&t.response&&(t.response.data=pr.call(e,e.transformResponse,t.response),t.response.headers=fr.from(t.response.headers))),Promise.reject(t)})}var $r=`1.13.6`,ei={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{ei[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var ti={};ei.transitional=function(e,t,n){function r(e,t){return`[Axios v`+$r+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new F(r(i,` has been removed`+(t?` in `+t:``)),F.ERR_DEPRECATED);return t&&!ti[i]&&(ti[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},ei.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function ni(e,t,n){if(typeof e!=`object`)throw new F(`options must be an object`,F.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new F(`option `+a+` must be `+n,F.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new F(`Unknown option `+a,F.ERR_BAD_OPTION)}}var ri={assertOptions:ni,validators:ei},ii=ri.validators,ai=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Bn,response:new Bn}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` -`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=kr(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ri.assertOptions(n,{silentJSONParsing:ii.transitional(ii.boolean),forcedJSONParsing:ii.transitional(ii.boolean),clarifyTimeoutError:ii.transitional(ii.boolean),legacyInterceptorReqResOrdering:ii.transitional(ii.boolean)},!1),r!=null&&(P.isFunction(r)?t.paramsSerializer={serialize:r}:ri.assertOptions(r,{encode:ii.function,serialize:ii.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ri.assertOptions(t,{baseUrl:ii.spelling(`baseURL`),withXsrfToken:ii.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&P.merge(i.common,i[t.method]);i&&P.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=fr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Vn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Qr.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new hr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function si(e){return function(t){return e.apply(null,t)}}function ci(e){return P.isObject(e)&&e.isAxiosError===!0}var li={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(li).forEach(([e,t])=>{li[t]=e});function ui(e){let t=new ai(e),n=vt(ai.prototype.request,t);return P.extend(n,ai.prototype,t,{allOwnKeys:!0}),P.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return ui(kr(e,t))},n}var I=ui(tr);I.Axios=ai,I.CanceledError=hr,I.CancelToken=oi,I.isCancel=mr,I.VERSION=$r,I.toFormData=Pn,I.AxiosError=F,I.Cancel=I.CanceledError,I.all=function(e){return Promise.all(e)},I.spread=si,I.isAxiosError=ci,I.mergeConfig=kr,I.AxiosHeaders=fr,I.formToJSON=e=>$n(P.isHTMLForm(e)?new FormData(e):e),I.getAdapter=Xr.getAdapter,I.HttpStatusCode=li,I.default=I;var di=l(_()),fi=`order-demo-001`;function pi(e,t,n,r,i,a){return{eventId:e,aggregateId:fi,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function mi(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(pi(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var hi=mi();function gi(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:fi,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var _i=gi(hi);function vi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function yi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function bi(e){let t=[],n={};for(let r of e){let e={...n};n=vi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:yi(e,i)})}return t}var xi=bi(hi);function Si(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function Ci(e){return Si(e)?[fi]:[]}function wi(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=hi.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:hi.slice(i,i+a),totalEvents:r}}function Ti(e){return e===`order-demo-001`?xi:[]}function Ei(e){let t=Math.min(Math.max(e,1),500);return _i.slice(0,t)}function Di(){return[...hi].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function Oi(){return{status:`UP`,version:`demo`,demo:!0}}function ki(){return!1}var Ai=I.create({baseURL:`/api`});function ji(e){return new Promise(t=>{setTimeout(t,e)})}function Mi(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var Ni=async(e,t=20,n)=>{let r=Mi(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(ki()){await ji(40);let n=Ci(e);try{let e=await Ai.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Ai.get(r).then(e=>e.data)},Pi=async(e,t=500,n=0,r,i=`full`)=>{if(ki()&&e===`order-demo-001`)return await ji(50),wi(e,t,n);let a=Mi(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Ai.get(a).then(e=>e.data)},Fi=async(e,t)=>ki()&&e===`order-demo-001`?(await ji(50),Ti(e)):Ai.get(Mi(`/aggregates/${e}/transitions`,t)).then(e=>e.data),L=async(e=100,t)=>ki()?(await ji(45),Ei(e)):Ai.get(Mi(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),R=async(e,t=1,n=24)=>{let r=Mi(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Ai.get(r).then(e=>e.data)},Ii=async()=>ki()?(await ji(20),Oi()):Ai.get(`/health`).then(e=>e.data),Li=async()=>Ai.get(`/v1/datasources`).then(e=>e.data),Ri=async e=>Ai.get(`/v1/datasources/${encodeURIComponent(e)}/health`).then(e=>e.data),zi=async()=>Ai.get(`/v1/plugins`).then(e=>e.data);function Bi(e,t){let[n,r]=(0,j.useState)(e);return(0,j.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function Vi({onSelect:e,source:t}){let[n,r]=(0,j.useState)(``),[i,a]=(0,j.useState)(!1),o=(0,j.useRef)(null),s=Bi(n,300),{data:c=[]}=_t({queryKey:[`search`,s,t??`default`],queryFn:()=>Ni(s,20,t),enabled:s.length>=2,staleTime:5e3});(0,j.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let l=(0,j.useRef)(null),u=(0,j.useCallback)(()=>{l.current?.focus(),l.current?.select()},[]);(0,j.useEffect)(()=>{document.getElementById(`aggregate-search`)?.addEventListener(`focus`,u)},[u]);let d=t=>{r(t),a(!1),e(t)};return(0,M.jsxs)(`div`,{className:`search-wrapper`,ref:o,children:[(0,M.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,M.jsx)(`input`,{id:`aggregate-search`,ref:l,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:n,onChange:e=>{r(e.target.value),a(!0)},onFocus:()=>n.length>=2&&a(!0),onKeyDown:e=>{e.key===`Enter`&&n.trim()&&d(n.trim()),e.key===`Escape`&&a(!1)},autoComplete:`off`}),i&&c.length>0&&(0,M.jsx)(`div`,{className:`search-results`,role:`listbox`,children:c.map(e=>(0,M.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>d(e),role:`option`,children:[(0,M.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,M.jsxs)(`span`,{className:`search-result-body`,children:[(0,M.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,M.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,M.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Hi(e,t){return _t({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Pi(e,500,0,t,`metadata`),enabled:!!e})}function Ui(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}var Wi=4,Gi=58,Ki=360,qi=6,Ji=[1,6,24,168];function Yi(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function Xi(e){let t=[],n=0;for(;n=Wi)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function $i(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function ea(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function ta({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Hi(e,a),[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(``),[f,p]=(0,j.useState)(`all`),[m,h]=(0,j.useState)(null),[g,_]=(0,j.useState)(0),v=(0,j.useRef)(null),y=o?.events??[],b=o?.totalEvents??0,x=(0,j.useMemo)(()=>{let e=y;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Ui(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Ui(e.timestamp).getTime()>=t)}return e},[y,c,f]),S=(0,j.useMemo)(()=>Xi(x),[x]),C=(0,j.useMemo)(()=>[...new Set(y.map(e=>e.eventType))].sort(),[y]);(0,j.useEffect)(()=>{if(t!=null){for(let e of S)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(Zi(e.startIndex,e.items.length));return}h(null)}},[S,t]);let w=(0,j.useMemo)(()=>Qi(S,m,t),[m,S,t]),ee=(0,j.useMemo)(()=>t==null?-1:w.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[w,t]);(0,j.useEffect)(()=>{let e=e=>{let t=e.detail;if(w.length&&(t<0||t>0)){let e=ee>=0?ee:0;r($i(w[Math.max(0,Math.min(w.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,w,ee]),(0,j.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!w.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=w.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,w,t]),(0,j.useEffect)(()=>{if(ee<0||!v.current)return;let e=ee*Gi,t=e+Gi;eg+Ki&&(v.current.scrollTop=t-Ki)},[g,ee]);let te=Math.max(0,Math.floor(g/Gi)-qi),ne=Math.min(w.length,Math.ceil((g+Ki)/Gi)+qi),T=w.slice(te,ne);if(s)return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,M.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!y.length)return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let re=x[0]?.sequenceNumber??0,ie=x[x.length-1]?.sequenceNumber??0;return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,M.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Enhanced Timeline`,(0,M.jsxs)(`span`,{className:`timeline-count-pill`,children:[x.length,` / `,b,` events`]})]}),(0,M.jsx)(`div`,{className:`timeline-jump-group`,children:(0,M.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);x.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,M.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),C.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,M.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),Ji.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,M.jsx)(`div`,{ref:v,className:`timeline-virtual-container`,style:{position:`relative`,overflowY:`auto`,maxHeight:Ki},onScroll:e=>_(e.currentTarget.scrollTop),children:(0,M.jsx)(`div`,{style:{height:w.length*Gi,position:`relative`},children:T.map((e,a)=>{let o=(te+a)*Gi;if(e.kind===`group`)return(0,M.jsxs)(`button`,{type:`button`,className:`timeline-group-chip timeline-step-${Yi(e.eventType)} ${e.containsSelection?`active`:``} ${e.expanded?`expanded`:``}`,style:{position:`absolute`,top:o,left:0,right:0,height:Gi-6},onClick:()=>h(t=>t===Zi(e.startIndex,e.items.length)?null:Zi(e.startIndex,e.items.length)),"aria-expanded":e.expanded,children:[(0,M.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,M.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,M.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:e.expanded?`v`:`>`})]}),(0,M.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,M.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]},e.key);let s=e.event,c=t===s.sequenceNumber,l=n===s.sequenceNumber,u=e.kind===`group-item`?` timeline-step-compact`:``;return(0,M.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${Yi(s.eventType)} ${c?`active`:``} ${l?`timeline-step-compare`:``}${u}`,style:{position:`absolute`,top:o,left:0,right:0,height:Gi-6},onClick:e=>{e.shiftKey&&i?i(s.sequenceNumber===n?null:s.sequenceNumber):r(s.sequenceNumber)},"aria-current":c?`step`:void 0,"aria-selected":c,"aria-label":ea(e.stepNumber,s),children:[(0,M.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,M.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,s.sequenceNumber]}),(0,M.jsx)(`span`,{className:`timeline-step-type`,children:s.eventType}),(0,M.jsx)(`span`,{className:`timeline-step-seq`,children:Ui(s.timestamp).toLocaleTimeString()})]},e.key)})})}),(0,M.jsx)(`input`,{type:`range`,className:`timeline-slider`,min:re,max:ie,value:t??ie,onChange:e=>r(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,M.jsxs)(`div`,{className:`timeline-info`,children:[(0,M.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,re]}),(0,M.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,M.jsxs)(`span`,{className:`timeline-info-muted`,children:[` in `,w.length,` visible rows`]})]})}),(0,M.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ie]})]})]})}function na(e,t){return _t({queryKey:[`transitions`,e,t??`default`],queryFn:()=>Fi(e,t),enabled:!!e})}function ra(e,t,n=!0){let[r,i]=(0,j.useState)([]),[a,o]=(0,j.useState)(0),[s,c]=(0,j.useState)(!1),l=(0,j.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,j.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-ClgOBOoF.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function ia({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,M.jsxs)(`div`,{className:`diff-panel`,children:[(0,M.jsx)(`div`,{className:`diff-toolbar`,children:(0,M.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,M.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,M.jsx)(`div`,{className:`diff-body`,children:(0,M.jsx)(`div`,{className:`diff-scroll`,children:(0,M.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,M.jsxs)(`div`,{className:`diff-split-head`,children:[(0,M.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,M.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,M.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,M.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,M.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,M.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,M.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,M.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,M.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,M.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,M.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function aa({open:e,onToggle:t}){return(0,M.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function oa({value:e}){return e===null?(0,M.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,M.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,M.jsx)(`span`,{className:`json-number`,children:e}):(0,M.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function sa({value:e,changedKeys:t}){return(0,M.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,M.jsx)(z,{value:e,depth:0,changedKeys:t,keyPath:``})})}function z({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,j.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,M.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(oa,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,M.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,M.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,M.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,M.jsx)(aa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,M.jsxs)(M.Fragment,{children:[e.map((e,n)=>(0,M.jsx)(z,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,M.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,M.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,M.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,M.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,M.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,M.jsx)(aa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,M.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,M.jsxs)(M.Fragment,{children:[i.map(([e,n])=>(0,M.jsx)(z,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,M.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,M.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,M.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,M.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var ca=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function la({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,source:a}){let{data:o=[],isLoading:s}=na(e,a),[c,l]=(0,j.useState)(`changes`),u=r??c,d=e=>{l(e),i?.(e)},f=o.find(e=>e.event.sequenceNumber===t)??null,p=n==null?null:o.find(e=>e.event.sequenceNumber===n)??null,m=f!=null&&p!=null&&f.event.sequenceNumber!==p.event.sequenceNumber,h=m?p.stateAfter:f?.stateBefore,g=f?.stateAfter,{patches:_,loading:v,durationMs:y}=ra(h,g,m&&!!h&&!!g),b=(0,j.useMemo)(()=>m?new Set(_.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(f?.diff??{})),[m,_,f?.diff]);return s?(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`State`}),(0,M.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):f?(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,f.event.sequenceNumber,(0,M.jsx)(`span`,{className:`diff-count-badge`,children:f.event.eventType}),m&&(0,M.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,p?.event.sequenceNumber]}),m&&!v&&(0,M.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,y.toFixed(1),`ms`]})]}),(0,M.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:ca.map(e=>(0,M.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":u===e.id,className:`state-tab ${u===e.id?`active`:``}`,onClick:()=>d(e.id),children:e.label},e.id))}),(0,M.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[u===`changes`&&(0,M.jsx)(`div`,{children:m?v?(0,M.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,M.jsx)(ia,{patches:_,title:`Structural diff`}):f.diff&&Object.keys(f.diff).length>0?(0,M.jsx)(ia,{diff:f.diff}):(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),u===`before-after`&&(0,M.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,M.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,M.jsx)(`h4`,{children:m?`Event #${p?.event.sequenceNumber}`:`Before`}),(0,M.jsx)(sa,{value:h??{},changedKeys:b})]}),(0,M.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,M.jsx)(`h4`,{children:m?`Event #${f.event.sequenceNumber}`:`After`}),(0,M.jsx)(sa,{value:g??{},changedKeys:b})]})]}),u===`raw`&&(0,M.jsx)(`div`,{style:{marginTop:12},children:(0,M.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(m?{leftEvent:p?.event,rightEvent:f.event,leftState:h,rightState:g}:f.event,null,2)})})]})]}):null}var ua=1e3,da=3e4;function fa(e,t,n){let r=n?.enabled??!0,[i,a]=(0,j.useState)(()=>r?`connecting`:`connected`),o=(0,j.useRef)(null),s=(0,j.useRef)(t),c=(0,j.useRef)(ua);return s.current=t,(0,j.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=ua,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,da),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var pa=(0,j.createContext)(void 0);function ma({children:e}){let[t,n]=(0,j.useState)([]),r=(0,j.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,M.jsxs)(pa.Provider,{value:{notify:r},children:[e,(0,M.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,M.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function ha(){let e=(0,j.useContext)(pa);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function ga(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function _a(e){return ga(e)}var va=100;function ya(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function ba({source:e}){return(0,M.jsx)(Ca,{source:e})}function xa(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function Sa(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function Ca({source:e}){let t=ki(),[n,r]=(0,j.useState)(()=>t?Di():[]),[i,a]=(0,j.useState)(!1),[o,s]=(0,j.useState)(null),c=(0,j.useRef)(null),l=(0,j.useRef)(i);l.current=i;let{notify:u}=ha();(0,j.useEffect)(()=>{s(null),r(t?Di():[])},[e,t]);let d=fa(Sa(e),e=>{if(xa(e)){s(e.source),r([]);return}s(null),!l.current&&r(t=>[...t.slice(-(va-1)),e])},{enabled:!t}),f=(0,j.useRef)(u);f.current=u;let p=(0,j.useRef)(0);return(0,j.useEffect)(()=>{t||(d===`disconnected`?(p.current++,p.current<=1&&f.current(`Live stream disconnected. Retrying…`)):d===`connected`&&(p.current=0))},[d,t]),(0,j.useEffect)(()=>{!i&&c.current&&(c.current.scrollTop=c.current.scrollHeight)},[n,i]),(0,j.useEffect)(()=>{let e=()=>a(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`live-header`,children:[(0,M.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,M.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,M.jsxs)(`div`,{className:`live-indicator`,children:[(0,M.jsx)(`span`,{className:`dot ${d===`connected`?`dot-green`:d===`connecting`?`dot-yellow`:`dot-red`}`}),(0,M.jsx)(`span`,{style:{color:d===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:d===`connected`?i?`Paused`:`Live`:d})]}),(0,M.jsx)(`button`,{className:`pause-btn`,onClick:()=>a(!i),children:i?`▶ Resume`:`⏸ Pause`})]})]}),(0,M.jsxs)(`div`,{className:`event-stream`,ref:c,children:[o&&(0,M.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:o?` (${o})`:``,`.`]}),n.length===0&&(0,M.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:o?null:t?`Demo stream (static sample events)`:`Waiting for events…`}),n.map(e=>(0,M.jsxs)(`div`,{className:`event-row ${_a(e.eventType)}`,children:[(0,M.jsx)(`span`,{className:`event-icon`,children:ya(e.eventType)}),(0,M.jsx)(`span`,{className:`event-time`,children:Ui(e.timestamp).toLocaleTimeString()}),(0,M.jsx)(`span`,{className:`event-type ${ga(e.eventType)}`,children:e.eventType}),(0,M.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function wa(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Ta(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Ea(){return(0,M.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,M.jsx)(`defs`,{children:(0,M.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,M.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,M.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,M.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,M.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,M.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function Da({color:e}){return(0,M.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,M.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Oa({source:e}){let{data:t,isLoading:n}=_t({queryKey:[`anomalies`,e??`default`],queryFn:()=>L(100,e),refetchInterval:3e4}),r=t&&t.length>0;return(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,M.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!n&&r&&(0,M.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${t.length} anomalies`,children:t.length})]}),n&&(0,M.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!n&&!r&&(0,M.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,M.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,M.jsx)(`div`,{className:`shield-icon`,children:(0,M.jsx)(Ea,{})}),(0,M.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,M.jsxs)(`div`,{className:`gauge-row`,children:[(0,M.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,M.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,M.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,M.jsx)(Da,{color:`green`})]}),(0,M.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,M.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,M.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,M.jsx)(Da,{color:`cyan`})]}),(0,M.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,M.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,M.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,M.jsx)(Da,{color:`green`})]})]})]}),!n&&r&&(0,M.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,M.jsx)(`div`,{className:`anomaly-list-inner`,children:t.map((e,t)=>(0,M.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,M.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,M.jsx)(`span`,{className:`anomaly-severity-badge ${wa(e.severity)}`,children:Ta(e.severity)}),(0,M.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,M.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,M.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),(0,M.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,M.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,M.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,M.jsx)(`span`,{className:`anomaly-meta-value`,children:Ui(e.timestamp).toLocaleString()})]}),(0,M.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,M.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,M.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${t}`))})})]})}var ka=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Aa(){let[e,t]=(0,j.useState)(!1);return(0,j.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,M.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,M.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[ka.map(e=>(0,M.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,M.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,M.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,M.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,M.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,M.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,M.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,M.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,M.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}function ja({transitions:e,selectedSequence:t,onSelectSequence:n}){if(!e.length)return null;let r=e.find(e=>e.event.sequenceNumber===t)??e[0],i=e.findIndex(e=>e.event.sequenceNumber===r.event.sequenceNumber);return(0,M.jsxs)(`div`,{className:`card replay-debugger`,tabIndex:0,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,M.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.max(i-1,0)].event.sequenceNumber),title:`Step backward`,children:`Previous`}),(0,M.jsxs)(`div`,{className:`replay-position`,children:[`Event `,i+1,` of `,e.length]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.min(i+1,e.length-1)].event.sequenceNumber),title:`Step forward`,children:`Next`})]}),(0,M.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:i,onChange:t=>n(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,M.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,M.jsx)(`h4`,{children:`Current State`}),(0,M.jsx)(sa,{value:r.stateAfter,changedKeys:new Set(Object.keys(r.diff))})]})]})}function Ma(e,t=1,n=24){return _t({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>R(e,t,n),staleTime:3e4})}function Na({source:e}){let[t,n]=(0,j.useState)(24),{data:r,isLoading:i}=Ma(e,1,t);return(0,M.jsxs)(`div`,{className:`card statistics-panel`,"aria-busy":i,children:[(0,M.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,M.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,M.jsx)(`button`,{type:`button`,className:`filter-chip ${t===e?`active`:``}`,onClick:()=>n(e),children:e===72?`3d`:`${e}h`},e))}),i&&(0,M.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!i&&r&&!r.available&&(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`},children:r.message??`Statistics not available.`}),!i&&r?.available&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`stats-kpis`,children:[(0,M.jsxs)(`div`,{className:`stat-card`,children:[(0,M.jsx)(`strong`,{children:r.totalEvents}),(0,M.jsx)(`span`,{children:`Total events`})]}),(0,M.jsxs)(`div`,{className:`stat-card`,children:[(0,M.jsx)(`strong`,{children:r.distinctAggregates}),(0,M.jsx)(`span`,{children:`Aggregates`})]}),(0,M.jsxs)(`div`,{className:`stat-card`,children:[(0,M.jsx)(`strong`,{children:r.eventTypes.length}),(0,M.jsx)(`span`,{children:`Event types`})]})]}),(0,M.jsx)(`div`,{className:`stats-chart`,children:r.throughput.map(e=>(0,M.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,M.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,M.jsx)(`div`,{className:`stats-bar-track`,children:(0,M.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...r.throughput.map(e=>e.count),1)*100)}%`}})}),(0,M.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,M.jsxs)(`div`,{className:`stats-distribution`,children:[(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h4`,{children:`Event Types`}),r.eventTypes.map(e=>(0,M.jsxs)(`div`,{className:`stats-list-row`,children:[(0,M.jsx)(`span`,{children:e.type}),(0,M.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`h4`,{children:`Aggregate Types`}),r.aggregateTypes.map(e=>(0,M.jsxs)(`div`,{className:`stats-list-row`,children:[(0,M.jsx)(`span`,{children:e.type}),(0,M.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Pa({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenStats:i,onOpenPlugins:a}){let[o,s]=(0,j.useState)(``),[c,l]=(0,j.useState)(0),{data:u=[]}=_t({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>Ni(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,j.useEffect)(()=>{e?l(0):s(``)},[e]);let d=(0,j.useMemo)(()=>{let e=[{id:`stats`,label:`Go to statistics panel`,action:i},{id:`plugins`,label:`Go to plugin health`,action:a}],t=u.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&u.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[u,a,i,r,o]);return(0,j.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(d.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),d[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[d,n,e,c]),e?(0,M.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,M.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,onClick:e=>e.stopPropagation(),children:[(0,M.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,M.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,children:[d.map((e,t)=>(0,M.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),d.length===0&&(0,M.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function Fa({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,j.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Ia(e){let t=e.toLowerCase();return t===`ready`||t===`up`?`#00ff88`:t===`degraded`||t===`initializing`?`#ffd166`:`#ff6b6b`}function La(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Ra(e){return e.toLowerCase()===`ready`}function za({datasources:e,datasourceHealth:t,plugins:n}){return(0,M.jsxs)(`div`,{className:`plugin-dashboard`,children:[(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Datasources`}),(0,M.jsx)(`div`,{className:`plugin-cards-grid`,children:e.map((e,n)=>{let r=t[n],i=Ia(e.status);return(0,M.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,style:{borderLeft:`3px solid ${i}`},children:[(0,M.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,M.jsx)(`strong`,{children:e.displayName}),(0,M.jsx)(`span`,{className:`plugin-pill`,style:{color:i,borderColor:`${i}55`},children:e.status})]}),(0,M.jsx)(`div`,{className:`plugin-card-meta`,children:e.id}),r&&(0,M.jsxs)(`div`,{className:`plugin-card-detail`,children:[r.health.message,r.failureReason?` | ${r.failureReason}`:``]})]},e.id)})})]}),(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`All Plugins`}),(0,M.jsx)(`div`,{className:`plugin-cards-grid plugin-cards-grid--dense`,children:n.map(e=>(0,M.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,children:[(0,M.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,M.jsx)(`strong`,{children:e.displayName}),(0,M.jsx)(`span`,{className:`plugin-pill`,style:{color:Ia(e.lifecycle),borderColor:`${Ia(e.lifecycle)}55`},children:e.lifecycle})]}),(0,M.jsxs)(`div`,{className:`plugin-card-meta`,children:[e.pluginType,` | `,e.typeId]}),(0,M.jsx)(`div`,{className:`plugin-card-meta`,children:e.instanceId}),(0,M.jsxs)(`div`,{className:`plugin-card-detail`,children:[e.health.message,e.failureReason?` | ${e.failureReason}`:``]})]},e.instanceId))})]})]})}function Ba(){let[e,t]=(0,j.useState)(null),[n,r]=(0,j.useState)(null),[i,a]=(0,j.useState)(null),[o,s]=(0,j.useState)(`changes`),[c,l]=(0,j.useState)(``),[u,d]=(0,j.useState)(window.location.hash||``),[f,p]=(0,j.useState)(!1),[m,h]=(0,j.useState)(!1);(0,j.useEffect)(()=>{let e=()=>d(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,j.useEffect)(()=>{let e=e=>{let t=e.detail;t&&s(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,j.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`source`);n&&t(n),i&&r(Number(i)),o&&a(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&s(c),u&&l(u)},[]),(0,j.useEffect)(()=>{let t=new URLSearchParams(window.location.search);e?t.set(`aggregateId`,e):t.delete(`aggregateId`),n==null?t.delete(`seq`):t.set(`seq`,String(n)),i==null?t.delete(`compare`):t.set(`compare`,String(i)),t.set(`tab`,o),c?t.set(`source`,c):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[o,i,e,n,c]);let{data:g}=_t({queryKey:[`health`],queryFn:Ii,refetchInterval:3e4}),{data:_=[]}=_t({queryKey:[`datasources`],queryFn:Li,staleTime:1e4}),{data:v=[]}=_t({queryKey:[`plugins`],queryFn:zi,staleTime:1e4}),y=ht({queries:_.map(e=>({queryKey:[`datasource-health`,e.id],queryFn:()=>Ri(e.id),staleTime:1e4}))}).map(e=>e.data),{data:b=[]}=na(e??``,c||null),{data:x}=_t({queryKey:[`timeline-summary`,e,c||`default`],queryFn:()=>Pi(e,500,0,c||null,`metadata`),enabled:!!e,staleTime:3e4}),S=g?.status===`UP`,C=u===`#/plugins`,w=u===`#/stats`,ee=_.filter(e=>La(e.status)).length,te=v.filter(e=>La(e.lifecycle)).length,ne=_.length-ee+(v.length-te),T=e=>{t(e),r(null),a(null),window.location.hash=`#/timeline`};return(0,M.jsxs)(`div`,{className:`app`,children:[(0,M.jsx)(Fa,{paletteOpen:m,onOpenPalette:()=>h(!0),onClosePalette:()=>h(!1)}),(0,M.jsx)(Pa,{open:m,selectedSource:c||null,onClose:()=>h(!1),onSelectAggregate:T,onOpenStats:()=>{window.location.hash=`#/stats`},onOpenPlugins:()=>{window.location.hash=`#/plugins`}}),(0,M.jsxs)(`header`,{className:`app-header`,children:[(0,M.jsx)(`div`,{className:`brand`,children:(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,M.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,M.jsxs)(`div`,{className:`header-center`,children:[ki()&&(0,M.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,M.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,M.jsx)(`div`,{className:`header-actions`,children:(0,M.jsxs)(`div`,{className:`header-status`,children:[(0,M.jsx)(`span`,{className:`dot ${S?`dot-green`:`dot-red`}`}),(0,M.jsx)(`span`,{className:`status-text ${S?``:`offline`}`,children:S?`Connected`:g?.status??`Connecting`})]})})]}),(0,M.jsxs)(`aside`,{className:`workspace-dock${f?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,M.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!f,children:[(0,M.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,M.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,M.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,M.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:c,onChange:e=>{l(e.target.value),r(null),a(null)},children:[(0,M.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),_.map(e=>(0,M.jsxs)(`option`,{value:e.id,disabled:!Ra(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,M.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,M.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,M.jsx)(`span`,{children:`Datasources Healthy`}),(0,M.jsxs)(`strong`,{children:[ee,`/`,_.length||0]})]}),(0,M.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,M.jsx)(`span`,{children:`Plugins Healthy`}),(0,M.jsxs)(`strong`,{children:[te,`/`,v.length||0]})]}),(0,M.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,M.jsx)(`span`,{children:`Issues`}),(0,M.jsx)(`strong`,{children:ne})]})]})]}),(0,M.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>p(e=>!e),"aria-expanded":f,"aria-controls":`workspace-dock-panel`,children:(0,M.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:f?`>`:`<`})})]}),(0,M.jsx)(`main`,{className:`app-main`,role:`main`,children:(0,M.jsxs)(`div`,{className:`workspace-content`,children:[!C&&!w&&(0,M.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,M.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,M.jsx)(Vi,{onSelect:T,source:c||null}),e&&(0,M.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,M.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:e}),c?(0,M.jsxs)(`span`,{children:[` on `,c]}):(0,M.jsx)(`span`,{children:` on primary datasource`}),i!=null&&(0,M.jsxs)(`span`,{children:[` comparing with seq #`,i]}),(0,M.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{t(null),r(null),a(null)},children:`× clear`})]})]}),C?(0,M.jsx)(za,{datasources:_,datasourceHealth:y,plugins:v}):w?(0,M.jsx)(Na,{source:c||null}):(0,M.jsxs)(M.Fragment,{children:[e&&(0,M.jsx)(ta,{aggregateId:e,selectedSequence:n,compareSequence:i,onSelectEvent:r,onSelectCompare:a,source:c||null}),e&&n!==null&&(0,M.jsx)(la,{aggregateId:e,sequence:n,compareSequence:i,activeTab:o,onTabChange:s,source:c||null}),e&&b.length>0&&(0,M.jsx)(ja,{transitions:b,selectedSequence:n,onSelectSequence:r}),(0,M.jsxs)(`div`,{className:`bottom-grid`,children:[(0,M.jsx)(ba,{source:c||null}),(0,M.jsx)(Oa,{source:c||null})]}),e&&x&&(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,M.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[x.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,M.jsx)(Aa,{})]})}var Va=class extends j.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,M.jsx)(`div`,{className:`app`,children:(0,M.jsx)(`main`,{className:`app-main`,children:(0,M.jsxs)(`div`,{className:`card`,children:[(0,M.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,M.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Ha=new Ze({defaultOptions:{queries:{staleTime:3e4,retry:2}}});di.createRoot(document.getElementById(`root`)).render((0,M.jsx)(j.StrictMode,{children:(0,M.jsx)(nt,{client:Ha,children:(0,M.jsx)(ma,{children:(0,M.jsx)(Va,{children:(0,M.jsx)(Ba,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js b/eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js deleted file mode 100644 index 9b75297..0000000 --- a/eventlens-api/src/main/resources/web/assets/json-diff.worker-ClgOBOoF.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function t(n,r,i,a){if(JSON.stringify(n)!==JSON.stringify(r)){if(n==null){a.push({path:i,type:`added`,newValue:r});return}if(r==null){a.push({path:i,type:`removed`,oldValue:n});return}if(Array.isArray(n)&&Array.isArray(r)){let e=Math.max(n.length,r.length);for(let o=0;o{let n=performance.now(),r=[];t(e.data.left,e.data.right,`$`,r);let i={requestId:e.data.requestId,patches:r,durationMs:performance.now()-n};self.postMessage(i)}})(); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/assets/json-diff.worker-DTKMBXSt.js b/eventlens-api/src/main/resources/web/assets/json-diff.worker-DTKMBXSt.js new file mode 100644 index 0000000..e8b7835 --- /dev/null +++ b/eventlens-api/src/main/resources/web/assets/json-diff.worker-DTKMBXSt.js @@ -0,0 +1 @@ +(function(){function e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function t(e,t){return JSON.stringify(e)===JSON.stringify(t)}function n(r,i,a,o){if(!t(r,i)){if(r==null){o.push({path:a,type:`added`,newValue:i});return}if(i==null){o.push({path:a,type:`removed`,oldValue:r});return}if(Array.isArray(r)&&Array.isArray(i)){let e=Math.max(r.length,i.length);for(let t=0;t{let t=performance.now(),n={requestId:e.data.requestId,patches:r(e.data.left,e.data.right),durationMs:performance.now()-t};self.postMessage(n)}})(); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/index.html b/eventlens-api/src/main/resources/web/index.html index 01ff00a..6413428 100644 --- a/eventlens-api/src/main/resources/web/index.html +++ b/eventlens-api/src/main/resources/web/index.html @@ -9,8 +9,8 @@ - - + +
diff --git a/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java b/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java index 98ccbcd..cdedb4b 100644 --- a/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java +++ b/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java @@ -36,6 +36,7 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.CopyOnWriteArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -105,6 +106,54 @@ void websocketStreamsMappedSourceAndShowsPlaceholderForSourceWithoutStream() thr noStreamSocket.sendClose(WebSocket.NORMAL_CLOSURE, "done").join(); } + @Test + void websocketBurstKeepsLatestBufferedEventsForSlowClients() throws Exception { + TestEventSourcePlugin primary = new TestEventSourcePlugin("pg-primary", List.of()); + TestEventSourcePlugin legacy = new TestEventSourcePlugin("mysql-alt", List.of()); + TestStreamAdapterPlugin pgStream = new TestStreamAdapterPlugin(); + startServer(primary, legacy, pgStream, Map.of("pg-primary", "pg-stream")); + + CompletableFuture> burstMessages = new CompletableFuture<>(); + WebSocket burstSocket = openSocket("/ws/live?source=pg-primary", new CollectingListener(burstMessages, 200)); + + long deadline = System.currentTimeMillis() + 5_000; + while (!pgStream.hasSubscriber() && System.currentTimeMillis() < deadline) { + Thread.sleep(25); + } + assertThat(pgStream.hasSubscriber()).isTrue(); + + for (int sequence = 1; sequence <= 260; sequence++) { + pgStream.emit(new Event( + "evt-live-" + sequence, + "PG-AGG", + "BankAccount", + sequence, + "LiveArrived", + JSON.readTree("{\"sequence\":" + sequence + "}"), + JSON.readTree("{\"source\":\"pg\"}"), + Instant.parse("2026-03-24T12:00:00Z").plusSeconds(sequence), + sequence + )); + } + + List messages = burstMessages.get(10, TimeUnit.SECONDS); + List sequences = messages.stream() + .map(payload -> { + try { + return JSON.readTree(payload).path("sequenceNumber").asLong(); + } catch (Exception e) { + throw new RuntimeException(e); + } + }) + .toList(); + + assertThat(sequences).hasSize(200); + assertThat(sequences.get(0)).isGreaterThan(1); + assertThat(sequences.get(sequences.size() - 1)).isEqualTo(260); + + burstSocket.sendClose(WebSocket.NORMAL_CLOSURE, "done").join(); + } + private void startServer( TestEventSourcePlugin primary, TestEventSourcePlugin legacy, @@ -166,6 +215,13 @@ private WebSocket openSocket(String pathAndQuery, CompletableFuture firs .join(); } + private WebSocket openSocket(String pathAndQuery, WebSocket.Listener listener) { + return HttpClient.newHttpClient() + .newWebSocketBuilder() + .buildAsync(URI.create("ws://localhost:" + server.getApp().port() + pathAndQuery), listener) + .join(); + } + private static int freePort() throws Exception { try (ServerSocket socket = new ServerSocket(0)) { return socket.getLocalPort(); @@ -328,6 +384,10 @@ public HealthStatus healthCheck() { return HealthStatus.up(); } + private boolean hasSubscriber() { + return listener.get() != null; + } + private void emit(Event event) { var activeListener = listener.get(); if (activeListener != null) { @@ -360,4 +420,36 @@ public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean return CompletableFuture.completedFuture(null); } } + + private static final class CollectingListener implements WebSocket.Listener { + private final CompletableFuture> messagesFuture; + private final int expectedCount; + private final List messages = new CopyOnWriteArrayList<>(); + private final StringBuilder text = new StringBuilder(); + + private CollectingListener(CompletableFuture> messagesFuture, int expectedCount) { + this.messagesFuture = messagesFuture; + this.expectedCount = expectedCount; + } + + @Override + public void onOpen(WebSocket webSocket) { + webSocket.request(1); + WebSocket.Listener.super.onOpen(webSocket); + } + + @Override + public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean last) { + text.append(data); + if (last) { + messages.add(text.toString()); + text.setLength(0); + if (messages.size() >= expectedCount && !messagesFuture.isDone()) { + messagesFuture.complete(List.copyOf(messages)); + } + } + webSocket.request(1); + return CompletableFuture.completedFuture(null); + } + } } diff --git a/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java b/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java index 208395a..5919244 100644 --- a/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java +++ b/eventlens-api/src/test/java/io/eventlens/api/V4ReadinessApiE2ETest.java @@ -135,6 +135,31 @@ void lazyPayloadRoundTripReturnsMetadataThenFullPayload() throws Exception { assertThat(selectedEvent.path("payload").asText()).contains("postgres-note"); } + @Test + void csvExportWorksForSyncAndAsyncRoutes() throws Exception { + running = startSystem(); + + HttpResponse syncResponse = getResponse("/api/v1/aggregates/" + AGGREGATE_ID + "/export?format=csv"); + assertThat(syncResponse.headers().firstValue("content-type")).hasValueSatisfying(value -> assertThat(value).contains("text/csv")); + assertThat(syncResponse.body()).contains("sequence,event_type,timestamp,payload"); + assertThat(syncResponse.body()).contains("AccountCreated"); + + JsonNode started = postJson("/api/v1/events/export", """ + {"aggregateId":"SHARED-001","format":"csv","limit":10} + """); + String exportId = started.path("exportId").asText(); + assertThat(exportId).startsWith("exp-"); + + JsonNode status = waitForCompletedExport(exportId); + assertThat(status.path("status").asText()).isEqualTo("COMPLETED"); + assertThat(status.path("format").asText()).isEqualTo("csv"); + + HttpResponse download = getResponse(status.path("downloadUrl").asText()); + assertThat(download.headers().firstValue("content-type")).hasValueSatisfying(value -> assertThat(value).contains("text/csv")); + assertThat(download.body()).contains("sequence,event_type,timestamp,payload"); + assertThat(download.body()).contains("MoneyDeposited"); + } + private RunningSystem startSystem() throws Exception { createPostgresSchema(); createMySqlSchema(); @@ -286,18 +311,47 @@ INSERT INTO event_store ( } private JsonNode getJson(String pathAndQuery) throws Exception { + HttpResponse response = getResponse(pathAndQuery); + assertThat(response.statusCode()) + .withFailMessage("Expected 200 for %s but got %s with body %s", pathAndQuery, response.statusCode(), response.body()) + .isEqualTo(200); + return JSON.readTree(response.body()); + } + + private HttpResponse getResponse(String pathAndQuery) throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(running.baseUrl() + pathAndQuery)) .timeout(Duration.ofSeconds(15)) .GET() .build(); + return running.client().send(request, HttpResponse.BodyHandlers.ofString()); + } + + private JsonNode postJson(String pathAndQuery, String body) throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(running.baseUrl() + pathAndQuery)) + .timeout(Duration.ofSeconds(15)) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(body)) + .build(); HttpResponse response = running.client().send(request, HttpResponse.BodyHandlers.ofString()); - assertThat(response.statusCode()) - .withFailMessage("Expected 200 for %s but got %s with body %s", pathAndQuery, response.statusCode(), response.body()) - .isEqualTo(200); + assertThat(response.statusCode()).isEqualTo(202); return JSON.readTree(response.body()); } + private JsonNode waitForCompletedExport(String exportId) throws Exception { + Instant deadline = Instant.now().plusSeconds(15); + JsonNode last = null; + while (Instant.now().isBefore(deadline)) { + last = getJson("/api/v1/events/export/" + exportId); + if ("COMPLETED".equals(last.path("status").asText())) { + return last; + } + Thread.sleep(100); + } + return last; + } + private JsonNode waitForDatasourceListStatus(String datasourceId, String expectedStatus) throws Exception { Instant deadline = Instant.now().plusSeconds(15); JsonNode last = null; diff --git a/eventlens-ui/build.gradle.kts b/eventlens-ui/build.gradle.kts index d4ff7fc..e629799 100644 --- a/eventlens-ui/build.gradle.kts +++ b/eventlens-ui/build.gradle.kts @@ -12,6 +12,7 @@ val npmInstall by tasks.registering(Exec::class) { workingDir = projectDir inputs.file("package.json") + inputs.file("package-lock.json") outputs.dir("node_modules") commandLine( @@ -38,6 +39,47 @@ val npmBuild by tasks.registering(Exec::class) { ) } +val npmTestUnit by tasks.registering(Exec::class) { + dependsOn(npmInstall) + group = "verification" + description = "Run frontend unit tests" + workingDir = projectDir + + inputs.dir("src").withPathSensitivity(PathSensitivity.RELATIVE) + inputs.file("package.json") + inputs.file("package-lock.json") + + commandLine( + if (System.getProperty("os.name").lowercase().contains("win")) "npm.cmd" else "npm", + "run", "test:unit" + ) +} + +val npmTestE2e by tasks.registering(Exec::class) { + dependsOn(npmInstall) + group = "verification" + description = "Run frontend Playwright E2E tests" + workingDir = projectDir + + inputs.dir("tests/e2e").withPathSensitivity(PathSensitivity.RELATIVE) + inputs.dir("src").withPathSensitivity(PathSensitivity.RELATIVE) + inputs.file("package.json") + inputs.file("package-lock.json") + inputs.file("playwright.config.ts") + + environment("VITE_EVENTLENS_DEMO", "true") + environment("VITE_EVENTLENS_DEMO_ALLOW", "true") + + commandLine( + if (System.getProperty("os.name").lowercase().contains("win")) "npm.cmd" else "npm", + "run", "test:e2e" + ) +} + tasks.named("build") { dependsOn(npmBuild) } + +tasks.named("check") { + dependsOn(npmTestUnit) +} diff --git a/eventlens-ui/package-lock.json b/eventlens-ui/package-lock.json index 72a06b4..20b4fdc 100644 --- a/eventlens-ui/package-lock.json +++ b/eventlens-ui/package-lock.json @@ -25,7 +25,8 @@ "globals": "^17.4.0", "typescript": "^5.5.3", "typescript-eslint": "^8.57.1", - "vite": "^8.0.2" + "vite": "^8.0.2", + "vitest": "^4.0.7" } }, "node_modules/@axe-core/playwright": { @@ -697,6 +698,13 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", @@ -1002,6 +1010,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, "node_modules/@tanstack/query-core": { "version": "5.95.2", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.95.2.tgz", @@ -1039,6 +1054,24 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/esrecurse": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", @@ -1336,6 +1369,119 @@ } } }, + "node_modules/@vitest/expect": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.1.tgz", + "integrity": "sha512-xAV0fqBTk44Rn6SjJReEQkHP3RrqbJo6JQ4zZ7/uVOiJZRarBtblzrOfFIZeYUrukp2YD6snZG6IBqhOoHTm+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.1", + "@vitest/utils": "4.1.1", + "chai": "^6.2.2", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.1.tgz", + "integrity": "sha512-h3BOylsfsCLPeceuCPAAJ+BvNwSENgJa4hXoXu4im0bs9Lyp4URc4JYK4pWLZ4pG/UQn7AT92K6IByi6rE6g3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.1.tgz", + "integrity": "sha512-GM+TEQN5WhOygr1lp7skeVjdLPqqWMHsfzXrcHAqZJi/lIVh63H0kaRCY8MDhNWikx19zBUK8ceaLB7X5AH9NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.1.tgz", + "integrity": "sha512-f7+FPy75vN91QGWsITueq0gedwUZy1fLtHOCMeQpjs8jTekAHeKP80zfDEnhrleviLHzVSDXIWuCIOFn3D3f8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.1", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.1.tgz", + "integrity": "sha512-kMVSgcegWV2FibXEx9p9WIKgje58lcTbXgnJixfcg15iK8nzCXhmalL0ZLtTWLW9PH1+1NEDShiFFedB3tEgWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.1", + "@vitest/utils": "4.1.1", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.1.tgz", + "integrity": "sha512-6Ti/KT5OVaiupdIZEuZN7l3CZcR0cxnxt70Z0//3CtwgObwA6jZhmVBA3yrXSVN3gmwjgd7oDNLlsXz526gpRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.1.tgz", + "integrity": "sha512-cNxAlaB3sHoCdL6pj6yyUXv9Gry1NHNg0kFTXdvSIZXLHsqKH7chiWOkwJ5s5+d/oMwcoG9T0bKU38JZWKusrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.1", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", @@ -1376,6 +1522,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1439,6 +1595,16 @@ "node": ">= 0.4" } }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1451,6 +1617,13 @@ "node": ">= 0.8" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1549,6 +1722,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -1773,6 +1953,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -1783,6 +1973,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2419,6 +2619,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -2498,6 +2708,17 @@ "dev": true, "license": "MIT" }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2568,6 +2789,13 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -2794,6 +3022,13 @@ "node": ">=8" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2804,6 +3039,37 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -2821,6 +3087,16 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ts-api-utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", @@ -2981,6 +3257,88 @@ } } }, + "node_modules/vitest": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.1.tgz", + "integrity": "sha512-yF+o4POL41rpAzj5KVILUxm1GCjKnELvaqmU9TLLUbMfDzuN0UpUR9uaDs+mCtjPe+uYPksXDRLQGGPvj1cTmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.1", + "@vitest/mocker": "4.1.1", + "@vitest/pretty-format": "4.1.1", + "@vitest/runner": "4.1.1", + "@vitest/snapshot": "4.1.1", + "@vitest/spy": "4.1.1", + "@vitest/utils": "4.1.1", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.1", + "@vitest/browser-preview": "4.1.1", + "@vitest/browser-webdriverio": "4.1.1", + "@vitest/ui": "4.1.1", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2997,6 +3355,23 @@ "node": ">= 8" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/eventlens-ui/package.json b/eventlens-ui/package.json index 99aba88..1e48fac 100644 --- a/eventlens-ui/package.json +++ b/eventlens-ui/package.json @@ -7,6 +7,7 @@ "build": "tsc -b && vite build", "preview": "vite preview", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "test:unit": "vitest run", "test:e2e": "playwright test", "test:e2e:headed": "playwright test --headed" }, @@ -28,7 +29,8 @@ "globals": "^17.4.0", "typescript": "^5.5.3", "typescript-eslint": "^8.57.1", - "vite": "^8.0.2" + "vite": "^8.0.2", + "vitest": "^4.0.7" }, "overrides": { "esbuild": "^0.27.4" diff --git a/eventlens-ui/playwright.config.ts b/eventlens-ui/playwright.config.ts index 3fe8047..f74c3b9 100644 --- a/eventlens-ui/playwright.config.ts +++ b/eventlens-ui/playwright.config.ts @@ -1,14 +1,18 @@ import { defineConfig } from '@playwright/test'; export default defineConfig({ - testDir: '../tests/e2e', + testDir: './tests/e2e', use: { - baseURL: 'http://127.0.0.1:9090', + baseURL: 'http://127.0.0.1:4173', trace: 'retain-on-failure', }, webServer: { command: 'npm run dev -- --host 127.0.0.1 --port 4173', cwd: __dirname, + env: { + VITE_EVENTLENS_DEMO: 'true', + VITE_EVENTLENS_DEMO_ALLOW: 'true', + }, reuseExistingServer: true, url: 'http://127.0.0.1:4173', }, diff --git a/eventlens-ui/src/App.tsx b/eventlens-ui/src/App.tsx index 037d690..b7d6002 100644 --- a/eventlens-ui/src/App.tsx +++ b/eventlens-ui/src/App.tsx @@ -86,6 +86,7 @@ function PluginHealthPage({ datasources, datasourceHealth, plugins }: { } export default function App() { + const [activePanel, setActivePanel] = useState<'state' | 'replay'>('state'); const [selectedAggregate, setSelectedAggregate] = useState(null); const [selectedSequence, setSelectedSequence] = useState(null); const [compareSequence, setCompareSequence] = useState(null); @@ -116,11 +117,13 @@ export default function App() { const seq = params.get('seq'); const compare = params.get('compare'); const tab = params.get('tab') as TabId | null; + const panel = params.get('panel'); const source = params.get('source'); if (aggregateId) setSelectedAggregate(aggregateId); if (seq) setSelectedSequence(Number(seq)); if (compare) setCompareSequence(Number(compare)); if (tab && ['changes', 'before-after', 'raw'].includes(tab)) setActiveTab(tab); + if (panel === 'replay' || panel === 'state') setActivePanel(panel); if (source) setSelectedSource(source); }, []); @@ -130,11 +133,12 @@ export default function App() { if (selectedSequence != null) params.set('seq', String(selectedSequence)); else params.delete('seq'); if (compareSequence != null) params.set('compare', String(compareSequence)); else params.delete('compare'); params.set('tab', activeTab); + params.set('panel', activePanel); if (selectedSource) params.set('source', selectedSource); else params.delete('source'); const qs = params.toString(); const newUrl = `${window.location.pathname}${qs ? `?${qs}` : ''}${window.location.hash}`; window.history.replaceState(null, '', newUrl); - }, [activeTab, compareSequence, selectedAggregate, selectedSequence, selectedSource]); + }, [activePanel, activeTab, compareSequence, selectedAggregate, selectedSequence, selectedSource]); const { data: health } = useQuery({ queryKey: ['health'], queryFn: getHealth, refetchInterval: 30_000 }); const { data: datasources = [] } = useQuery({ queryKey: ['datasources'], queryFn: getDatasources, staleTime: 10_000 }); @@ -167,6 +171,7 @@ export default function App() { setSelectedAggregate(id); setSelectedSequence(null); setCompareSequence(null); + setActivePanel('state'); window.location.hash = '#/timeline'; }; @@ -232,7 +237,7 @@ export default function App() { -
+
{!pluginView && !statsView && (
@@ -243,6 +248,7 @@ export default function App() { Viewing: {selectedAggregate} {selectedSource ? on {selectedSource} : on primary datasource} {compareSequence != null && comparing with seq #{compareSequence}} + Current panel {activePanel}
)} @@ -260,7 +266,10 @@ export default function App() { aggregateId={selectedAggregate} selectedSequence={selectedSequence} compareSequence={compareSequence} - onSelectEvent={setSelectedSequence} + onSelectEvent={seq => { + setSelectedSequence(seq); + setActivePanel('state'); + }} onSelectCompare={setCompareSequence} source={selectedSource || null} /> @@ -271,12 +280,26 @@ export default function App() { sequence={selectedSequence} compareSequence={compareSequence} activeTab={activeTab} - onTabChange={setActiveTab} + onTabChange={tab => { + setActiveTab(tab); + setActivePanel('state'); + }} + active={activePanel === 'state'} + onActivate={() => setActivePanel('state')} source={selectedSource || null} /> )} {selectedAggregate && transitions.length > 0 && ( - + { + setSelectedSequence(seq); + setActivePanel('replay'); + }} + active={activePanel === 'replay'} + onActivate={() => setActivePanel('replay')} + /> )}
diff --git a/eventlens-ui/src/api/client.ts b/eventlens-ui/src/api/client.ts index 5c6a9c8..1cd1000 100644 --- a/eventlens-ui/src/api/client.ts +++ b/eventlens-ui/src/api/client.ts @@ -15,6 +15,7 @@ import { demoAnomalies, demoBisect, demoHealth, + demoStatistics, demoReplayTo, demoSearchAggregates, demoTimeline, @@ -139,6 +140,10 @@ export const getRecentEvents = async (limit = 50, source?: string | null) => { }; export const getStatistics = async (source?: string | null, bucketHours = 1, maxBuckets = 24) => { + if (isDemoMode()) { + await delay(30); + return demoStatistics(bucketHours, maxBuckets); + } const path = withOptionalSource(`/v1/statistics?bucketHours=${bucketHours}&maxBuckets=${maxBuckets}`, source); return api.get(path).then(r => r.data); }; @@ -151,12 +156,57 @@ export const getHealth = async () => { return api.get('/health').then(r => r.data); }; -export const getDatasources = async () => api.get('/v1/datasources').then(r => r.data); +export const getDatasources = async () => { + if (isDemoMode()) { + await delay(20); + return [{ + id: 'demo-primary', + displayName: 'Demo Primary', + status: 'ready', + healthMessage: 'Frontend demo datasource', + capabilities: ['timeline', 'replay', 'statistics'], + }]; + } + return api.get('/v1/datasources').then(r => r.data); +}; -export const getDatasourceHealth = async (id: string) => - api.get(`/v1/datasources/${encodeURIComponent(id)}/health`).then(r => r.data); +export const getDatasourceHealth = async (id: string) => { + if (isDemoMode()) { + await delay(20); + return { + id, + displayName: 'Demo Primary', + status: 'ready', + health: { + state: 'up', + message: 'Frontend demo datasource', + }, + lastHealthCheck: new Date().toISOString(), + failureReason: '', + }; + } + return api.get(`/v1/datasources/${encodeURIComponent(id)}/health`).then(r => r.data); +}; -export const getPlugins = async () => api.get('/v1/plugins').then(r => r.data); +export const getPlugins = async () => { + if (isDemoMode()) { + await delay(20); + return [{ + instanceId: 'demo-source', + typeId: 'demo', + displayName: 'Demo Source Plugin', + pluginType: 'EVENT_SOURCE', + lifecycle: 'ready', + health: { + state: 'up', + message: 'Frontend demo plugin', + }, + lastHealthCheck: new Date().toISOString(), + failureReason: null, + }]; + } + return api.get('/v1/plugins').then(r => r.data); +}; export { DEMO_AGGREGATE_ID } from '../demo/demoData'; diff --git a/eventlens-ui/src/components/CommandPalette.tsx b/eventlens-ui/src/components/CommandPalette.tsx index 4efcf4c..d75154a 100644 --- a/eventlens-ui/src/components/CommandPalette.tsx +++ b/eventlens-ui/src/components/CommandPalette.tsx @@ -20,6 +20,7 @@ interface CommandItem { export default function CommandPalette({ open, selectedSource, onClose, onSelectAggregate, onOpenStats, onOpenPlugins }: Props) { const [query, setQuery] = useState(''); const [selectedIndex, setSelectedIndex] = useState(0); + const [previousFocus, setPreviousFocus] = useState(null); const { data: aggregateResults = [] } = useQuery({ queryKey: ['palette-search', query, selectedSource ?? 'default'], queryFn: () => searchAggregates(query, 8, selectedSource), @@ -30,10 +31,12 @@ export default function CommandPalette({ open, selectedSource, onClose, onSelect useEffect(() => { if (open) { setSelectedIndex(0); + setPreviousFocus(document.activeElement instanceof HTMLElement ? document.activeElement : null); } else { setQuery(''); + previousFocus?.focus(); } - }, [open]); + }, [open, previousFocus]); const commands = useMemo(() => { const base: CommandItem[] = [ @@ -74,7 +77,8 @@ export default function CommandPalette({ open, selectedSource, onClose, onSelect return (
-
e.stopPropagation()}> +
e.stopPropagation()}> +

Search aggregates, open statistics, or open plugin health. Use arrow keys to move and Enter to confirm.

setQuery(e.target.value)} aria-label="Command palette search" /> -
    +
      {commands.map((item, index) => (
    • void; + active?: boolean; + onActivate?: () => void; } -export default function ReplayDebugger({ transitions, selectedSequence, onSelectSequence }: Props) { +export default function ReplayDebugger({ transitions, selectedSequence, onSelectSequence, active = false, onActivate }: Props) { if (!transitions.length) return null; const current = transitions.find(transition => transition.event.sequenceNumber === selectedSequence) ?? transitions[0]; const currentIndex = transitions.findIndex(transition => transition.event.sequenceNumber === current.event.sequenceNumber); return ( -
      +
      Replay Debugger
      - +
      Event {currentIndex + 1} of {transitions.length}
      - +
      Current State
      -
+ ); } diff --git a/eventlens-ui/src/components/SearchBar.tsx b/eventlens-ui/src/components/SearchBar.tsx index 0668994..2800b5e 100644 --- a/eventlens-ui/src/components/SearchBar.tsx +++ b/eventlens-ui/src/components/SearchBar.tsx @@ -45,7 +45,9 @@ export default function SearchBar({ onSelect, source }: Props) { inputRef.current?.select(); }, []); useEffect(() => { - document.getElementById('aggregate-search')?.addEventListener('focus', focus as never); + const input = document.getElementById('aggregate-search'); + input?.addEventListener('focus', focus as never); + return () => input?.removeEventListener('focus', focus as never); }, [focus]); const handleSelect = (id: string) => { @@ -73,9 +75,12 @@ export default function SearchBar({ onSelect, source }: Props) { if (e.key === 'Escape') setOpen(false); }} autoComplete="off" + aria-expanded={open} + aria-controls="aggregate-search-results" + aria-autocomplete="list" /> {open && results.length > 0 && ( -
+
{results.map(id => (
+ ); } diff --git a/eventlens-ui/src/components/StatisticsPanel.tsx b/eventlens-ui/src/components/StatisticsPanel.tsx index cc55340..ae506f1 100644 --- a/eventlens-ui/src/components/StatisticsPanel.tsx +++ b/eventlens-ui/src/components/StatisticsPanel.tsx @@ -6,7 +6,7 @@ export default function StatisticsPanel({ source }: { source?: string | null }) const { data, isLoading } = useStatistics(source, 1, windowHours); return ( -
+
Statistics {source ? `- ${source}` : ''}
{[6, 24, 72].map(hours => ( @@ -52,6 +52,6 @@ export default function StatisticsPanel({ source }: { source?: string | null })
)} -
+ ); } diff --git a/eventlens-ui/src/components/Timeline.tsx b/eventlens-ui/src/components/Timeline.tsx index e273b31..452b88c 100644 --- a/eventlens-ui/src/components/Timeline.tsx +++ b/eventlens-ui/src/components/Timeline.tsx @@ -2,6 +2,7 @@ import { useEffect, useMemo, useRef, useState } from 'react'; import type { StoredEvent } from '../api/client'; import { useTimeline } from '../hooks/useTimeline'; import { parseEventTimestamp } from '../utils/time'; +import { buildSegments, flattenRows, groupKey, toggleCompareSequence, type TimelineRow } from '../utils/timelineRows'; interface Props { aggregateId: string; @@ -12,29 +13,11 @@ interface Props { source?: string | null; } -const MIN_SAME_TYPE_RUN = 4; const ROW_HEIGHT = 58; const VIEWPORT_HEIGHT = 360; const OVERSCAN = 6; const ZOOM_OPTIONS = [1, 6, 24, 168] as const; -type Segment = - | { kind: 'single'; event: StoredEvent; index: number } - | { kind: 'group'; eventType: string; items: StoredEvent[]; startIndex: number }; - -type TimelineRow = - | { kind: 'single'; key: string; event: StoredEvent; stepNumber: number } - | { - kind: 'group'; - key: string; - eventType: string; - items: StoredEvent[]; - startIndex: number; - expanded: boolean; - containsSelection: boolean; - } - | { kind: 'group-item'; key: string; event: StoredEvent; stepNumber: number; parentKey: string }; - function dotClass(eventType: string): string { const t = eventType.toLowerCase(); if (t.includes('created') || t.includes('opened') || t.includes('placed') || t.includes('submitted')) return 'created'; @@ -45,80 +28,6 @@ function dotClass(eventType: string): string { return 'default'; } -function buildSegments(events: StoredEvent[]): Segment[] { - const out: Segment[] = []; - let i = 0; - while (i < events.length) { - const type = events[i].eventType; - let j = i + 1; - while (j < events.length && events[j].eventType === type) { - j += 1; - } - const runLen = j - i; - if (runLen >= MIN_SAME_TYPE_RUN) { - out.push({ - kind: 'group', - eventType: type, - items: events.slice(i, j), - startIndex: i, - }); - } else { - for (let k = i; k < j; k += 1) { - out.push({ kind: 'single', event: events[k], index: k }); - } - } - i = j; - } - return out; -} - -function groupKey(startIndex: number, len: number): string { - return `${startIndex}-${len}`; -} - -function flattenRows( - segments: Segment[], - expandedGroupKey: string | null, - selectedSequence: number | null, -): TimelineRow[] { - const rows: TimelineRow[] = []; - for (const segment of segments) { - if (segment.kind === 'single') { - rows.push({ - kind: 'single', - key: `single-${segment.event.sequenceNumber}`, - event: segment.event, - stepNumber: segment.index + 1, - }); - continue; - } - - const key = groupKey(segment.startIndex, segment.items.length); - const containsSelection = selectedSequence != null - && segment.items.some(item => item.sequenceNumber === selectedSequence); - const expanded = expandedGroupKey === key; - rows.push({ - kind: 'group', - key: `group-${key}`, - eventType: segment.eventType, - items: segment.items, - startIndex: segment.startIndex, - expanded, - containsSelection, - }); - if (expanded) { - rows.push(...segment.items.map((event, index) => ({ - kind: 'group-item' as const, - key: `group-item-${event.sequenceNumber}`, - event, - stepNumber: segment.startIndex + index + 1, - parentKey: key, - }))); - } - } - return rows; -} - function firstSequenceForRow(row: TimelineRow): number { switch (row.kind) { case 'single': @@ -391,7 +300,7 @@ export default function Timeline({ style={{ position: 'absolute', top, left: 0, right: 0, height: ROW_HEIGHT - 6 }} onClick={e => { if (e.shiftKey && onSelectCompare) { - onSelectCompare(event.sequenceNumber === compareSequence ? null : event.sequenceNumber); + onSelectCompare(toggleCompareSequence(compareSequence, event.sequenceNumber)); } else { onSelectEvent(event.sequenceNumber); } diff --git a/eventlens-ui/src/demo/demoData.ts b/eventlens-ui/src/demo/demoData.ts index 55ff7eb..fdb6c16 100644 --- a/eventlens-ui/src/demo/demoData.ts +++ b/eventlens-ui/src/demo/demoData.ts @@ -1,6 +1,7 @@ import type { AnomalyReport, BisectResult, + EventStatistics, FieldChange, ReplayResult, StateTransition, @@ -392,3 +393,30 @@ export function demoLiveStreamSeed(): StoredEvent[] { export function demoHealth(): { status: string; version: string; demo: boolean } { return { status: 'UP', version: 'demo', demo: true }; } + +export function demoStatistics(bucketHours = 1, maxBuckets = 24): EventStatistics { + const bucketMs = Math.max(bucketHours, 1) * 60 * 60 * 1000; + const sorted = [...DEMO_EVENTS].sort((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp)); + const bucketCounts = new Map(); + const eventTypes = new Map(); + const aggregateTypes = new Map(); + + for (const event of sorted) { + const bucketStart = new Date(Math.floor(Date.parse(event.timestamp) / bucketMs) * bucketMs).toISOString(); + bucketCounts.set(bucketStart, (bucketCounts.get(bucketStart) ?? 0) + 1); + eventTypes.set(event.eventType, (eventTypes.get(event.eventType) ?? 0) + 1); + aggregateTypes.set(event.aggregateType, (aggregateTypes.get(event.aggregateType) ?? 0) + 1); + } + + return { + totalEvents: DEMO_EVENTS.length, + distinctAggregates: 1, + eventTypes: [...eventTypes.entries()].map(([type, count]) => ({ type, count })), + aggregateTypes: [...aggregateTypes.entries()].map(([type, count]) => ({ type, count })), + throughput: [...bucketCounts.entries()] + .slice(-Math.max(maxBuckets, 1)) + .map(([bucket, count]) => ({ bucket, count })), + available: true, + message: null, + }; +} diff --git a/eventlens-ui/src/index.css b/eventlens-ui/src/index.css index c1c2552..046c72a 100644 --- a/eventlens-ui/src/index.css +++ b/eventlens-ui/src/index.css @@ -2746,3 +2746,14 @@ body::after { .diff-split-row--changed .diff-split-old { background: rgba(255,51,85,0.06); } +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} diff --git a/eventlens-ui/src/utils/jsonDiff.test.ts b/eventlens-ui/src/utils/jsonDiff.test.ts new file mode 100644 index 0000000..c5136eb --- /dev/null +++ b/eventlens-ui/src/utils/jsonDiff.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from 'vitest'; +import { diffJson } from './jsonDiff'; + +describe('diffJson', () => { + it('returns no patches for structurally equal objects', () => { + expect(diffJson({ a: 1, nested: { b: true } }, { a: 1, nested: { b: true } })).toEqual([]); + }); + + it('captures nested array and object changes', () => { + expect(diffJson( + { account: { balance: 10, tags: ['open', 'vip'] } }, + { account: { balance: 25, tags: ['open', 'priority'], owner: 'alice' } }, + )).toEqual([ + { path: '$.account.balance', type: 'changed', oldValue: 10, newValue: 25 }, + { path: '$.account.tags[1]', type: 'changed', oldValue: 'vip', newValue: 'priority' }, + { path: '$.account.owner', type: 'added', newValue: 'alice' }, + ]); + }); + + it('marks removals when right-side values disappear', () => { + expect(diffJson( + { before: { status: 'open', retries: 2 } }, + { before: { status: 'open' } }, + )).toEqual([ + { path: '$.before.retries', type: 'removed', oldValue: 2 }, + ]); + }); +}); diff --git a/eventlens-ui/src/utils/jsonDiff.ts b/eventlens-ui/src/utils/jsonDiff.ts new file mode 100644 index 0000000..d822b2f --- /dev/null +++ b/eventlens-ui/src/utils/jsonDiff.ts @@ -0,0 +1,49 @@ +import type { DiffPatch } from '../api/types'; + +function isObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +function valuesEqual(left: unknown, right: unknown): boolean { + return JSON.stringify(left) === JSON.stringify(right); +} + +function diffRecursive(left: unknown, right: unknown, path: string, patches: DiffPatch[]): void { + if (valuesEqual(left, right)) { + return; + } + + if (left === undefined || left === null) { + patches.push({ path, type: 'added', newValue: right }); + return; + } + + if (right === undefined || right === null) { + patches.push({ path, type: 'removed', oldValue: left }); + return; + } + + if (Array.isArray(left) && Array.isArray(right)) { + const max = Math.max(left.length, right.length); + for (let index = 0; index < max; index += 1) { + diffRecursive(left[index], right[index], `${path}[${index}]`, patches); + } + return; + } + + if (isObject(left) && isObject(right)) { + const keys = new Set([...Object.keys(left), ...Object.keys(right)]); + for (const key of keys) { + diffRecursive(left[key], right[key], path === '$' ? `$.${key}` : `${path}.${key}`, patches); + } + return; + } + + patches.push({ path, type: 'changed', oldValue: left, newValue: right }); +} + +export function diffJson(left: unknown, right: unknown): DiffPatch[] { + const patches: DiffPatch[] = []; + diffRecursive(left, right, '$', patches); + return patches; +} diff --git a/eventlens-ui/src/utils/timelineRows.test.ts b/eventlens-ui/src/utils/timelineRows.test.ts new file mode 100644 index 0000000..4532235 --- /dev/null +++ b/eventlens-ui/src/utils/timelineRows.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from 'vitest'; +import type { StoredEvent } from '../api/types'; +import { buildSegments, flattenRows, groupKey, toggleCompareSequence } from './timelineRows'; + +function event(sequenceNumber: number, eventType: string): StoredEvent { + return { + eventId: `evt-${sequenceNumber}`, + aggregateId: 'agg-1', + aggregateType: 'Order', + sequenceNumber, + eventType, + payload: null, + metadata: '{}', + timestamp: '2026-03-25T10:00:00Z', + globalPosition: sequenceNumber, + }; +} + +describe('timeline row helpers', () => { + it('groups long same-type runs while leaving short runs expanded as singles', () => { + const segments = buildSegments([ + event(1, 'Created'), + event(2, 'Updated'), + event(3, 'Updated'), + event(4, 'Updated'), + event(5, 'Updated'), + event(6, 'Published'), + ]); + + expect(segments).toHaveLength(3); + expect(segments[0].kind).toBe('single'); + expect(segments[1]).toMatchObject({ kind: 'group', eventType: 'Updated', startIndex: 1 }); + expect(segments[2].kind).toBe('single'); + }); + + it('expands grouped rows and marks the selected group', () => { + const segments = buildSegments([ + event(1, 'Updated'), + event(2, 'Updated'), + event(3, 'Updated'), + event(4, 'Updated'), + ]); + const expandedKey = groupKey(0, 4); + + const rows = flattenRows(segments, expandedKey, 3); + + expect(rows[0]).toMatchObject({ kind: 'group', expanded: true, containsSelection: true }); + expect(rows.slice(1)).toHaveLength(4); + expect(rows[2]).toMatchObject({ kind: 'group-item', stepNumber: 2 }); + }); + + it('toggles compare selection off when the same event is shift-clicked again', () => { + expect(toggleCompareSequence(null, 12)).toBe(12); + expect(toggleCompareSequence(12, 12)).toBeNull(); + expect(toggleCompareSequence(12, 13)).toBe(13); + }); +}); diff --git a/eventlens-ui/src/utils/timelineRows.ts b/eventlens-ui/src/utils/timelineRows.ts new file mode 100644 index 0000000..98acc8f --- /dev/null +++ b/eventlens-ui/src/utils/timelineRows.ts @@ -0,0 +1,99 @@ +import type { StoredEvent } from '../api/types'; + +export const MIN_SAME_TYPE_RUN = 4; + +export type Segment = + | { kind: 'single'; event: StoredEvent; index: number } + | { kind: 'group'; eventType: string; items: StoredEvent[]; startIndex: number }; + +export type TimelineRow = + | { kind: 'single'; key: string; event: StoredEvent; stepNumber: number } + | { + kind: 'group'; + key: string; + eventType: string; + items: StoredEvent[]; + startIndex: number; + expanded: boolean; + containsSelection: boolean; + } + | { kind: 'group-item'; key: string; event: StoredEvent; stepNumber: number; parentKey: string }; + +export function buildSegments(events: StoredEvent[]): Segment[] { + const out: Segment[] = []; + let index = 0; + while (index < events.length) { + const type = events[index].eventType; + let next = index + 1; + while (next < events.length && events[next].eventType === type) { + next += 1; + } + const runLength = next - index; + if (runLength >= MIN_SAME_TYPE_RUN) { + out.push({ + kind: 'group', + eventType: type, + items: events.slice(index, next), + startIndex: index, + }); + } else { + for (let cursor = index; cursor < next; cursor += 1) { + out.push({ kind: 'single', event: events[cursor], index: cursor }); + } + } + index = next; + } + return out; +} + +export function groupKey(startIndex: number, length: number): string { + return `${startIndex}-${length}`; +} + +export function flattenRows( + segments: Segment[], + expandedGroupKey: string | null, + selectedSequence: number | null, +): TimelineRow[] { + const rows: TimelineRow[] = []; + for (const segment of segments) { + if (segment.kind === 'single') { + rows.push({ + kind: 'single', + key: `single-${segment.event.sequenceNumber}`, + event: segment.event, + stepNumber: segment.index + 1, + }); + continue; + } + + const key = groupKey(segment.startIndex, segment.items.length); + const containsSelection = selectedSequence != null + && segment.items.some(item => item.sequenceNumber === selectedSequence); + const expanded = expandedGroupKey === key; + rows.push({ + kind: 'group', + key: `group-${key}`, + eventType: segment.eventType, + items: segment.items, + startIndex: segment.startIndex, + expanded, + containsSelection, + }); + + if (expanded) { + rows.push(...segment.items.map((event, index) => ({ + kind: 'group-item' as const, + key: `group-item-${event.sequenceNumber}`, + event, + stepNumber: segment.startIndex + index + 1, + parentKey: key, + }))); + } + } + return rows; +} + +export function toggleCompareSequence(currentCompareSequence: number | null | undefined, nextSequence: number): number | null { + return currentCompareSequence === nextSequence ? null : nextSequence; +} diff --git a/eventlens-ui/src/workers/json-diff.worker.ts b/eventlens-ui/src/workers/json-diff.worker.ts index 90684f7..286e803 100644 --- a/eventlens-ui/src/workers/json-diff.worker.ts +++ b/eventlens-ui/src/workers/json-diff.worker.ts @@ -17,50 +17,13 @@ export interface DiffResult { durationMs: number; } -function isObject(value: unknown): value is Record { - return typeof value === 'object' && value !== null && !Array.isArray(value); -} - -function diffRecursive(left: unknown, right: unknown, path: string, patches: DiffPatch[]): void { - if (JSON.stringify(left) === JSON.stringify(right)) { - return; - } - - if (left === undefined || left === null) { - patches.push({ path, type: 'added', newValue: right }); - return; - } - if (right === undefined || right === null) { - patches.push({ path, type: 'removed', oldValue: left }); - return; - } - - if (Array.isArray(left) && Array.isArray(right)) { - const max = Math.max(left.length, right.length); - for (let i = 0; i < max; i += 1) { - diffRecursive(left[i], right[i], `${path}[${i}]`, patches); - } - return; - } - - if (isObject(left) && isObject(right)) { - const keys = new Set([...Object.keys(left), ...Object.keys(right)]); - for (const key of keys) { - diffRecursive(left[key], right[key], path === '$' ? `$.${key}` : `${path}.${key}`, patches); - } - return; - } - - patches.push({ path, type: 'changed', oldValue: left, newValue: right }); -} +import { diffJson } from '../utils/jsonDiff'; self.onmessage = (event: MessageEvent) => { const start = performance.now(); - const patches: DiffPatch[] = []; - diffRecursive(event.data.left, event.data.right, '$', patches); const payload: DiffResult = { requestId: event.data.requestId, - patches, + patches: diffJson(event.data.left, event.data.right), durationMs: performance.now() - start, }; self.postMessage(payload); diff --git a/eventlens-ui/vitest.config.ts b/eventlens-ui/vitest.config.ts new file mode 100644 index 0000000..665a9fd --- /dev/null +++ b/eventlens-ui/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + exclude: ['tests/e2e/**'], + }, +}); From 60ae4ab8d392ff3b3a7d83649357748f35245425 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Wed, 25 Mar 2026 18:04:11 +0200 Subject: [PATCH 05/10] feat(v4): polish replay and workspace navigation --- .../resources/web/assets/index-2dMaJUyt.css | 1 + .../resources/web/assets/index-B30Asjwx.css | 1 - .../resources/web/assets/index-C4jzZb0y.js | 14 - .../resources/web/assets/index-DXJiUi5_.js | 14 + .../src/main/resources/web/index.html | 4 +- .../api/SourceAwarePanelsIntegrationTest.java | 60 ++- eventlens-ui/src/App.tsx | 179 ++++---- eventlens-ui/src/components/AnomalyPanel.tsx | 15 +- .../src/components/CommandPalette.tsx | 10 +- eventlens-ui/src/components/LiveStream.tsx | 30 +- .../src/components/ReplayDebugger.tsx | 170 +++++++- eventlens-ui/src/components/SearchBar.tsx | 7 +- .../src/components/StatisticsPanel.tsx | 7 +- eventlens-ui/src/components/Timeline.tsx | 236 +++++++---- eventlens-ui/src/index.css | 389 +++++++++++++++++- 15 files changed, 922 insertions(+), 215 deletions(-) create mode 100644 eventlens-api/src/main/resources/web/assets/index-2dMaJUyt.css delete mode 100644 eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css delete mode 100644 eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js create mode 100644 eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js diff --git a/eventlens-api/src/main/resources/web/assets/index-2dMaJUyt.css b/eventlens-api/src/main/resources/web/assets/index-2dMaJUyt.css new file mode 100644 index 0000000..7b112cc --- /dev/null +++ b/eventlens-api/src/main/resources/web/assets/index-2dMaJUyt.css @@ -0,0 +1 @@ +:root{--bg-base:#050508;--bg-surface:#0a0c14;--bg-raised:#0f1220;--bg-elevated:#161b2e;--bg-panel:linear-gradient(145deg, #0c0f1a 0%, #0a0d18 50%, #080b14 100%);--border:#1a2040;--border-muted:#121830;--border-glow:#00f0ff26;--text-primary:#e8eef8;--text-secondary:#94a3c0;--text-muted:#5a6a8a;--neon-cyan:#00f0ff;--neon-cyan-dim:#00f0ff14;--neon-cyan-mid:#00f0ff40;--neon-magenta:#ff00e5;--neon-magenta-dim:#ff00e514;--neon-green:#0f8;--neon-green-dim:#00ff881a;--neon-amber:#fa0;--neon-amber-dim:#ffaa001a;--neon-red:#f35;--neon-red-dim:#ff33551a;--neon-purple:#a855f7;--accent-blue:#4f9cf9;--accent-blue-dim:#4f9cf926;--accent-green:var(--neon-green);--accent-red:var(--neon-red);--accent-yellow:var(--neon-amber);--accent-purple:var(--neon-purple);--font-sans:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-display:"Orbitron", var(--font-sans);--radius:6px;--radius-lg:10px;--shadow:0 4px 24px #0009;--shadow-neon:0 0 20px #00f0ff14, 0 0 60px #00f0ff08;--transition:.2s ease;--bottom-panel-scroll-height:280px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00f0ff04 2px 4px);position:fixed;inset:0}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{--header-pad-x:24px;--header-pad-right:48px;--header-control-h:34px;padding:0 var(--header-pad-right) 0 var(--header-pad-x);border-bottom:1px solid var(--border);z-index:100;background:linear-gradient(#0d1020 0%,#080b14 100%);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(12px,2vw,20px);height:64px;display:grid;position:sticky;top:0;box-shadow:0 2px 20px #00000080,inset 0 -1px #00f0ff0f}.brand{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:relative}.brand-logo svg{width:36px;height:36px;filter:drop-shadow(0 0 6px var(--neon-cyan)) drop-shadow(0 0 12px #00f0ff4d)}.brand-name{font-family:var(--font-display);letter-spacing:1.5px;color:var(--text-primary);text-transform:uppercase;font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);letter-spacing:.5px;font-size:10px}.header-title{font-family:var(--font-display);letter-spacing:3px;text-transform:uppercase;background:linear-gradient(135deg, var(--neon-cyan), #4facfe, var(--neon-magenta));-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 8px #00f0ff66);text-align:center;-webkit-background-clip:text;background-clip:text;flex-shrink:0;margin:0;font-size:20px;font-weight:800;line-height:1}.header-center{flex-flow:row;justify-content:center;justify-self:center;align-items:center;gap:clamp(10px,1.5vw,16px);min-width:0;display:flex}.header-demo-pill{box-sizing:border-box;height:var(--header-control-h);background:var(--neon-amber-dim);color:var(--neon-amber);font-family:var(--font-mono);white-space:nowrap;border:1px solid #ffaa0059;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0 12px;font-size:11px;line-height:1;display:inline-flex}.header-actions{flex-direction:row;justify-content:flex-end;justify-self:end;align-items:center;gap:clamp(10px,1.2vw,16px);min-width:0;display:flex}.header-actions .conn-stats,.header-actions .header-status{flex-shrink:0}.workspace-datasource{flex-direction:column;gap:6px;min-width:0;margin:0;display:flex}.workspace-datasource-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;line-height:1}.workspace-datasource-select{box-sizing:border-box;appearance:none;width:100%;height:34px;color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);background-color:#0c1020f2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3c0' d='M3 4.5 6 8l3-3.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;border:1px solid #ffffff24;border-radius:8px;padding:0 32px 0 12px;font-size:12px;line-height:1;box-shadow:inset 0 1px #00f0ff0f}.workspace-datasource-select:hover{border-color:#00f0ff40}.workspace-datasource-select:focus{border-color:var(--neon-cyan-mid);outline:none;box-shadow:0 0 0 1px #00f0ff33}.header-status{font-size:12px;font-family:var(--font-sans);letter-spacing:.3px;align-items:center;gap:8px;display:flex}.header-status .status-text{color:var(--neon-green);text-shadow:0 0 8px #00ff8880}.header-status .status-text.offline{color:var(--neon-red);text-shadow:0 0 8px #ff335580}.dot{border-radius:50%;width:8px;height:8px}.dot-green{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green), 0 0 12px #0f86;animation:2s infinite pulse-neon}.dot-red{background:var(--neon-red);box-shadow:0 0 6px var(--neon-red)}.dot-yellow{background:var(--neon-amber);box-shadow:0 0 6px var(--neon-amber);animation:1.5s infinite pulse-neon}@keyframes pulse-neon{0%,to{opacity:1}50%{opacity:.4}}.app-main{flex-direction:column;flex:1;gap:16px;width:100%;max-width:1440px;margin:0 auto;padding:20px;display:flex}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow), var(--shadow-neon);padding:20px;position:relative;overflow:hidden}.card.card--dropdown-host{z-index:30;overflow:visible}.card:before{content:"";background:linear-gradient(90deg, transparent, var(--neon-cyan-mid), transparent);height:1px;position:absolute;top:0;left:0;right:0}.card:after{content:"";background:linear-gradient(90deg,#0000,#ff00e51a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.card-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;text-shadow:0 0 6px #00f0ff33;align-items:center;gap:8px;margin-bottom:16px;font-size:13px;font-weight:600;display:flex}.control-ribbon{padding:14px 18px}.control-ribbon-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.control-ribbon-title{margin-bottom:4px}.control-ribbon-subtitle{color:var(--text-muted);font-size:12px}.control-ribbon-nav{align-items:center;gap:12px;font-size:13px;display:inline-flex}.control-ribbon-nav a{text-decoration:none}.control-ribbon-nav a[aria-current=page]{text-underline-offset:2px;text-decoration:underline}.control-panel{gap:12px;padding:16px 18px;display:grid}.control-panel-grid{grid-template-columns:minmax(220px,360px) minmax(0,1fr);align-items:end;gap:12px;display:grid}.control-field,.control-field--search{min-width:0}.control-field-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;display:block}.control-select{width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);background:#0d1123eb;border:1px solid #ffffff24;border-radius:10px;outline:none;padding:10px 12px;font-size:12px}.control-select:focus{border-color:var(--neon-cyan-mid);box-shadow:0 0 14px #00f0ff26}.datasource-pills{flex-wrap:wrap;gap:8px;display:flex}.datasource-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:4px 8px}.selection-summary{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);margin-top:2px}.selection-clear-btn{color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border:none;margin-left:12px}.selection-clear-btn:hover{color:var(--neon-cyan)}.event-agg-button,.anomaly-aggregate-link{cursor:pointer;background:0 0;border:none;padding:0}.event-agg-button{color:var(--text-secondary);font:inherit}.event-agg-button:hover,.event-agg-button:focus-visible{color:var(--neon-cyan);text-shadow:0 0 8px #00f0ff47}.anomaly-aggregate-link .anomaly-meta-value{color:var(--neon-cyan)}.anomaly-aggregate-link:hover .anomaly-meta-value,.anomaly-aggregate-link:focus-visible .anomaly-meta-value{text-shadow:0 0 8px #00f0ff4d}.workspace-dock{z-index:110;border:1px solid var(--border-muted);pointer-events:auto;border-right:none;border-radius:10px 0 0 10px;flex-direction:row;align-items:center;width:auto;height:auto;max-height:min(72vh,100vh - 112px);transition:box-shadow .2s;display:flex;position:fixed;inset:50% 0 auto auto;overflow:hidden;transform:translateY(-50%);box-shadow:-6px 4px 22px #0000006b}.workspace-dock--open{box-shadow:-8px 6px 28px #0000007a,0 0 0 1px #00f0ff14}.workspace-dock-handle{border:none;border-left:1px solid var(--border-muted);width:36px;height:36px;color:var(--neon-cyan);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition), color var(--transition);background:linear-gradient(#0f1324 0%,#0a0e18 100%);flex-direction:row;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.workspace-dock-handle:hover{color:var(--text-primary);background:linear-gradient(#141a30 0%,#0d1220 100%)}.workspace-dock-handle:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:-2px}.workspace-dock-chevron{font-size:15px;font-weight:700;line-height:1}.workspace-dock-panel{border-left:1px solid var(--border);background:linear-gradient(145deg,#0c101c 0%,#080c14 100%);flex-direction:column;flex:0 auto;gap:8px;width:min(252px,100vw - 48px);min-width:0;max-height:min(72vh,100vh - 112px);padding:10px 12px 12px 14px;display:flex;overflow:hidden auto}.workspace-dock-panel[hidden]{display:none!important}.workspace-dock-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:12px;font-weight:600}.workspace-dock-scrim{z-index:109;cursor:pointer;background:#03050c73;border:none;margin:0;padding:0;position:fixed;inset:64px 0 36px}.workspace-sidebar-kpis{border:1px solid var(--border-muted);border-radius:var(--radius);background:#080b148c;gap:6px;padding:8px 10px;display:grid}.workspace-kpi-row{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);justify-content:space-between;gap:8px;display:flex}.workspace-kpi-row strong{color:var(--text-primary)}.workspace-sidebar-links{color:var(--text-secondary);gap:6px;font-size:12px;display:grid}.workspace-content{gap:16px;display:grid}.search-panel{width:100%;min-width:0}.selection-clear-btn:focus-visible,.control-ribbon-nav a:focus-visible,.control-select:focus-visible,.workspace-datasource-select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.plugin-dashboard{gap:14px;display:grid}.plugin-cards-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.plugin-cards-grid--dense{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plugin-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(140deg,#101527f2,#0a0e1cf2);padding:12px 14px;box-shadow:inset 0 1px #ffffff05}.plugin-card--interactive{transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition)}.plugin-card--interactive:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 16px #00f0ff1a}.plugin-card--interactive:focus-within{border-color:var(--neon-cyan-mid);box-shadow:0 0 0 2px #00f0ff26}.plugin-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.plugin-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:2px 8px}.plugin-card-meta{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);overflow-wrap:anywhere;margin-top:8px}.plugin-card-detail{color:var(--text-secondary);margin-top:8px;font-size:12px;line-height:1.55}.search-wrapper{position:relative}.search-input{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);outline:none;padding:14px 16px 14px 44px;font-size:13px}.search-input:focus{border-color:var(--neon-cyan);box-shadow:0 0 14px #00f0ff2e}.search-input::placeholder{color:var(--text-muted)}.search-icon{color:var(--neon-cyan);pointer-events:none;filter:drop-shadow(0 0 4px #00f0ff80);font-size:16px;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.search-results{background:var(--bg-raised);border:1px solid var(--neon-cyan-mid);border-radius:var(--radius);z-index:500;max-height:min(55vh,420px);position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden auto;box-shadow:0 12px 40px #000000a6,0 0 24px #00f0ff14}.search-result-item{cursor:pointer;transition:background var(--transition);font-family:var(--font-mono);color:var(--text-primary);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:13px;display:flex}.search-result-item:hover{background:var(--bg-elevated);box-shadow:inset 3px 0 0 var(--neon-cyan)}.search-result-item+.search-result-item{border-top:1px solid var(--border-muted)}.search-result-chevron{color:var(--text-muted);flex-shrink:0;padding-right:4px}.search-result-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:0 6px;min-width:0;display:flex}.search-result-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;font-size:10px}.search-result-colon{color:var(--text-muted);flex-shrink:0;margin-right:2px}.search-result-value{overflow-wrap:anywhere;word-break:break-word;flex:1;min-width:0}.conn-stats{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:16px;font-size:11px;display:flex}.conn-stat{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.conn-stat-label{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);font-size:9px}.conn-stat-value{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66;font-size:12px}.conn-stat-value.green{color:var(--neon-green);text-shadow:0 0 6px #0f86}.conn-stat-value.amber{color:var(--neon-amber);text-shadow:0 0 6px #fa06}.conn-stat--metric .conn-stat-value,.conn-stat-value--uptime{text-align:right;font-variant-numeric:tabular-nums;min-width:6.5ch;display:inline-block}.mini-wave{align-items:flex-end;gap:1px;height:24px;display:flex}.mini-wave-bar{background:var(--neon-cyan);border-radius:1px;width:3px;animation:1.2s ease-in-out infinite wave-pulse;box-shadow:0 0 4px #00f0ff4d}@keyframes wave-pulse{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}.timeline-count-pill{color:var(--accent-blue);font-family:var(--font-mono);background:var(--accent-blue-dim);border:1px solid #4f9cf940;border-radius:999px;padding:2px 10px;font-size:11px}.timeline-hint{color:var(--text-muted);max-width:52rem;margin:-8px 0 12px;font-size:12px;line-height:1.5}.timeline-rail{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-base);position:relative;box-shadow:inset 0 1px #00f0ff0a}.timeline-stepper{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);padding:12px 14px 14px;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.timeline-stepper-track{flex-wrap:nowrap;align-items:center;gap:4px;width:max-content;min-height:88px;display:flex}.timeline-step-arrow{color:var(--text-muted);opacity:.7;flex-shrink:0;align-self:center;padding:0 2px;font-size:11px}.timeline-step-arrow-compact{padding:0 1px;font-size:9px}.timeline-step{border-radius:var(--radius);border:1px solid var(--border-muted);background:var(--bg-raised);cursor:pointer;text-align:left;min-width:118px;max-width:200px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-step-compact{gap:2px;min-width:96px;max-width:140px;padding:8px 10px}.timeline-step-compact .timeline-step-badge{font-size:8px}.timeline-step-compact .timeline-step-type{-webkit-line-clamp:1;font-size:10px}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-step-badge{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:10px;font-weight:600}.timeline-step-seq{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.timeline-step-type{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.timeline-step-created{border-left:3px solid var(--neon-green)}.timeline-step-deleted{border-left:3px solid var(--neon-red)}.timeline-step-completed{border-left:3px solid var(--neon-green)}.timeline-step-failed{border-left:3px solid var(--neon-red)}.timeline-step-transfer{border-left:3px solid var(--neon-amber)}.timeline-step-item{border-left:3px solid var(--neon-purple)}.timeline-step-progress{border-left:3px solid #38bdf8}.timeline-step-default{border-left:3px solid var(--neon-cyan)}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);cursor:pointer;text-align:left;min-width:140px;max-width:240px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-group-chip.expanded{border-color:#00f0ff59}.timeline-group-count{font-family:var(--font-display);letter-spacing:.5px;color:var(--neon-cyan);font-size:16px;font-weight:800;line-height:1}.timeline-group-chevron{color:var(--text-muted);font-size:10px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.timeline-group-range{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);line-height:1.4}.timeline-expanded-deck{border-top:1px solid var(--border-muted);background:#00000040;padding:10px 14px 14px}.timeline-expanded-head{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.timeline-expanded-title{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:12px;font-weight:700}.timeline-expanded-meta{font-family:var(--font-mono);color:var(--text-muted);flex:1;font-size:11px}.timeline-expanded-close{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-raised);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition);margin-left:auto;padding:4px 12px;font-size:11px}.timeline-expanded-close:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan)}.timeline-expanded-strip{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex-wrap:nowrap;align-items:center;gap:4px;width:100%;padding-bottom:6px;display:flex;overflow-x:auto}.timeline-slider{width:100%;accent-color:var(--neon-cyan);cursor:pointer;margin-top:4px}.timeline-info{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);grid-template-columns:minmax(0,1fr) minmax(0,2.2fr) minmax(0,1fr);align-items:start;gap:12px;margin-top:12px;display:grid}.timeline-info-edge{color:var(--text-muted);font-size:11px}.timeline-info-center{text-align:center;color:var(--text-secondary);line-height:1.55}.timeline-info-center strong{color:var(--neon-cyan);font-weight:600}.timeline-info-muted{color:var(--text-muted);font-weight:400}.timeline-info-type{color:var(--text-primary);font-size:11px}.state-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.state-panel h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px;font-size:10px;font-weight:600}.state-panel-before h4{color:var(--text-muted)}.state-panel-after h4{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.json-block{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);font-family:var(--font-mono);max-height:260px;color:var(--text-secondary);white-space:pre;padding:12px;font-size:12px;line-height:1.7;overflow:auto}.json-tree-root{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);max-height:320px;font-family:var(--font-mono);color:var(--text-secondary);padding:10px 12px;font-size:13px;line-height:1.75;overflow:auto}.json-tree-line{flex-wrap:wrap;align-items:baseline;gap:2px 0;min-height:1.5em;display:flex}.json-tree-toggle{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-right:4px;padding:0;font-size:10px;line-height:1}.json-tree-toggle:hover{color:var(--neon-cyan);background:var(--neon-cyan-dim)}.json-key{color:#7dd3fc}.json-string{color:#86efac}.json-number{color:#fcd34d}.json-boolean{color:#c4b5fd}.json-null{color:var(--text-muted);font-style:italic}.json-punct{color:var(--text-muted)}.json-ellipsis{color:var(--text-muted);font-size:11px;font-style:italic}.json-unknown{color:var(--neon-amber)}.diff-panel{border-top:1px solid var(--border-muted);margin-top:20px;padding-top:16px}.diff-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.diff-toolbar-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:13px;font-weight:600}.diff-view-toggle{border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);font-size:11px;display:flex;overflow:hidden}.diff-view-toggle button{background:var(--bg-raised);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:6px 14px}.diff-view-toggle button+button{border-left:1px solid var(--border)}.diff-view-toggle button:hover{color:var(--text-secondary)}.diff-view-toggle button.active{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.diff-body{align-items:stretch;gap:10px;display:flex}.diff-minimap{border:1px solid var(--border-muted);background:var(--bg-base);border-radius:4px;flex-direction:column;flex-shrink:0;width:10px;max-height:280px;display:flex;overflow:hidden}.diff-minimap-chunk{background:var(--border);cursor:pointer;min-height:8px;transition:background var(--transition);border:none;flex:1;margin:0;padding:0}.diff-minimap-chunk:hover,.diff-minimap-chunk:focus-visible{background:var(--neon-cyan-mid);outline:none}.diff-scroll{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex:1;min-width:0;max-height:280px;overflow:auto}.diff-list{flex-direction:column;gap:0;display:flex}.diff-row{font-family:var(--font-mono);background:var(--bg-raised);border-left:3px solid var(--neon-cyan);border-bottom:1px solid var(--border-muted);border-radius:0;align-items:stretch;gap:0;padding:0;font-size:12px;line-height:1.65;display:flex}.diff-row:last-child{border-radius:0 0 var(--radius) var(--radius);border-bottom:none}.diff-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.diff-line-no{text-align:right;width:36px;color:var(--text-muted);background:var(--bg-base);border-right:1px solid var(--border-muted);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:10px 6px;font-size:10px}.diff-row-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:8px 12px;padding:10px 12px;display:flex}.diff-field{color:var(--text-primary);min-width:6rem;font-weight:700}.diff-values-inline{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.diff-old{color:var(--neon-red);font-weight:400;text-decoration:line-through}.diff-arrow{color:var(--text-muted);flex-shrink:0}.diff-new{color:var(--neon-green);text-shadow:0 0 4px #00ff8840;font-weight:400}.diff-split-head{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg-raised);z-index:1;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px 8px 48px;font-size:11px;display:grid;position:sticky;top:0}.diff-split-old-label{color:var(--neon-red)}.diff-split-new-label{color:var(--neon-green)}.diff-split-row{border-bottom:1px solid var(--border-muted);align-items:stretch;gap:0;display:flex}.diff-split-row:last-child{border-bottom:none}.diff-split-cells{flex:1;grid-template-columns:1fr 1fr;gap:8px;min-width:0;padding:8px 12px 8px 0;display:grid}.diff-split-cell{border-radius:var(--radius);background:var(--bg-base);border:1px solid var(--border-muted);min-width:0;padding:8px 10px}.diff-split-cell .diff-field{margin-bottom:6px;font-size:11px;display:block}.diff-cell-value{overflow-wrap:anywhere;word-break:break-word;font-size:12px;font-weight:400;line-height:1.6}.diff-split-old .diff-cell-value{color:var(--neon-red);opacity:.9}.diff-split-new .diff-cell-value{color:var(--neon-green)}.event-meta{color:var(--text-muted);grid-template-columns:repeat(2,1fr);gap:10px 16px;margin-top:20px;font-size:12px;display:grid}.event-meta-bar{background:var(--bg-raised);border:1px solid var(--border-muted);border-radius:var(--radius);padding:14px 16px;box-shadow:inset 0 1px #00f0ff0a}.event-meta-time{font-family:var(--font-mono);color:var(--text-secondary);font-size:12px;font-weight:500}.event-meta-id{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;grid-column:1/-1;font-size:11px;line-height:1.5}.event-meta-extra{font-family:var(--font-mono);color:var(--text-secondary);font-size:11px}@media (width<=900px){.diff-split-cells{grid-template-columns:1fr}.diff-split-head{display:none}}.copy-btn{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);font-size:12px;font-family:var(--font-mono);margin-top:12px;padding:6px 14px}.copy-btn:hover{background:var(--bg-raised);color:var(--neon-cyan);border-color:var(--neon-cyan);box-shadow:0 0 10px #00f0ff1a}.live-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.live-indicator{font-family:var(--font-sans);letter-spacing:.2px;align-items:center;gap:6px;font-size:11px;display:flex}.pause-btn{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);border-radius:4px;padding:5px 12px;font-size:11px}.pause-btn:hover{background:var(--bg-raised);border-color:var(--neon-cyan);color:var(--neon-cyan);box-shadow:0 0 8px #00f0ff1a}.event-stream{height:var(--bottom-panel-scroll-height);min-height:0;font-family:var(--font-mono);flex-direction:column;gap:3px;padding-right:4px;font-size:12px;display:flex;overflow-y:auto}.event-stream,.anomaly-scroll-region,.search-results{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base)}.event-stream::-webkit-scrollbar{width:6px}.anomaly-scroll-region::-webkit-scrollbar{width:6px}.search-results::-webkit-scrollbar{width:6px}.event-stream::-webkit-scrollbar-track{background:var(--bg-base)}.anomaly-scroll-region::-webkit-scrollbar-track{background:var(--bg-base)}.search-results::-webkit-scrollbar-track{background:var(--bg-base)}.event-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.anomaly-scroll-region::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.search-results::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.event-stream::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.anomaly-scroll-region::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.search-results::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.event-row{transition:all var(--transition);cursor:default;background:#ffffff03;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:12px;padding:6px 10px;display:flex}.event-row:hover{background:var(--bg-elevated)}.event-row.type-withdrawn{border-left-color:var(--neon-magenta)}.event-row.type-deposited{border-left-color:var(--neon-cyan)}.event-row.type-created{border-left-color:var(--neon-green)}.event-row.type-transfer{border-left-color:var(--neon-amber)}.event-row.type-deleted{border-left-color:var(--neon-red)}.event-row.type-completed{border-left-color:var(--neon-green)}.event-row.type-failed{border-left-color:var(--neon-red)}.event-row.type-default{border-left-color:var(--neon-purple)}.event-time{color:var(--text-muted);flex-shrink:0;width:75px;font-size:11px}.event-type{flex-shrink:0;width:180px;font-weight:500}.event-agg{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.event-icon{text-align:center;flex-shrink:0;width:20px;font-size:14px}.type-created{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-deleted{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-completed{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-failed{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-transfer{color:var(--neon-amber);text-shadow:0 0 6px #ffaa004d}.type-default{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.type-withdrawn{color:var(--neon-magenta);text-shadow:0 0 6px #ff00e54d}.type-deposited{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.anomaly-panel-inner{position:relative}.anomaly-shield{background:radial-gradient(#00ff880f 0%,#0000 70%);border:1px solid #00ff8826;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;padding:30px 20px;display:flex}.shield-icon{justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:12px;display:flex;position:relative}.shield-icon svg{filter:drop-shadow(0 0 12px #00ff8880)drop-shadow(0 0 24px #0f83);width:64px;height:64px}.shield-icon:after{content:"";border:1px solid #00ff8826;border-radius:50%;animation:3s ease-in-out infinite shield-pulse;position:absolute;inset:-8px}@keyframes shield-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.8;transform:scale(1.15)}}.shield-text{font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;color:var(--neon-green);text-shadow:0 0 8px #0f86;font-size:13px;font-weight:600}.gauge-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.gauge-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:12px;position:relative;overflow:hidden}.gauge-card:before{content:"";height:2px;position:absolute;bottom:0;left:0;right:0}.gauge-card.optimal:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-card.baseline:before{background:var(--neon-cyan);box-shadow:0 0 8px #00f0ff66}.gauge-card.zero:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);margin-bottom:6px;font-size:10px;font-weight:500}.gauge-value{font-family:var(--font-display);letter-spacing:1px;font-size:13px;font-weight:700}.gauge-value.optimal{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-value.baseline{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66}.gauge-value.zero{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-wave{justify-content:center;align-items:flex-end;gap:2px;height:20px;margin-top:6px;display:flex}.gauge-wave-bar{border-radius:1px;width:2px;animation:1.5s ease-in-out infinite gauge-wave-anim}.gauge-wave-bar.green{background:var(--neon-green);box-shadow:0 0 3px #0f86}.gauge-wave-bar.cyan{background:var(--neon-cyan);box-shadow:0 0 3px #00f0ff66}@keyframes gauge-wave-anim{0%,to{height:4px}50%{height:16px}}.anomaly-scroll-region{box-sizing:border-box;height:var(--bottom-panel-scroll-height);max-height:var(--bottom-panel-scroll-height);z-index:1;min-height:0;padding-right:4px;position:relative;overflow:hidden auto}.anomaly-list-inner{flex-direction:column;gap:10px;display:flex}.anomaly-card-title-row{flex-wrap:wrap;width:100%}.anomaly-title-text{flex:1}.anomaly-header-count{min-width:28px;height:28px;font-family:var(--font-display);color:var(--bg-base);background:var(--neon-amber);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 10px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:0 0 12px #ffaa0059}.anomaly-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-raised);transition:border-color var(--transition), box-shadow var(--transition);overflow:hidden}.anomaly-card.CRITICAL{border-left:4px solid #f44}.anomaly-card.HIGH{border-left:4px solid var(--neon-red)}.anomaly-card.MEDIUM{border-left:4px solid var(--neon-amber)}.anomaly-card.LOW{border-left:4px solid var(--neon-cyan)}.anomaly-card-summary{cursor:pointer;font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:14px 16px;list-style:none;display:flex}.anomaly-card-summary::-webkit-details-marker{display:none}.anomaly-severity-badge{font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:9px;font-weight:700}.anomaly-severity-badge.sev-critical{color:#f66;background:#f443;border:1px solid #ff444459}.anomaly-severity-badge.sev-high{background:var(--neon-red-dim);color:var(--neon-red);border:1px solid #ff335559}.anomaly-severity-badge.sev-medium{background:var(--neon-amber-dim);color:var(--neon-amber);border:1px solid #ffaa0059}.anomaly-severity-badge.sev-low{background:var(--neon-cyan-dim);color:var(--neon-cyan);border:1px solid #00f0ff40}.anomaly-card-title{min-width:0;color:var(--text-primary);flex:1;font-size:15px;font-weight:600;line-height:1.45}.anomaly-card-chevron{color:var(--text-muted);transition:transform var(--transition);flex-shrink:0;font-size:10px}.anomaly-card[open] .anomaly-card-chevron{transform:rotate(-180deg)}.anomaly-card-body{border-top:1px solid var(--border-muted);background:#0003;padding:0 16px 16px}.anomaly-card-meta{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:12px;font-size:13px;line-height:1.5;display:flex}.anomaly-card-meta:first-child{margin-top:12px}.anomaly-meta-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);min-width:72px;font-size:10px}.anomaly-meta-value{font-family:var(--font-mono);color:var(--text-secondary);overflow-wrap:anywhere}.no-anomalies{color:var(--neon-green);align-items:center;gap:8px;padding:20px 0;font-size:13px;display:flex}.bottom-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.bottom-grid>.card{flex-direction:column;align-items:stretch;min-width:0;min-height:0;display:flex}.bottom-grid>.card>.card-title,.bottom-grid>.card>.live-header,.bottom-grid .anomaly-scroll-region,.bottom-grid .event-stream{flex-shrink:0}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-elevated) 50%, var(--bg-raised) 75%);border-radius:var(--radius);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast-container{z-index:999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-primary);box-shadow:var(--shadow);border-left:3px solid var(--neon-amber);padding:10px 16px;font-size:13px;animation:.2s slideIn}.toast.error{border-left-color:var(--neon-red)}.toast.success{border-left-color:var(--neon-green)}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.demo-banner{font-size:13px;font-family:var(--font-mono);color:var(--neon-amber);background:var(--neon-amber-dim);border-radius:var(--radius);border:1px solid #ffaa0059;margin:0 0 16px;padding:10px 16px}.demo-banner code{color:var(--neon-cyan)}@media (width<=900px){.state-grid,.bottom-grid{grid-template-columns:1fr}.header-center .header-demo-pill{display:none}.workspace-dock-panel{width:min(240px,88vw)}.gauge-row,.control-panel-grid{grid-template-columns:1fr}.timeline-info{text-align:center;grid-template-columns:1fr}.timeline-info-edge{display:none}}.state-tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;padding-bottom:0;display:flex}.state-tab{color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:color var(--transition), border-color var(--transition);border-radius:var(--radius) var(--radius) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.state-tab:hover{color:var(--text-secondary)}.state-tab.active{color:var(--neon-cyan);border-bottom-color:var(--neon-cyan);background:var(--neon-cyan-dim);text-shadow:0 0 8px #00f0ff33}.state-tab-emoji{font-size:14px}.state-tab-content{min-height:80px}.summary-tab{padding-top:4px}.summary-changes{flex-direction:column;gap:8px;display:flex}.summary-changes-header{color:var(--text-muted);border-bottom:1px solid var(--border-muted);margin-bottom:4px;padding-bottom:6px;font-size:12px;font-weight:600}.summary-change-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-amber);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.summary-change-row:hover{background:var(--bg-elevated)}.summary-change-field{color:var(--text-primary);min-width:5rem;font-weight:700;font-family:var(--font-sans)}.summary-change-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.summary-change-arrow{color:var(--text-muted);flex-shrink:0}.summary-change-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.summary-no-changes{color:var(--neon-green);align-items:center;gap:12px;padding:20px 0;font-size:14px;display:flex}.event-summary-bar{background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);border:1px solid var(--border);border-left:3px solid var(--neon-cyan);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:10px 20px;display:flex;box-shadow:0 0 16px #00f0ff0d}.event-summary-left{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.event-summary-type{font-family:var(--font-sans);color:var(--text-primary);font-size:14px;font-weight:600}.event-summary-meta{font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.event-summary-changes{color:var(--neon-amber);font-size:12px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;flex-shrink:0;padding:3px 10px;font-weight:600}.diff-count-badge{color:var(--neon-amber);font-size:11px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;align-items:center;margin-left:6px;padding:2px 8px;font-weight:500;display:inline-flex}.diff-summary-view{flex-direction:column;gap:6px;display:flex}.diff-summary-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-cyan);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.diff-summary-row:hover{background:var(--bg-elevated)}.diff-summary-field{color:var(--text-primary);min-width:6rem;font-weight:700;font-family:var(--font-sans)}.diff-summary-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.diff-summary-arrow{color:var(--text-muted);flex-shrink:0}.diff-summary-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.diff-jump-next{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;margin-left:auto;padding:2px 8px;font-size:10px}.diff-jump-next:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.json-tree-changed{border-radius:3px;background:#ffaa001a!important}.timeline-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.timeline-jump-group{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:0;display:flex;overflow:hidden}.timeline-jump-input{background:var(--bg-raised);border:none;border-right:1px solid var(--border);width:100px;color:var(--text-primary);font-family:var(--font-mono);outline:none;padding:5px 8px;font-size:12px}.timeline-jump-input:focus{border-right-color:var(--neon-cyan);background:var(--bg-elevated)}.timeline-jump-input::placeholder{color:var(--text-muted)}.timeline-jump-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input[type=number]{-moz-appearance:textfield}.timeline-jump-btn{background:var(--bg-elevated);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:5px 10px;font-size:14px}.timeline-jump-btn:hover{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.timeline-filter-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.filter-chip{border:1px solid var(--border);background:var(--bg-raised);color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:160px;padding:3px 10px;font-size:11px;overflow:hidden}.filter-chip:hover{border-color:var(--neon-cyan-mid);color:var(--text-secondary)}.filter-chip.active{background:var(--neon-cyan-dim);color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff33;border-color:#00f0ff66}.timeline-anomaly-marker{color:var(--neon-amber);text-shadow:0 0 4px #fa09;align-self:flex-start;font-size:7px;line-height:1}.keyboard-hints{z-index:200;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);background:#080b14eb;position:fixed;bottom:0;left:0;right:0}.keyboard-hints-bar{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:6px 24px;font-size:11px;display:flex}.keyboard-hints-item{align-items:center;gap:5px;display:flex}.keyboard-hints-sep{color:var(--border);font-size:14px;line-height:1}.keyboard-hints-grid{flex-wrap:wrap;justify-content:center;gap:10px 24px;padding:14px 24px;display:flex}.keyboard-hint-row{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:10px;font-size:12px;display:flex}.keyboard-hint-desc{color:var(--text-muted)}.keyboard-key{border:1px solid var(--border);border-bottom:2px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:4px;align-items:center;padding:2px 8px;font-size:11px;display:inline-flex}.keyboard-key-mini{border:1px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:3px;align-items:center;padding:1px 5px;font-size:10px;display:inline-flex}.keyboard-hints-close{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;padding:4px 12px;font-size:11px}.keyboard-hints-close:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.app-main{padding-bottom:40px}.command-palette-backdrop{z-index:1000;background:#050508b3;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.command-palette{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(640px,100vw - 32px);box-shadow:var(--shadow);overflow:hidden}.command-palette-input{border:0;border-bottom:1px solid var(--border);width:100%;color:var(--text-primary);font:inherit;background:0 0;padding:16px}.command-palette-list{max-height:320px;list-style:none;overflow:auto}.command-palette-item{cursor:pointer;color:var(--text-primary);padding:12px 16px}.command-palette-item.active,.command-palette-item:hover{background:var(--neon-cyan-dim)}.command-palette-item.muted{color:var(--text-muted)}.statistics-toolbar,.stats-kpis,.stats-distribution{flex-wrap:wrap;gap:12px;display:flex}.statistics-panel-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.statistics-back-btn{border-radius:var(--radius);color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);background:linear-gradient(145deg,#00f0ff1a,#4f9cf912);border:1px solid #00f0ff33;padding:8px 14px;font-size:12px}.statistics-back-btn:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 12px #00f0ff24}.statistics-back-btn:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.stats-kpis{margin:12px 0 16px}.stat-card{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;flex-direction:column;gap:6px;min-width:140px;padding:14px;display:flex}.stat-card strong{font-size:24px}.stats-chart{gap:8px;margin-bottom:16px;display:grid}.stats-bar-row,.stats-list-row,.replay-toolbar{align-items:center;gap:10px;display:flex}.stats-bar-track{background:#ffffff0f;border-radius:999px;flex:1;height:10px;overflow:hidden}.stats-bar-fill{background:linear-gradient(90deg, var(--neon-cyan), var(--accent-blue));height:100%}.stats-distribution>div,.replay-state{flex:1;min-width:260px}.replay-debugger{border-color:#00f0ff29}.replay-toolbar{border:1px solid var(--border-muted);border-radius:var(--radius);background:linear-gradient(145deg,#0c0f1cf0,#080a12f5);justify-content:space-between;margin-bottom:12px;padding:12px 14px}.replay-toolbar button{border-radius:var(--radius);color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition), background var(--transition);background:linear-gradient(145deg,#00f0ff1f,#4f9cf914);border:1px solid #00f0ff38;padding:8px 14px;font-size:12px}.replay-toolbar button:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 12px #00f0ff24}.replay-toolbar button:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.replay-toolbar button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none;transform:none}.replay-controls-center{flex-direction:column;align-items:center;gap:10px;display:flex}.replay-auto-controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;display:flex}.replay-auto-toggle{min-width:160px}.replay-auto-toggle.active{background:linear-gradient(145deg,#00ff8826,#00cc6614);border-color:#00ff884d;box-shadow:0 0 14px #00ff8829}.replay-interval-picker{color:var(--text-secondary);font-family:var(--font-mono);align-items:center;gap:8px;font-size:12px;display:flex}.replay-interval-picker select{border-radius:var(--radius);color:var(--text-primary);font-family:var(--font-mono);background:#080c14f2;border:1px solid #00f0ff33;padding:7px 10px;font-size:12px}.replay-interval-picker select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.replay-interval-picker select:disabled{opacity:.6;cursor:not-allowed}.replay-compare-warning{border-radius:var(--radius);color:#ffe7b2;background:linear-gradient(145deg,#2a1d08db,#1c1204f0);border:1px solid #ffd1663d;justify-content:space-between;align-items:center;gap:14px;margin-bottom:12px;padding:12px 14px;display:flex}.replay-warning-hint{color:#ffe7b2c7;font-family:var(--font-mono);font-size:11px}.replay-compare-actions{flex-shrink:0;align-items:center;gap:10px;display:flex}.replay-warning-btn{border-radius:var(--radius);color:#ffe7b2;font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), background var(--transition), transform var(--transition);background:#ffd1660f;border:1px solid #ffd16638;padding:8px 12px;font-size:12px}.replay-warning-btn:hover{background:#ffd1661f;border-color:#ffd16675;transform:translateY(-1px)}.replay-warning-btn--primary{color:var(--text-primary);background:linear-gradient(145deg,#00f0ff1f,#4f9cf914);border-color:#00f0ff47}.replay-warning-btn--primary:hover{border-color:var(--neon-cyan-mid);background:linear-gradient(145deg,#00f0ff2e,#4f9cf91a)}.replay-position{color:var(--neon-cyan);font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;font-size:13px}.timeline-virtual-container{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(#080a12f5,#06080efa),radial-gradient(circle at top,#00f0ff0d,#0000 55%);margin-top:12px;box-shadow:inset 0 1px #00f0ff0d}.timeline-step{border:1px solid var(--border-muted);border-radius:var(--radius);min-width:136px;max-width:168px;color:var(--text-primary);text-align:left;cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition), background var(--transition);background:linear-gradient(145deg,#101422f5,#0a0c16fa);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;margin:0;padding:12px 14px;display:flex}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 14px #00f0ff14}.timeline-step.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 18px #00f0ff24;border-color:#00f0ff8c}.timeline-step-badge{color:var(--neon-cyan);font-family:var(--font-display);letter-spacing:.8px;text-transform:uppercase;font-size:11px}.timeline-step-seq{color:var(--text-muted);font-family:var(--font-mono);font-size:11px}.timeline-step-type{color:var(--text-primary);letter-spacing:.2px;font-size:12px;font-weight:600}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);min-width:190px;max-width:220px;color:var(--text-primary);text-align:left;cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition), background var(--transition);background:linear-gradient(145deg,#141828f7,#0b0e18fa);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:6px;margin:0;padding:12px 16px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 14px #00f0ff14}.timeline-group-chip.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 18px #00f0ff24;border-color:#00f0ff8c}.timeline-group-chip.expanded{background:linear-gradient(145deg,#181e30f7,#0c101cfc);border-color:#00f0ff59}.timeline-group-chip-top{justify-content:flex-start;align-items:center;gap:8px;width:100%;display:flex}.timeline-group-count{color:var(--neon-cyan);font-family:var(--font-display);letter-spacing:1px;font-size:22px;line-height:1}.timeline-group-chevron{color:var(--text-muted);margin-left:auto;font-size:11px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);font-size:12px;font-weight:700;line-height:1.35}.timeline-group-range{color:var(--text-muted);font-family:var(--font-mono);font-size:11px}.timeline-step-compact{min-width:132px;max-width:156px;padding:10px 12px}.timeline-step-compact .timeline-step-type{font-size:11px}.timeline-step-compare{box-shadow:inset 0 0 0 1px var(--neon-magenta)}.timeline-track-item{align-items:center;gap:12px;display:flex}.timeline-track-item--group{align-items:flex-start}.timeline-expanded-head{justify-content:space-between}.timeline-collapse-btn{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition), background var(--transition);background:0 0;margin-left:auto;padding:6px 12px;font-size:12px}.timeline-collapse-btn:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan);background:#00f0ff0f}.diff-split-row--added .diff-split-new,.diff-split-row--changed .diff-split-new{background:#00ff880f}.diff-split-row--removed .diff-split-old,.diff-split-row--changed .diff-split-old{background:#ff33550f}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden} diff --git a/eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css b/eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css deleted file mode 100644 index 2add8b2..0000000 --- a/eventlens-api/src/main/resources/web/assets/index-B30Asjwx.css +++ /dev/null @@ -1 +0,0 @@ -:root{--bg-base:#050508;--bg-surface:#0a0c14;--bg-raised:#0f1220;--bg-elevated:#161b2e;--bg-panel:linear-gradient(145deg, #0c0f1a 0%, #0a0d18 50%, #080b14 100%);--border:#1a2040;--border-muted:#121830;--border-glow:#00f0ff26;--text-primary:#e8eef8;--text-secondary:#94a3c0;--text-muted:#5a6a8a;--neon-cyan:#00f0ff;--neon-cyan-dim:#00f0ff14;--neon-cyan-mid:#00f0ff40;--neon-magenta:#ff00e5;--neon-magenta-dim:#ff00e514;--neon-green:#0f8;--neon-green-dim:#00ff881a;--neon-amber:#fa0;--neon-amber-dim:#ffaa001a;--neon-red:#f35;--neon-red-dim:#ff33551a;--neon-purple:#a855f7;--accent-blue:#4f9cf9;--accent-blue-dim:#4f9cf926;--accent-green:var(--neon-green);--accent-red:var(--neon-red);--accent-yellow:var(--neon-amber);--accent-purple:var(--neon-purple);--font-sans:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-display:"Orbitron", var(--font-sans);--radius:6px;--radius-lg:10px;--shadow:0 4px 24px #0009;--shadow-neon:0 0 20px #00f0ff14, 0 0 60px #00f0ff08;--transition:.2s ease;--bottom-panel-scroll-height:280px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00f0ff04 2px 4px);position:fixed;inset:0}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{--header-pad-x:24px;--header-pad-right:48px;--header-control-h:34px;padding:0 var(--header-pad-right) 0 var(--header-pad-x);border-bottom:1px solid var(--border);z-index:100;background:linear-gradient(#0d1020 0%,#080b14 100%);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(12px,2vw,20px);height:64px;display:grid;position:sticky;top:0;box-shadow:0 2px 20px #00000080,inset 0 -1px #00f0ff0f}.brand{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.brand-logo{justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:relative}.brand-logo svg{width:36px;height:36px;filter:drop-shadow(0 0 6px var(--neon-cyan)) drop-shadow(0 0 12px #00f0ff4d)}.brand-name{font-family:var(--font-display);letter-spacing:1.5px;color:var(--text-primary);text-transform:uppercase;font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);letter-spacing:.5px;font-size:10px}.header-title{font-family:var(--font-display);letter-spacing:3px;text-transform:uppercase;background:linear-gradient(135deg, var(--neon-cyan), #4facfe, var(--neon-magenta));-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 8px #00f0ff66);text-align:center;-webkit-background-clip:text;background-clip:text;flex-shrink:0;margin:0;font-size:20px;font-weight:800;line-height:1}.header-center{flex-flow:row;justify-content:center;justify-self:center;align-items:center;gap:clamp(10px,1.5vw,16px);min-width:0;display:flex}.header-demo-pill{box-sizing:border-box;height:var(--header-control-h);background:var(--neon-amber-dim);color:var(--neon-amber);font-family:var(--font-mono);white-space:nowrap;border:1px solid #ffaa0059;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;padding:0 12px;font-size:11px;line-height:1;display:inline-flex}.header-actions{flex-direction:row;justify-content:flex-end;justify-self:end;align-items:center;gap:clamp(10px,1.2vw,16px);min-width:0;display:flex}.header-actions .conn-stats,.header-actions .header-status{flex-shrink:0}.workspace-datasource{flex-direction:column;gap:6px;min-width:0;margin:0;display:flex}.workspace-datasource-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;line-height:1}.workspace-datasource-select{box-sizing:border-box;appearance:none;width:100%;height:34px;color:var(--text-primary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);background-color:#0c1020f2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3c0' d='M3 4.5 6 8l3-3.5'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;border:1px solid #ffffff24;border-radius:8px;padding:0 32px 0 12px;font-size:12px;line-height:1;box-shadow:inset 0 1px #00f0ff0f}.workspace-datasource-select:hover{border-color:#00f0ff40}.workspace-datasource-select:focus{border-color:var(--neon-cyan-mid);outline:none;box-shadow:0 0 0 1px #00f0ff33}.header-status{font-size:12px;font-family:var(--font-sans);letter-spacing:.3px;align-items:center;gap:8px;display:flex}.header-status .status-text{color:var(--neon-green);text-shadow:0 0 8px #00ff8880}.header-status .status-text.offline{color:var(--neon-red);text-shadow:0 0 8px #ff335580}.dot{border-radius:50%;width:8px;height:8px}.dot-green{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green), 0 0 12px #0f86;animation:2s infinite pulse-neon}.dot-red{background:var(--neon-red);box-shadow:0 0 6px var(--neon-red)}.dot-yellow{background:var(--neon-amber);box-shadow:0 0 6px var(--neon-amber);animation:1.5s infinite pulse-neon}@keyframes pulse-neon{0%,to{opacity:1}50%{opacity:.4}}.app-main{flex-direction:column;flex:1;gap:16px;width:100%;max-width:1440px;margin:0 auto;padding:20px;display:flex}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow), var(--shadow-neon);padding:20px;position:relative;overflow:hidden}.card.card--dropdown-host{z-index:30;overflow:visible}.card:before{content:"";background:linear-gradient(90deg, transparent, var(--neon-cyan-mid), transparent);height:1px;position:absolute;top:0;left:0;right:0}.card:after{content:"";background:linear-gradient(90deg,#0000,#ff00e51a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.card-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;text-shadow:0 0 6px #00f0ff33;align-items:center;gap:8px;margin-bottom:16px;font-size:13px;font-weight:600;display:flex}.control-ribbon{padding:14px 18px}.control-ribbon-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.control-ribbon-title{margin-bottom:4px}.control-ribbon-subtitle{color:var(--text-muted);font-size:12px}.control-ribbon-nav{align-items:center;gap:12px;font-size:13px;display:inline-flex}.control-ribbon-nav a{text-decoration:none}.control-ribbon-nav a[aria-current=page]{text-underline-offset:2px;text-decoration:underline}.control-panel{gap:12px;padding:16px 18px;display:grid}.control-panel-grid{grid-template-columns:minmax(220px,360px) minmax(0,1fr);align-items:end;gap:12px;display:grid}.control-field,.control-field--search{min-width:0}.control-field-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;display:block}.control-select{width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);background:#0d1123eb;border:1px solid #ffffff24;border-radius:10px;outline:none;padding:10px 12px;font-size:12px}.control-select:focus{border-color:var(--neon-cyan-mid);box-shadow:0 0 14px #00f0ff26}.datasource-pills{flex-wrap:wrap;gap:8px;display:flex}.datasource-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:4px 8px}.selection-summary{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);margin-top:2px}.selection-clear-btn{color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border:none;margin-left:12px}.selection-clear-btn:hover{color:var(--neon-cyan)}.workspace-dock{z-index:110;border:1px solid var(--border-muted);pointer-events:auto;border-right:none;border-radius:10px 0 0 10px;flex-direction:row;align-items:center;width:auto;height:auto;max-height:min(72vh,100vh - 112px);transition:box-shadow .2s;display:flex;position:fixed;inset:50% 0 auto auto;overflow:hidden;transform:translateY(-50%);box-shadow:-6px 4px 22px #0000006b}.workspace-dock--open{box-shadow:-8px 6px 28px #0000007a,0 0 0 1px #00f0ff14}.workspace-dock-handle{border:none;border-left:1px solid var(--border-muted);width:36px;height:36px;color:var(--neon-cyan);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition), color var(--transition);background:linear-gradient(#0f1324 0%,#0a0e18 100%);flex-direction:row;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.workspace-dock-handle:hover{color:var(--text-primary);background:linear-gradient(#141a30 0%,#0d1220 100%)}.workspace-dock-handle:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:-2px}.workspace-dock-chevron{font-size:15px;font-weight:700;line-height:1}.workspace-dock-panel{border-left:1px solid var(--border);background:linear-gradient(145deg,#0c101c 0%,#080c14 100%);flex-direction:column;flex:0 auto;gap:8px;width:min(252px,100vw - 48px);min-width:0;max-height:min(72vh,100vh - 112px);padding:10px 12px 12px 14px;display:flex;overflow:hidden auto}.workspace-dock-panel[hidden]{display:none!important}.workspace-dock-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:12px;font-weight:600}.workspace-dock-scrim{z-index:109;cursor:pointer;background:#03050c73;border:none;margin:0;padding:0;position:fixed;inset:64px 0 36px}.workspace-sidebar-kpis{border:1px solid var(--border-muted);border-radius:var(--radius);background:#080b148c;gap:6px;padding:8px 10px;display:grid}.workspace-kpi-row{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);justify-content:space-between;gap:8px;display:flex}.workspace-kpi-row strong{color:var(--text-primary)}.workspace-sidebar-links{color:var(--text-secondary);gap:6px;font-size:12px;display:grid}.workspace-content{gap:16px;display:grid}.search-panel{width:100%;min-width:0}.selection-clear-btn:focus-visible,.control-ribbon-nav a:focus-visible,.control-select:focus-visible,.workspace-datasource-select:focus-visible{outline:2px solid var(--neon-cyan);outline-offset:2px}.plugin-dashboard{gap:14px;display:grid}.plugin-cards-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.plugin-cards-grid--dense{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plugin-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:linear-gradient(140deg,#101527f2,#0a0e1cf2);padding:12px 14px;box-shadow:inset 0 1px #ffffff05}.plugin-card--interactive{transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition)}.plugin-card--interactive:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px);box-shadow:0 0 16px #00f0ff1a}.plugin-card--interactive:focus-within{border-color:var(--neon-cyan-mid);box-shadow:0 0 0 2px #00f0ff26}.plugin-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.plugin-pill{border:1px solid var(--border);font-size:11px;font-family:var(--font-mono);border-radius:999px;padding:2px 8px}.plugin-card-meta{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);overflow-wrap:anywhere;margin-top:8px}.plugin-card-detail{color:var(--text-secondary);margin-top:8px;font-size:12px;line-height:1.55}.search-wrapper{position:relative}.search-input{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text-primary);font-family:var(--font-mono);transition:border-color var(--transition), box-shadow var(--transition);outline:none;padding:14px 16px 14px 44px;font-size:13px}.search-input:focus{border-color:var(--neon-cyan);box-shadow:0 0 14px #00f0ff2e}.search-input::placeholder{color:var(--text-muted)}.search-icon{color:var(--neon-cyan);pointer-events:none;filter:drop-shadow(0 0 4px #00f0ff80);font-size:16px;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.search-results{background:var(--bg-raised);border:1px solid var(--neon-cyan-mid);border-radius:var(--radius);z-index:500;max-height:min(55vh,420px);position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden auto;box-shadow:0 12px 40px #000000a6,0 0 24px #00f0ff14}.search-result-item{cursor:pointer;transition:background var(--transition);font-family:var(--font-mono);color:var(--text-primary);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:13px;display:flex}.search-result-item:hover{background:var(--bg-elevated);box-shadow:inset 3px 0 0 var(--neon-cyan)}.search-result-item+.search-result-item{border-top:1px solid var(--border-muted)}.search-result-chevron{color:var(--text-muted);flex-shrink:0;padding-right:4px}.search-result-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:0 6px;min-width:0;display:flex}.search-result-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;font-size:10px}.search-result-colon{color:var(--text-muted);flex-shrink:0;margin-right:2px}.search-result-value{overflow-wrap:anywhere;word-break:break-word;flex:1;min-width:0}.conn-stats{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:16px;font-size:11px;display:flex}.conn-stat{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.conn-stat-label{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);font-size:9px}.conn-stat-value{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66;font-size:12px}.conn-stat-value.green{color:var(--neon-green);text-shadow:0 0 6px #0f86}.conn-stat-value.amber{color:var(--neon-amber);text-shadow:0 0 6px #fa06}.conn-stat--metric .conn-stat-value,.conn-stat-value--uptime{text-align:right;font-variant-numeric:tabular-nums;min-width:6.5ch;display:inline-block}.mini-wave{align-items:flex-end;gap:1px;height:24px;display:flex}.mini-wave-bar{background:var(--neon-cyan);border-radius:1px;width:3px;animation:1.2s ease-in-out infinite wave-pulse;box-shadow:0 0 4px #00f0ff4d}@keyframes wave-pulse{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}.timeline-count-pill{color:var(--accent-blue);font-family:var(--font-mono);background:var(--accent-blue-dim);border:1px solid #4f9cf940;border-radius:999px;padding:2px 10px;font-size:11px}.timeline-hint{color:var(--text-muted);max-width:52rem;margin:-8px 0 12px;font-size:12px;line-height:1.5}.timeline-rail{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-base);position:relative;box-shadow:inset 0 1px #00f0ff0a}.timeline-stepper{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);padding:12px 14px 14px;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.timeline-stepper-track{flex-wrap:nowrap;align-items:center;gap:4px;width:max-content;min-height:88px;display:flex}.timeline-step-arrow{color:var(--text-muted);opacity:.7;flex-shrink:0;align-self:center;padding:0 2px;font-size:11px}.timeline-step-arrow-compact{padding:0 1px;font-size:9px}.timeline-step{border-radius:var(--radius);border:1px solid var(--border-muted);background:var(--bg-raised);cursor:pointer;text-align:left;min-width:118px;max-width:200px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-step-compact{gap:2px;min-width:96px;max-width:140px;padding:8px 10px}.timeline-step-compact .timeline-step-badge{font-size:8px}.timeline-step-compact .timeline-step-type{-webkit-line-clamp:1;font-size:10px}.timeline-step:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-step.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-step-badge{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:10px;font-weight:600}.timeline-step-seq{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.timeline-step-type{color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.timeline-step-created{border-left:3px solid var(--neon-green)}.timeline-step-deleted{border-left:3px solid var(--neon-red)}.timeline-step-completed{border-left:3px solid var(--neon-green)}.timeline-step-failed{border-left:3px solid var(--neon-red)}.timeline-step-transfer{border-left:3px solid var(--neon-amber)}.timeline-step-item{border-left:3px solid var(--neon-purple)}.timeline-step-progress{border-left:3px solid #38bdf8}.timeline-step-default{border-left:3px solid var(--neon-cyan)}.timeline-group-chip{border-radius:var(--radius);border:1px solid var(--border-muted);background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);cursor:pointer;text-align:left;min-width:140px;max-width:240px;font-family:var(--font-sans);transition:border-color var(--transition), box-shadow var(--transition), transform var(--transition);flex-direction:column;flex-shrink:0;align-items:flex-start;gap:4px;padding:10px 14px;display:flex}.timeline-group-chip:hover{border-color:var(--neon-cyan-mid);transform:translateY(-1px)}.timeline-group-chip.active{box-shadow:0 0 0 2px var(--neon-cyan-dim), 0 0 16px #00f0ff1f;border-color:#00f0ff8c}.timeline-group-chip.expanded{border-color:#00f0ff59}.timeline-group-chip-top{justify-content:space-between;align-items:center;gap:8px;width:100%;display:flex}.timeline-group-count{font-family:var(--font-display);letter-spacing:.5px;color:var(--neon-cyan);font-size:16px;font-weight:800;line-height:1}.timeline-group-chevron{color:var(--text-muted);font-size:10px}.timeline-group-chip .timeline-group-type{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.timeline-group-range{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);line-height:1.4}.timeline-expanded-deck{border-top:1px solid var(--border-muted);background:#00000040;padding:10px 14px 14px}.timeline-expanded-head{flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:10px;display:flex}.timeline-expanded-title{font-family:var(--font-sans);letter-spacing:.3px;color:var(--neon-cyan);font-size:12px;font-weight:700}.timeline-expanded-meta{font-family:var(--font-mono);color:var(--text-muted);flex:1;font-size:11px}.timeline-expanded-close{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-raised);color:var(--text-secondary);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--transition), color var(--transition);margin-left:auto;padding:4px 12px;font-size:11px}.timeline-expanded-close:hover{border-color:var(--neon-cyan-mid);color:var(--neon-cyan)}.timeline-expanded-strip{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex-wrap:nowrap;align-items:center;gap:4px;width:100%;padding-bottom:6px;display:flex;overflow-x:auto}.timeline-slider{width:100%;accent-color:var(--neon-cyan);cursor:pointer;margin-top:4px}.timeline-info{color:var(--text-muted);font-size:12px;font-family:var(--font-mono);grid-template-columns:minmax(0,1fr) minmax(0,2.2fr) minmax(0,1fr);align-items:start;gap:12px;margin-top:12px;display:grid}.timeline-info-edge{color:var(--text-muted);font-size:11px}.timeline-info-center{text-align:center;color:var(--text-secondary);line-height:1.55}.timeline-info-center strong{color:var(--neon-cyan);font-weight:600}.timeline-info-muted{color:var(--text-muted);font-weight:400}.timeline-info-type{color:var(--text-primary);font-size:11px}.state-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.state-panel h4{font-family:var(--font-display);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:8px;font-size:10px;font-weight:600}.state-panel-before h4{color:var(--text-muted)}.state-panel-after h4{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.json-block{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);font-family:var(--font-mono);max-height:260px;color:var(--text-secondary);white-space:pre;padding:12px;font-size:12px;line-height:1.7;overflow:auto}.json-tree-root{background:var(--bg-base);border:1px solid var(--border-muted);border-radius:var(--radius);max-height:320px;font-family:var(--font-mono);color:var(--text-secondary);padding:10px 12px;font-size:13px;line-height:1.75;overflow:auto}.json-tree-line{flex-wrap:wrap;align-items:baseline;gap:2px 0;min-height:1.5em;display:flex}.json-tree-toggle{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-right:4px;padding:0;font-size:10px;line-height:1}.json-tree-toggle:hover{color:var(--neon-cyan);background:var(--neon-cyan-dim)}.json-key{color:#7dd3fc}.json-string{color:#86efac}.json-number{color:#fcd34d}.json-boolean{color:#c4b5fd}.json-null{color:var(--text-muted);font-style:italic}.json-punct{color:var(--text-muted)}.json-ellipsis{color:var(--text-muted);font-size:11px;font-style:italic}.json-unknown{color:var(--neon-amber)}.diff-panel{border-top:1px solid var(--border-muted);margin-top:20px;padding-top:16px}.diff-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.diff-toolbar-title{font-family:var(--font-sans);color:var(--neon-cyan);letter-spacing:.2px;font-size:13px;font-weight:600}.diff-view-toggle{border-radius:var(--radius);border:1px solid var(--border);font-family:var(--font-mono);font-size:11px;display:flex;overflow:hidden}.diff-view-toggle button{background:var(--bg-raised);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:6px 14px}.diff-view-toggle button+button{border-left:1px solid var(--border)}.diff-view-toggle button:hover{color:var(--text-secondary)}.diff-view-toggle button.active{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.diff-body{align-items:stretch;gap:10px;display:flex}.diff-minimap{border:1px solid var(--border-muted);background:var(--bg-base);border-radius:4px;flex-direction:column;flex-shrink:0;width:10px;max-height:280px;display:flex;overflow:hidden}.diff-minimap-chunk{background:var(--border);cursor:pointer;min-height:8px;transition:background var(--transition);border:none;flex:1;margin:0;padding:0}.diff-minimap-chunk:hover,.diff-minimap-chunk:focus-visible{background:var(--neon-cyan-mid);outline:none}.diff-scroll{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base);flex:1;min-width:0;max-height:280px;overflow:auto}.diff-list{flex-direction:column;gap:0;display:flex}.diff-row{font-family:var(--font-mono);background:var(--bg-raised);border-left:3px solid var(--neon-cyan);border-bottom:1px solid var(--border-muted);border-radius:0;align-items:stretch;gap:0;padding:0;font-size:12px;line-height:1.65;display:flex}.diff-row:last-child{border-radius:0 0 var(--radius) var(--radius);border-bottom:none}.diff-row:first-child{border-radius:var(--radius) var(--radius) 0 0}.diff-line-no{text-align:right;width:36px;color:var(--text-muted);background:var(--bg-base);border-right:1px solid var(--border-muted);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:10px 6px;font-size:10px}.diff-row-body{flex-wrap:wrap;flex:1;align-items:baseline;gap:8px 12px;padding:10px 12px;display:flex}.diff-field{color:var(--text-primary);min-width:6rem;font-weight:700}.diff-values-inline{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.diff-old{color:var(--neon-red);font-weight:400;text-decoration:line-through}.diff-arrow{color:var(--text-muted);flex-shrink:0}.diff-new{color:var(--neon-green);text-shadow:0 0 4px #00ff8840;font-weight:400}.diff-split-head{font-family:var(--font-sans);letter-spacing:.3px;color:var(--text-muted);border-bottom:1px solid var(--border);background:var(--bg-raised);z-index:1;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px 8px 48px;font-size:11px;display:grid;position:sticky;top:0}.diff-split-old-label{color:var(--neon-red)}.diff-split-new-label{color:var(--neon-green)}.diff-split-row{border-bottom:1px solid var(--border-muted);align-items:stretch;gap:0;display:flex}.diff-split-row:last-child{border-bottom:none}.diff-split-cells{flex:1;grid-template-columns:1fr 1fr;gap:8px;min-width:0;padding:8px 12px 8px 0;display:grid}.diff-split-cell{border-radius:var(--radius);background:var(--bg-base);border:1px solid var(--border-muted);min-width:0;padding:8px 10px}.diff-split-cell .diff-field{margin-bottom:6px;font-size:11px;display:block}.diff-cell-value{overflow-wrap:anywhere;word-break:break-word;font-size:12px;font-weight:400;line-height:1.6}.diff-split-old .diff-cell-value{color:var(--neon-red);opacity:.9}.diff-split-new .diff-cell-value{color:var(--neon-green)}.event-meta{color:var(--text-muted);grid-template-columns:repeat(2,1fr);gap:10px 16px;margin-top:20px;font-size:12px;display:grid}.event-meta-bar{background:var(--bg-raised);border:1px solid var(--border-muted);border-radius:var(--radius);padding:14px 16px;box-shadow:inset 0 1px #00f0ff0a}.event-meta-time{font-family:var(--font-mono);color:var(--text-secondary);font-size:12px;font-weight:500}.event-meta-id{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;word-break:break-word;grid-column:1/-1;font-size:11px;line-height:1.5}.event-meta-extra{font-family:var(--font-mono);color:var(--text-secondary);font-size:11px}@media (width<=900px){.diff-split-cells{grid-template-columns:1fr}.diff-split-head{display:none}}.copy-btn{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);font-size:12px;font-family:var(--font-mono);margin-top:12px;padding:6px 14px}.copy-btn:hover{background:var(--bg-raised);color:var(--neon-cyan);border-color:var(--neon-cyan);box-shadow:0 0 10px #00f0ff1a}.live-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.live-indicator{font-family:var(--font-sans);letter-spacing:.2px;align-items:center;gap:6px;font-size:11px;display:flex}.pause-btn{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);border-radius:4px;padding:5px 12px;font-size:11px}.pause-btn:hover{background:var(--bg-raised);border-color:var(--neon-cyan);color:var(--neon-cyan);box-shadow:0 0 8px #00f0ff1a}.event-stream{height:var(--bottom-panel-scroll-height);min-height:0;font-family:var(--font-mono);flex-direction:column;gap:3px;padding-right:4px;font-size:12px;display:flex;overflow-y:auto}.event-stream,.anomaly-scroll-region,.search-results{scrollbar-width:thin;scrollbar-color:var(--border) var(--bg-base)}.event-stream::-webkit-scrollbar{width:6px}.anomaly-scroll-region::-webkit-scrollbar{width:6px}.search-results::-webkit-scrollbar{width:6px}.event-stream::-webkit-scrollbar-track{background:var(--bg-base)}.anomaly-scroll-region::-webkit-scrollbar-track{background:var(--bg-base)}.search-results::-webkit-scrollbar-track{background:var(--bg-base)}.event-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.anomaly-scroll-region::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.search-results::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.event-stream::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.anomaly-scroll-region::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.search-results::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.event-row{transition:all var(--transition);cursor:default;background:#ffffff03;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:12px;padding:6px 10px;display:flex}.event-row:hover{background:var(--bg-elevated)}.event-row.type-withdrawn{border-left-color:var(--neon-magenta)}.event-row.type-deposited{border-left-color:var(--neon-cyan)}.event-row.type-created{border-left-color:var(--neon-green)}.event-row.type-transfer{border-left-color:var(--neon-amber)}.event-row.type-deleted{border-left-color:var(--neon-red)}.event-row.type-completed{border-left-color:var(--neon-green)}.event-row.type-failed{border-left-color:var(--neon-red)}.event-row.type-default{border-left-color:var(--neon-purple)}.event-time{color:var(--text-muted);flex-shrink:0;width:75px;font-size:11px}.event-type{flex-shrink:0;width:180px;font-weight:500}.event-agg{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.event-icon{text-align:center;flex-shrink:0;width:20px;font-size:14px}.type-created{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-deleted{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-completed{color:var(--neon-green);text-shadow:0 0 6px #00ff884d}.type-failed{color:var(--neon-red);text-shadow:0 0 6px #ff33554d}.type-transfer{color:var(--neon-amber);text-shadow:0 0 6px #ffaa004d}.type-default{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.type-withdrawn{color:var(--neon-magenta);text-shadow:0 0 6px #ff00e54d}.type-deposited{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff4d}.anomaly-panel-inner{position:relative}.anomaly-shield{background:radial-gradient(#00ff880f 0%,#0000 70%);border:1px solid #00ff8826;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;padding:30px 20px;display:flex}.shield-icon{justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:12px;display:flex;position:relative}.shield-icon svg{filter:drop-shadow(0 0 12px #00ff8880)drop-shadow(0 0 24px #0f83);width:64px;height:64px}.shield-icon:after{content:"";border:1px solid #00ff8826;border-radius:50%;animation:3s ease-in-out infinite shield-pulse;position:absolute;inset:-8px}@keyframes shield-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.8;transform:scale(1.15)}}.shield-text{font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;color:var(--neon-green);text-shadow:0 0 8px #0f86;font-size:13px;font-weight:600}.gauge-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.gauge-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);text-align:center;padding:12px;position:relative;overflow:hidden}.gauge-card:before{content:"";height:2px;position:absolute;bottom:0;left:0;right:0}.gauge-card.optimal:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-card.baseline:before{background:var(--neon-cyan);box-shadow:0 0 8px #00f0ff66}.gauge-card.zero:before{background:var(--neon-green);box-shadow:0 0 8px #0f86}.gauge-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);margin-bottom:6px;font-size:10px;font-weight:500}.gauge-value{font-family:var(--font-display);letter-spacing:1px;font-size:13px;font-weight:700}.gauge-value.optimal{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-value.baseline{color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff66}.gauge-value.zero{color:var(--neon-green);text-shadow:0 0 6px #0f86}.gauge-wave{justify-content:center;align-items:flex-end;gap:2px;height:20px;margin-top:6px;display:flex}.gauge-wave-bar{border-radius:1px;width:2px;animation:1.5s ease-in-out infinite gauge-wave-anim}.gauge-wave-bar.green{background:var(--neon-green);box-shadow:0 0 3px #0f86}.gauge-wave-bar.cyan{background:var(--neon-cyan);box-shadow:0 0 3px #00f0ff66}@keyframes gauge-wave-anim{0%,to{height:4px}50%{height:16px}}.anomaly-scroll-region{box-sizing:border-box;height:var(--bottom-panel-scroll-height);max-height:var(--bottom-panel-scroll-height);z-index:1;min-height:0;padding-right:4px;position:relative;overflow:hidden auto}.anomaly-list-inner{flex-direction:column;gap:10px;display:flex}.anomaly-card-title-row{flex-wrap:wrap;width:100%}.anomaly-title-text{flex:1}.anomaly-header-count{min-width:28px;height:28px;font-family:var(--font-display);color:var(--bg-base);background:var(--neon-amber);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 10px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:0 0 12px #ffaa0059}.anomaly-card{border:1px solid var(--border-muted);border-radius:var(--radius-lg);background:var(--bg-raised);transition:border-color var(--transition), box-shadow var(--transition);overflow:hidden}.anomaly-card.CRITICAL{border-left:4px solid #f44}.anomaly-card.HIGH{border-left:4px solid var(--neon-red)}.anomaly-card.MEDIUM{border-left:4px solid var(--neon-amber)}.anomaly-card.LOW{border-left:4px solid var(--neon-cyan)}.anomaly-card-summary{cursor:pointer;font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:14px 16px;list-style:none;display:flex}.anomaly-card-summary::-webkit-details-marker{display:none}.anomaly-severity-badge{font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:4px 10px;font-size:9px;font-weight:700}.anomaly-severity-badge.sev-critical{color:#f66;background:#f443;border:1px solid #ff444459}.anomaly-severity-badge.sev-high{background:var(--neon-red-dim);color:var(--neon-red);border:1px solid #ff335559}.anomaly-severity-badge.sev-medium{background:var(--neon-amber-dim);color:var(--neon-amber);border:1px solid #ffaa0059}.anomaly-severity-badge.sev-low{background:var(--neon-cyan-dim);color:var(--neon-cyan);border:1px solid #00f0ff40}.anomaly-card-title{min-width:0;color:var(--text-primary);flex:1;font-size:15px;font-weight:600;line-height:1.45}.anomaly-card-chevron{color:var(--text-muted);transition:transform var(--transition);flex-shrink:0;font-size:10px}.anomaly-card[open] .anomaly-card-chevron{transform:rotate(-180deg)}.anomaly-card-body{border-top:1px solid var(--border-muted);background:#0003;padding:0 16px 16px}.anomaly-card-meta{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:12px;font-size:13px;line-height:1.5;display:flex}.anomaly-card-meta:first-child{margin-top:12px}.anomaly-meta-label{font-family:var(--font-sans);letter-spacing:.2px;color:var(--text-muted);min-width:72px;font-size:10px}.anomaly-meta-value{font-family:var(--font-mono);color:var(--text-secondary);overflow-wrap:anywhere}.no-anomalies{color:var(--neon-green);align-items:center;gap:8px;padding:20px 0;font-size:13px;display:flex}.bottom-grid{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.bottom-grid>.card{flex-direction:column;align-items:stretch;min-width:0;min-height:0;display:flex}.bottom-grid>.card>.card-title,.bottom-grid>.card>.live-header,.bottom-grid .anomaly-scroll-region,.bottom-grid .event-stream{flex-shrink:0}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-elevated) 50%, var(--bg-raised) 75%);border-radius:var(--radius);background-size:200% 100%;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast-container{z-index:999;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-primary);box-shadow:var(--shadow);border-left:3px solid var(--neon-amber);padding:10px 16px;font-size:13px;animation:.2s slideIn}.toast.error{border-left-color:var(--neon-red)}.toast.success{border-left-color:var(--neon-green)}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00f0ff4d}.demo-banner{font-size:13px;font-family:var(--font-mono);color:var(--neon-amber);background:var(--neon-amber-dim);border-radius:var(--radius);border:1px solid #ffaa0059;margin:0 0 16px;padding:10px 16px}.demo-banner code{color:var(--neon-cyan)}@media (width<=900px){.state-grid,.bottom-grid{grid-template-columns:1fr}.header-center .header-demo-pill{display:none}.workspace-dock-panel{width:min(240px,88vw)}.gauge-row,.control-panel-grid{grid-template-columns:1fr}.timeline-info{text-align:center;grid-template-columns:1fr}.timeline-info-edge{display:none}}.state-tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:16px;padding-bottom:0;display:flex}.state-tab{color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:color var(--transition), border-color var(--transition);border-radius:var(--radius) var(--radius) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.state-tab:hover{color:var(--text-secondary)}.state-tab.active{color:var(--neon-cyan);border-bottom-color:var(--neon-cyan);background:var(--neon-cyan-dim);text-shadow:0 0 8px #00f0ff33}.state-tab-emoji{font-size:14px}.state-tab-content{min-height:80px}.summary-tab{padding-top:4px}.summary-changes{flex-direction:column;gap:8px;display:flex}.summary-changes-header{color:var(--text-muted);border-bottom:1px solid var(--border-muted);margin-bottom:4px;padding-bottom:6px;font-size:12px;font-weight:600}.summary-change-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-amber);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.summary-change-row:hover{background:var(--bg-elevated)}.summary-change-field{color:var(--text-primary);min-width:5rem;font-weight:700;font-family:var(--font-sans)}.summary-change-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.summary-change-arrow{color:var(--text-muted);flex-shrink:0}.summary-change-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.summary-no-changes{color:var(--neon-green);align-items:center;gap:12px;padding:20px 0;font-size:14px;display:flex}.event-summary-bar{background:linear-gradient(145deg, var(--bg-elevated) 0%, var(--bg-raised) 100%);border:1px solid var(--border);border-left:3px solid var(--neon-cyan);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:10px 20px;display:flex;box-shadow:0 0 16px #00f0ff0d}.event-summary-left{flex-wrap:wrap;align-items:baseline;gap:6px 12px;display:flex}.event-summary-type{font-family:var(--font-sans);color:var(--text-primary);font-size:14px;font-weight:600}.event-summary-meta{font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.event-summary-changes{color:var(--neon-amber);font-size:12px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;flex-shrink:0;padding:3px 10px;font-weight:600}.diff-count-badge{color:var(--neon-amber);font-size:11px;font-family:var(--font-sans);background:#ffaa001f;border:1px solid #ffaa004d;border-radius:999px;align-items:center;margin-left:6px;padding:2px 8px;font-weight:500;display:inline-flex}.diff-summary-view{flex-direction:column;gap:6px;display:flex}.diff-summary-row{border-radius:var(--radius);background:var(--bg-raised);border:1px solid var(--border-muted);border-left:3px solid var(--neon-cyan);font-family:var(--font-mono);transition:background var(--transition);flex-wrap:wrap;align-items:baseline;gap:6px 10px;padding:9px 12px;font-size:13px;display:flex}.diff-summary-row:hover{background:var(--bg-elevated)}.diff-summary-field{color:var(--text-primary);min-width:6rem;font-weight:700;font-family:var(--font-sans)}.diff-summary-old{color:var(--neon-red);opacity:.9;text-decoration:line-through}.diff-summary-arrow{color:var(--text-muted);flex-shrink:0}.diff-summary-new{color:var(--neon-green);text-shadow:0 0 4px #0f83;font-weight:600}.diff-jump-next{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;margin-left:auto;padding:2px 8px;font-size:10px}.diff-jump-next:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.json-tree-changed{border-radius:3px;background:#ffaa001a!important}.timeline-header-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.timeline-jump-group{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:0;display:flex;overflow:hidden}.timeline-jump-input{background:var(--bg-raised);border:none;border-right:1px solid var(--border);width:100px;color:var(--text-primary);font-family:var(--font-mono);outline:none;padding:5px 8px;font-size:12px}.timeline-jump-input:focus{border-right-color:var(--neon-cyan);background:var(--bg-elevated)}.timeline-jump-input::placeholder{color:var(--text-muted)}.timeline-jump-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.timeline-jump-input[type=number]{-moz-appearance:textfield}.timeline-jump-btn{background:var(--bg-elevated);color:var(--text-muted);cursor:pointer;transition:background var(--transition), color var(--transition);border:none;padding:5px 10px;font-size:14px}.timeline-jump-btn:hover{background:var(--neon-cyan-dim);color:var(--neon-cyan)}.timeline-filter-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.filter-chip{border:1px solid var(--border);background:var(--bg-raised);color:var(--text-muted);font-family:var(--font-sans);cursor:pointer;transition:all var(--transition);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:160px;padding:3px 10px;font-size:11px;overflow:hidden}.filter-chip:hover{border-color:var(--neon-cyan-mid);color:var(--text-secondary)}.filter-chip.active{background:var(--neon-cyan-dim);color:var(--neon-cyan);text-shadow:0 0 6px #00f0ff33;border-color:#00f0ff66}.timeline-anomaly-marker{color:var(--neon-amber);text-shadow:0 0 4px #fa09;align-self:flex-start;font-size:7px;line-height:1}.keyboard-hints{z-index:200;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);background:#080b14eb;position:fixed;bottom:0;left:0;right:0}.keyboard-hints-bar{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:6px 24px;font-size:11px;display:flex}.keyboard-hints-item{align-items:center;gap:5px;display:flex}.keyboard-hints-sep{color:var(--border);font-size:14px;line-height:1}.keyboard-hints-grid{flex-wrap:wrap;justify-content:center;gap:10px 24px;padding:14px 24px;display:flex}.keyboard-hint-row{font-family:var(--font-mono);color:var(--text-secondary);align-items:center;gap:10px;font-size:12px;display:flex}.keyboard-hint-desc{color:var(--text-muted)}.keyboard-key{border:1px solid var(--border);border-bottom:2px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:4px;align-items:center;padding:2px 8px;font-size:11px;display:inline-flex}.keyboard-key-mini{border:1px solid var(--border);background:var(--bg-elevated);color:var(--neon-cyan);font-family:var(--font-mono);white-space:nowrap;border-radius:3px;align-items:center;padding:1px 5px;font-size:10px;display:inline-flex}.keyboard-hints-close{border-radius:var(--radius);border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;transition:color var(--transition), border-color var(--transition);background:0 0;padding:4px 12px;font-size:11px}.keyboard-hints-close:hover{color:var(--neon-cyan);border-color:var(--neon-cyan-mid)}.app-main{padding-bottom:40px}.command-palette-backdrop{z-index:1000;background:#050508b3;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.command-palette{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(640px,100vw - 32px);box-shadow:var(--shadow);overflow:hidden}.command-palette-input{border:0;border-bottom:1px solid var(--border);width:100%;color:var(--text-primary);font:inherit;background:0 0;padding:16px}.command-palette-list{max-height:320px;list-style:none;overflow:auto}.command-palette-item{cursor:pointer;color:var(--text-primary);padding:12px 16px}.command-palette-item.active,.command-palette-item:hover{background:var(--neon-cyan-dim)}.command-palette-item.muted{color:var(--text-muted)}.statistics-toolbar,.stats-kpis,.stats-distribution{flex-wrap:wrap;gap:12px;display:flex}.stats-kpis{margin:12px 0 16px}.stat-card{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;flex-direction:column;gap:6px;min-width:140px;padding:14px;display:flex}.stat-card strong{font-size:24px}.stats-chart{gap:8px;margin-bottom:16px;display:grid}.stats-bar-row,.stats-list-row,.replay-toolbar{align-items:center;gap:10px;display:flex}.stats-bar-track{background:#ffffff0f;border-radius:999px;flex:1;height:10px;overflow:hidden}.stats-bar-fill{background:linear-gradient(90deg, var(--neon-cyan), var(--accent-blue));height:100%}.stats-distribution>div,.replay-state{flex:1;min-width:260px}.replay-toolbar{justify-content:space-between;margin-bottom:12px}.timeline-virtual-container{border:1px solid var(--border);border-radius:var(--radius);background:#ffffff05;margin-top:12px}.timeline-step{border:1px solid var(--border);border-radius:var(--radius);width:calc(100% - 8px);color:var(--text-primary);text-align:left;background:#0e1220f2;grid-template-columns:110px 90px 1fr 90px;align-items:center;margin:3px 4px;padding:0 12px;display:grid}.timeline-step-compare{box-shadow:inset 0 0 0 1px var(--neon-magenta)}.diff-split-row--added .diff-split-new,.diff-split-row--changed .diff-split-new{background:#00ff880f}.diff-split-row--removed .diff-split-old,.diff-split-row--changed .diff-split-old{background:#ff33550f}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden} diff --git a/eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js b/eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js deleted file mode 100644 index ab9b467..0000000 --- a/eventlens-api/src/main/resources/web/assets/index-C4jzZb0y.js +++ /dev/null @@ -1,14 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():S=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function O(e,t){fe++,de[fe]=e.current,e.current=t}var he=pe(null),ge=pe(null),_e=pe(null),ve=pe(null);function ye(e,t){switch(O(_e,t),O(ge,e),O(he,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}me(he),O(he,e)}function be(){me(he),me(ge),me(_e)}function xe(e){e.memoizedState!==null&&O(ve,e);var t=he.current,n=Hd(t,e.type);t!==n&&(O(ge,e),O(he,n))}function Se(e){ge.current===e&&(me(he),me(ge)),ve.current===e&&(me(ve),Qf._currentValue=ue)}var Ce,k;function we(e){if(Ce===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Ce=t&&t[1]||``,k=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Te=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?we(n):``}function De(e,t){switch(e.tag){case 26:case 27:case 5:return we(e.type);case 16:return we(`Lazy`);case 13:return e.child!==t&&t!==null?we(`Suspense Fallback`):we(`Suspense`);case 19:return we(`SuspenseList`);case 0:case 15:return Ee(e.type,!1);case 11:return Ee(e.type.render,!1);case 1:return Ee(e.type,!0);case 31:return we(`Activity`);default:return``}}function Oe(e){try{var t=``,n=null;do t+=De(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var ke=Object.prototype.hasOwnProperty,Ae=t.unstable_scheduleCallback,je=t.unstable_cancelCallback,Me=t.unstable_shouldYield,Ne=t.unstable_requestPaint,Pe=t.unstable_now,Fe=t.unstable_getCurrentPriorityLevel,Ie=t.unstable_ImmediatePriority,Le=t.unstable_UserBlockingPriority,Re=t.unstable_NormalPriority,ze=t.unstable_LowPriority,Be=t.unstable_IdlePriority,Ve=t.log,He=t.unstable_setDisableYieldValue,Ue=null,We=null;function Ge(e){if(typeof Ve==`function`&&He(e),We&&typeof We.setStrictMode==`function`)try{We.setStrictMode(Ue,e)}catch{}}var Ke=Math.clz32?Math.clz32:Ye,qe=Math.log,Je=Math.LN2;function Ye(e){return e>>>=0,e===0?32:31-(qe(e)/Je|0)|0}var Xe=256,Ze=262144,Qe=4194304;function $e(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function et(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=$e(n))):i=$e(o):i=$e(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=$e(n))):i=$e(o)):i=$e(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function A(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function j(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function tt(){var e=Qe;return Qe<<=1,!(Qe&62914560)&&(Qe=4194304),e}function nt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function rt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function it(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),gn=!1;if(hn)try{var _n={};Object.defineProperty(_n,`passive`,{get:function(){gn=!0}}),window.addEventListener(`test`,_n,_n),window.removeEventListener(`test`,_n,_n)}catch{gn=!1}var vn=null,yn=null,bn=null;function xn(){if(bn)return bn;var e,t=yn,n=t.length,r,i=`value`in vn?vn.value:vn.textContent,a=i.length;for(e=0;e=Zn),er=` `,tr=!1;function nr(e,t){switch(e){case`keyup`:return Yn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function rr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var ir=!1;function ar(e,t){switch(e){case`compositionend`:return rr(t);case`keypress`:return t.which===32?(tr=!0,er):null;case`textInput`:return e=t.data,e===er&&tr?null:e;default:return null}}function or(e,t){if(ir)return e===`compositionend`||!Xn&&nr(e,t)?(e=xn(),bn=yn=vn=null,ir=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Or(n)}}function Ar(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ar(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ht(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ht(e.document)}return t}function Mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Nr=hn&&`documentMode`in document&&11>=document.documentMode,Pr=null,Fr=null,Ir=null,Lr=!1;function Rr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Lr||Pr==null||Pr!==Ht(r)||(r=Pr,`selectionStart`in r&&Mr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ir&&Dr(Ir,r)||(Ir=r,r=Ed(Fr,`onSelect`),0>=o,i-=o,ki=1<<32-Ke(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),L&&ji(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),L&&ji(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return L&&ji(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),L&&ji(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&ka(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ia(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=gi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=hi(o.type,o.key,o.props,null,e.mode,c),Ia(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=yi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=ka(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Fa(o),c);if(o.$$typeof===C)return b(e,r,ia(e,o),c);La(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=_i(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Pa=0;var i=b(e,t,n,r);return Na=null,i}catch(t){if(t===Ca||t===Ta)throw t;var a=F(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var za=Ra(!0),Ba=Ra(!1),Va=!1;function Ha(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Wa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ga(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=li(e),ci(e,null,n),t}return ai(e,r,t,n),li(e)}function Ka(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}function qa(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ja=!1;function Ya(){if(Ja){var e=ma;if(e!==null)throw e}}function Xa(e,t,n,r){Ja=!1;var i=e.updateQueue;Va=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===pa&&(Ja=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Va=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Za(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Fs(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ps(e,t,_a(c,r),pu(e)):Ps(e,t,r,pu(e))}catch(n){Ps(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function ws(){}function Ts(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Es(e).queue;Cs(e,a,t,ue,n===null?ws:function(){return Ds(e),n(r)})}function Es(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ds(e){var t=Es(e);t.next===null&&(t=e.alternate.memoizedState),Ps(e,t.next.queue,{},pu())}function Os(){return ra(Qf)}function ks(){return jo().memoizedState}function As(){return jo().memoizedState}function js(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Wa(n);var r=Ga(t,e,n);r!==null&&(hu(r,t,n),Ka(r,t,n)),t={cache:la()},e.payload=t;return}t=t.return}}function Ms(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Is(e)?Ls(t,n):(n=oi(e,t,n,r),n!==null&&(hu(n,e,r),Rs(n,t,r)))}function Ns(e,t,n){Ps(e,t,n,pu())}function Ps(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Is(e))Ls(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Er(s,o))return ai(e,t,i,0),K===null&&ii(),!1}catch{}if(n=oi(e,t,i,r),n!==null)return hu(n,e,r),Rs(n,t,r),!0}return!1}function Fs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Is(e)){if(t)throw Error(i(479))}else t=oi(e,n,r,2),t!==null&&hu(t,e,2)}function Is(e){var t=e.alternate;return e===B||t!==null&&t===B}function Ls(e,t){go=ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Rs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}var zs={readContext:ra,use:Po,useCallback:H,useContext:H,useEffect:H,useImperativeHandle:H,useLayoutEffect:H,useInsertionEffect:H,useMemo:H,useReducer:H,useRef:H,useState:H,useDebugValue:H,useDeferredValue:H,useTransition:H,useSyncExternalStore:H,useId:H,useHostTransitionStatus:H,useFormState:H,useActionState:H,useOptimistic:H,useMemoCache:H,useCacheRefresh:H};zs.useEffectEvent=H;var Bs={readContext:ra,use:Po,useCallback:function(e,t){return Ao().memoizedState=[e,t===void 0?null:t],e},useContext:ra,useEffect:us,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),cs(4194308,4,gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cs(4194308,4,e,t)},useInsertionEffect:function(e,t){cs(4,2,e,t)},useMemo:function(e,t){var n=Ao();t=t===void 0?null:t;var r=e();if(_o){Ge(!0);try{e()}finally{Ge(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Ao();if(n!==void 0){var i=n(t);if(_o){Ge(!0);try{n(t)}finally{Ge(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ms.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Ao();return e={current:e},t.memoizedState=e},useState:function(e){e=Ko(e);var t=e.queue,n=Ns.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:vs,useDeferredValue:function(e,t){return xs(Ao(),e,t)},useTransition:function(){var e=Ko(!1);return e=Cs.bind(null,B,e.queue,!0,!1),Ao().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=Ao();if(L){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Vo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,us(Uo.bind(null,r,o,e),[e]),r.flags|=2048,os(9,{destroy:void 0},Ho.bind(null,r,o,n,t),null),n},useId:function(){var e=Ao(),t=K.identifierPrefix;if(L){var n=Ai,r=ki;n=(r&~(1<<32-Ke(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=vo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[pt]=t,o[mt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Pc(t)}}return U(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Pc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=_e.current,Ui(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ii,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[pt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||Bi(t,!0)}else e=Bd(e).createTextNode(r),e[pt]=t,t.stateNode=e}return U(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Ui(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[pt]=t}else Wi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),e=!1}else n=Gi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(uo(t),t):(uo(t),null);if(t.flags&128)throw Error(i(558))}return U(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Ui(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[pt]=t}else Wi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),a=!1}else a=Gi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(uo(t),t):(uo(t),null)}return uo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Lc(t,t.updateQueue),U(t),null);case 4:return be(),e===null&&Sd(t.stateNode.containerInfo),U(t),null;case 10:return Zi(t.type),U(t),null;case 19:if(me(z),r=t.memoizedState,r===null)return U(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Rc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,Rc(r,!1),e=o.updateQueue,t.updateQueue=e,Lc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)mi(n,e),n=n.sibling;return O(z,z.current&1|2),L&&ji(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Pe()>tu&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Lc(t,e),Rc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!L)return U(t),null}else 2*Pe()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(U(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Pe(),e.sibling=null,n=z.current,O(z,a?n&1|2:n&1),L&&ji(t,r.treeForkCount),e);case 22:case 23:return uo(t),ro(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(U(t),t.subtreeFlags&6&&(t.flags|=8192)):U(t),n=t.updateQueue,n!==null&&Lc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&me(ya),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Zi(R),U(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Pi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Zi(R),be(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Se(t),null;case 31:if(t.memoizedState!==null){if(uo(t),t.alternate===null)throw Error(i(340));Wi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(uo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Wi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return me(z),null;case 4:return be(),null;case 10:return Zi(t.type),null;case 22:case 23:return uo(t),ro(),e!==null&&me(ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Zi(R),null;case 25:return null;default:return null}}function Vc(e,t){switch(Pi(t),t.tag){case 3:Zi(R),be();break;case 26:case 27:case 5:Se(t);break;case 4:be();break;case 31:t.memoizedState!==null&&uo(t);break;case 13:uo(t);break;case 19:me(z);break;case 10:Zi(t.type);break;case 22:case 23:uo(t),ro(),e!==null&&me(ya);break;case 24:Zi(R)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Qa(t,n)}catch(t){Z(e,e.return,t)}}}function Gc(e,t,n){n.props=qs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[mt]=t}catch(t){Z(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=on));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[pt]=e,t[mt]=n}catch(t){Z(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=jr(e),Mr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[pt]=e,M(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=kr(s,h),v=kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),We&&typeof We.onPostCommitFiberRoot==`function`)try{We.onPostCommitFiberRoot(Ue,o)}catch{}return!0}finally{D.p=a,E.T=r,Vu(e,t)}}function Wu(e,t,n){t=xi(n,t),t=$s(e.stateNode,t,2),e=Ga(e,t,2),e!==null&&(rt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=xi(n,e),n=ec(2),r=Ga(t,n,2),r!==null&&(tc(n,r,t,e),rt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Pe()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=tt()),e=si(e,t),e!==null&&(rt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return Ae(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ke(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=et(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||A(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Pe(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Wt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),M(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Wt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Wt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Wt(n.imageSizes)+`"]`)):i+=`[href="`+Wt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),M(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Wt(r)+`"][href="`+Wt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),M(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=Tt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);M(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),M(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),M(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=_e.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=Tt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=Tt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=Tt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Wt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),M(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Wt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Wt(n.href)+`"]`);if(r)return t.instance=r,M(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),M(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,M(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),M(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,M(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),M(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,M(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),M(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},b={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},x=new class{#e=b;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function S(e){setTimeout(e,0)}var C=typeof window>`u`||`Deno`in globalThis;function w(){}function ee(e,t){return typeof e==`function`?e(t):e}function te(e){return typeof e==`number`&&e>=0&&e!==1/0}function ne(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){return typeof e==`function`?e(t):e}function ie(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==oe(o,t.options))return!1}else if(!ce(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ae(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(se(t.options.mutationKey)!==se(a))return!1}else if(!ce(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function oe(e,t){return(t?.queryKeyHashFn||se)(e)}function se(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ce(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>ce(e[n],t[n])):!1}var le=Object.prototype.hasOwnProperty;function E(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{x.setTimeout(t,e)})}function me(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function O(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function he(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var ge=Symbol();function _e(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===ge?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ve(e,t){return typeof e==`function`?e(...t):!!e}function ye(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var be=(()=>{let e=()=>C;return{isServer(){return e()},setIsServer(t){e=t}}})();function xe(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var Se=S;function Ce(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=Se,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var k=Ce(),we=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function Te(e){return Math.min(1e3*2**e,3e4)}function Ee(e){return(e??`online`)===`online`?we.isOnline():!0}var De=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Oe(e){let t=!1,n=0,r,i=xe(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new De(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>y.isFocused()&&(e.networkMode===`always`||we.isOnline())&&e.canRun(),u=()=>Ee(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(be.isServer()?0:3),o=e.retryDelay??Te,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ke=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),te(this.gcTime)&&(this.#e=x.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(be.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e&&=(x.clearTimeout(this.#e),void 0)}},Ae=class extends ke{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Ne(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Ne(this.options);e.data!==void 0&&(this.setState(Me(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=me(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#c({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(w).catch(w):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>re(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===ge||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>T(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!ne(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o||this.#s()?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#s(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=_e(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=Oe({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof De&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof De){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#c(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...je(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Me(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),k.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function je(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Ee(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Me(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Ne(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Pe=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=xe(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Ie(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Le(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Le(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof re(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Re(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return Be(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(w)),t}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(be.isServer()||this.#r.isStale||!te(e))return;let t=ne(this.#r.dataUpdatedAt,e)+1;this.#d=x.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(be.isServer()||re(this.options.enabled,this.#t)===!1||!te(this.#p)||this.#p===0)&&(this.#f=x.setInterval(()=>{(this.options.refetchIntervalInBackground||y.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d&&=(x.clearTimeout(this.#d),void 0)}#x(){this.#f&&=(x.clearInterval(this.#f),void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Ie(e,t),o=i&&Re(e,n,t,r);(a||o)&&(l={...l,...je(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=me(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=me(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:ze(e,t),refetch:this.refetch,promise:this.#o,isEnabled:re(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=xe())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!D(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){k.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Fe(e,t){return re(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Ie(e,t){return Fe(e,t)||e.state.data!==void 0&&Le(e,t,t.refetchOnMount)}function Le(e,t,n){if(re(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&ze(e,t)}return!1}function Re(e,t,n,r){return(e!==t||re(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&ze(e,n)}function ze(e,t){return re(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}function Be(e,t){return!D(e.getCurrentResult(),t)}function Ve(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ye(e,()=>t.signal,()=>n=!0)},u=_e(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?he:O;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?Ue:He,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:He(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function He(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Ue(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var We=class extends ke{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||Ge(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Oe({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),k.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function Ge(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Ke=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new We({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=qe(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=qe(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=qe(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=qe(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){k.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ae(t,e))}findAll(e={}){return this.getAll().filter(t=>ae(e,t))}notify(e){k.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return k.batch(()=>Promise.all(e.map(e=>e.continue().catch(w))))}};function qe(e){return e.options.scope?.id}function Je(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Ye(e,t,n){let r=e.slice(0);return r[t]=n,r}var Xe=class extends v{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,k.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!D(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(Je(e,n).forEach(e=>{e.destroy()}),Je(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=E(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new Pe(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Ye(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&k.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Ze=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??oe(r,t),a=this.get(i);return a||(a=new Ae({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){k.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ie(e,t)):t}notify(e){k.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){k.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){k.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Qe=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ze,this.#t=e.mutationCache||new Ke,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=we.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(T(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=ee(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return k.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;k.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return k.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=k.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(w).catch(w)}invalidateQueries(e,t={}){return k.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=k.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(w)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(w)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(T(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(w).catch(w)}fetchInfiniteQuery(e){return e.behavior=Ve(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(w).catch(w)}ensureInfiniteQueryData(e){return e.behavior=Ve(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return we.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(se(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(se(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=oe(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===ge&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},$e=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),et=o(((e,t)=>{t.exports=$e()})),A=l(d(),1),j=et(),tt=A.createContext(void 0),nt=e=>{let t=A.useContext(tt);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},rt=({client:e,children:t})=>(A.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,j.jsx)(tt.Provider,{value:e,children:t})),it=A.createContext(!1),at=()=>A.useContext(it);it.Provider;function ot(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var st=A.createContext(ot()),ct=()=>A.useContext(st),lt=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?ve(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},ut=e=>{A.useEffect(()=>{e.clearReset()},[e])},dt=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||ve(n,[e.error,r])),ft=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},pt=(e,t)=>e.isLoading&&e.isFetching&&!t,mt=(e,t)=>e?.suspense&&t.isPending,ht=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function gt({queries:e,...t},n){let r=nt(n),i=at(),a=ct(),o=A.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{ft(e),lt(e,a,r.getQueryCache().get(e.queryHash))}),ut(a);let[s]=A.useState(()=>new Xe(r,o,t)),[c,l,u]=s.getOptimisticResult(o,t.combine),d=!i&&t.subscribed!==!1;A.useSyncExternalStore(A.useCallback(e=>d?s.subscribe(k.batchCalls(e)):w,[s,d]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),A.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let f=c.some((e,t)=>mt(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&mt(n,e)?ht(n,new Pe(r,n),a):[]}):[];if(f.length>0)throw Promise.all(f);let p=c.find((e,t)=>{let n=o[t];return n&&dt({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(p?.error)throw p.error;return l(u())}function _t(e,t,n){let r=at(),i=ct(),a=nt(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,ft(o),lt(o,i,s),ut(i);let c=!a.getQueryCache().get(o.queryHash),[l]=A.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(A.useSyncExternalStore(A.useCallback(e=>{let t=d?l.subscribe(k.batchCalls(e)):w;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),A.useEffect(()=>{l.setOptions(o)},[o,l]),mt(o,u))throw ht(o,l,i);if(dt({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!be.isServer()&&pt(u,r)&&(c?ht(o,l,i):s?.promise)?.catch(w).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function vt(e,t){return _t(e,Pe,t)}function yt(e,t){return function(){return e.apply(t,arguments)}}var{toString:bt}=Object.prototype,{getPrototypeOf:xt}=Object,{iterator:St,toStringTag:Ct}=Symbol,wt=(e=>t=>{let n=bt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Tt=e=>(e=e.toLowerCase(),t=>wt(t)===e),M=e=>t=>typeof t===e,{isArray:Et}=Array,Dt=M(`undefined`);function Ot(e){return e!==null&&!Dt(e)&&e.constructor!==null&&!Dt(e.constructor)&&Mt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var kt=Tt(`ArrayBuffer`);function At(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&kt(e.buffer),t}var jt=M(`string`),Mt=M(`function`),Nt=M(`number`),Pt=e=>typeof e==`object`&&!!e,Ft=e=>e===!0||e===!1,It=e=>{if(wt(e)!==`object`)return!1;let t=xt(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Ct in e)&&!(St in e)},Lt=e=>{if(!Pt(e)||Ot(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Rt=Tt(`Date`),zt=Tt(`File`),Bt=e=>!!(e&&e.uri!==void 0),Vt=e=>e&&e.getParts!==void 0,Ht=Tt(`Blob`),Ut=Tt(`FileList`),Wt=e=>Pt(e)&&Mt(e.pipe);function Gt(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var Kt=Gt(),qt=Kt.FormData===void 0?void 0:Kt.FormData,Jt=e=>{let t;return e&&(qt&&e instanceof qt||Mt(e.append)&&((t=wt(e))===`formdata`||t===`object`&&Mt(e.toString)&&e.toString()===`[object FormData]`))},Yt=Tt(`URLSearchParams`),[Xt,Zt,Qt,$t]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(Tt),en=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function tn(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),Et(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}var rn=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,an=e=>!Dt(e)&&e!==rn;function on(){let{caseless:e,skipUndefined:t}=an(this)&&this||{},n={},r=(r,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=e&&nn(n,i)||i;It(n[a])&&It(r)?n[a]=on(n[a],r):It(r)?n[a]=on({},r):Et(r)?n[a]=r.slice():(!t||!Dt(r))&&(n[a]=r)};for(let e=0,t=arguments.length;e(tn(t,(t,r)=>{n&&Mt(t)?Object.defineProperty(e,r,{value:yt(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),cn=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),ln=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{value:t.prototype}),n&&Object.assign(e.prototype,n)},un=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&xt(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},dn=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},fn=e=>{if(!e)return null;if(Et(e))return e;let t=e.length;if(!Nt(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},pn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&xt(Uint8Array)),mn=(e,t)=>{let n=(e&&e[St]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},hn=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},gn=Tt(`HTMLFormElement`),_n=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),vn=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),yn=Tt(`RegExp`),bn=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};tn(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},xn=e=>{bn(e,(t,n)=>{if(Mt(e)&&[`arguments`,`caller`,`callee`].indexOf(n)!==-1)return!1;let r=e[n];if(Mt(r)){if(t.enumerable=!1,`writable`in t){t.writable=!1;return}t.set||=()=>{throw Error(`Can not rewrite read-only method '`+n+`'`)}}})},Sn=(e,t)=>{let n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Et(e)?r(e):r(String(e).split(t)),n},Cn=()=>{},wn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Tn(e){return!!(e&&Mt(e.append)&&e[Ct]===`FormData`&&e[St])}var En=e=>{let t=Array(10),n=(e,r)=>{if(Pt(e)){if(t.indexOf(e)>=0)return;if(Ot(e))return e;if(!(`toJSON`in e)){t[r]=e;let i=Et(e)?[]:{};return tn(e,(e,t)=>{let a=n(e,r+1);!Dt(a)&&(i[t]=a)}),t[r]=void 0,i}}return e};return n(e,0)},Dn=Tt(`AsyncFunction`),On=e=>e&&(Pt(e)||Mt(e))&&Mt(e.then)&&Mt(e.catch),kn=((e,t)=>e?setImmediate:t?((e,t)=>(rn.addEventListener(`message`,({source:n,data:r})=>{n===rn&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),rn.postMessage(e,`*`)}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate==`function`,Mt(rn.postMessage)),N={isArray:Et,isArrayBuffer:kt,isBuffer:Ot,isFormData:Jt,isArrayBufferView:At,isString:jt,isNumber:Nt,isBoolean:Ft,isObject:Pt,isPlainObject:It,isEmptyObject:Lt,isReadableStream:Xt,isRequest:Zt,isResponse:Qt,isHeaders:$t,isUndefined:Dt,isDate:Rt,isFile:zt,isReactNativeBlob:Bt,isReactNative:Vt,isBlob:Ht,isRegExp:yn,isFunction:Mt,isStream:Wt,isURLSearchParams:Yt,isTypedArray:pn,isFileList:Ut,forEach:tn,merge:on,extend:sn,trim:en,stripBOM:cn,inherits:ln,toFlatObject:un,kindOf:wt,kindOfTest:Tt,endsWith:dn,toArray:fn,forEachEntry:mn,matchAll:hn,isHTMLForm:gn,hasOwnProperty:vn,hasOwnProp:vn,reduceDescriptors:bn,freezeMethods:xn,toObjectSet:Sn,toCamelCase:_n,noop:Cn,toFiniteNumber:wn,findKey:nn,global:rn,isContextDefined:an,isSpecCompliantForm:Tn,toJSONObject:En,isAsyncFn:Dn,isThenable:On,setImmediate:kn,asap:typeof queueMicrotask<`u`?queueMicrotask.bind(rn):typeof process<`u`&&process.nextTick||kn,isIterable:e=>e!=null&&Mt(e[St])},P=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:N.toJSONObject(this.config),code:this.code,status:this.status}}};P.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,P.ERR_BAD_OPTION=`ERR_BAD_OPTION`,P.ECONNABORTED=`ECONNABORTED`,P.ETIMEDOUT=`ETIMEDOUT`,P.ERR_NETWORK=`ERR_NETWORK`,P.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,P.ERR_DEPRECATED=`ERR_DEPRECATED`,P.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,P.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,P.ERR_CANCELED=`ERR_CANCELED`,P.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,P.ERR_INVALID_URL=`ERR_INVALID_URL`;function An(e){return N.isPlainObject(e)||N.isArray(e)}function jn(e){return N.endsWith(e,`[]`)?e.slice(0,-2):e}function Mn(e,t,n){return e?e.concat(t).map(function(e,t){return e=jn(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function Nn(e){return N.isArray(e)&&!e.some(An)}var Pn=N.toFlatObject(N,{},null,function(e){return/^is[A-Z]/.test(e)});function Fn(e,t,n){if(!N.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=N.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!N.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||l,a=n.dots,o=n.indexes,s=(n.Blob||typeof Blob<`u`&&Blob)&&N.isSpecCompliantForm(t);if(!N.isFunction(i))throw TypeError(`visitor must be a function`);function c(e){if(e===null)return``;if(N.isDate(e))return e.toISOString();if(N.isBoolean(e))return e.toString();if(!s&&N.isBlob(e))throw new P(`Blob is not supported. Use a Buffer instead.`);return N.isArrayBuffer(e)||N.isTypedArray(e)?s&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function l(e,n,i){let s=e;if(N.isReactNative(t)&&N.isReactNativeBlob(e))return t.append(Mn(i,n,a),c(e)),!1;if(e&&!i&&typeof e==`object`){if(N.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(N.isArray(e)&&Nn(e)||(N.isFileList(e)||N.endsWith(n,`[]`))&&(s=N.toArray(e)))return n=jn(n),s.forEach(function(e,r){!(N.isUndefined(e)||e===null)&&t.append(o===!0?Mn([n],r,a):o===null?n:n+`[]`,c(e))}),!1}return An(e)?!0:(t.append(Mn(i,n,a),c(e)),!1)}let u=[],d=Object.assign(Pn,{defaultVisitor:l,convertValue:c,isVisitable:An});function f(e,n){if(!N.isUndefined(e)){if(u.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));u.push(e),N.forEach(e,function(e,r){(!(N.isUndefined(e)||e===null)&&i.call(t,e,N.isString(r)?r.trim():r,n,d))===!0&&f(e,n?n.concat(r):[r])}),u.pop()}}if(!N.isObject(e))throw TypeError(`data must be an object`);return f(e),t}function In(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`,"%00":`\0`};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function Ln(e,t){this._pairs=[],e&&Fn(e,this,t)}var Rn=Ln.prototype;Rn.append=function(e,t){this._pairs.push([e,t])},Rn.toString=function(e){let t=e?function(t){return e.call(this,t,In)}:In;return this._pairs.map(function(e){return t(e[0])+`=`+t(e[1])},``).join(`&`)};function zn(e){return encodeURIComponent(e).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`).replace(/%20/g,`+`)}function Bn(e,t,n){if(!t)return e;let r=n&&n.encode||zn,i=N.isFunction(n)?{serialize:n}:n,a=i&&i.serialize,o;if(o=a?a(t,i):N.isURLSearchParams(t)?t.toString():new Ln(t,i).toString(r),o){let t=e.indexOf(`#`);t!==-1&&(e=e.slice(0,t)),e+=(e.indexOf(`?`)===-1?`?`:`&`)+o}return e}var Vn=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&=[]}forEach(e){N.forEach(this.handlers,function(t){t!==null&&e(t)})}},Hn={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Un={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<`u`?URLSearchParams:Ln,FormData:typeof FormData<`u`?FormData:null,Blob:typeof Blob<`u`?Blob:null},protocols:[`http`,`https`,`file`,`blob`,`url`,`data`]},Wn=s({hasBrowserEnv:()=>Gn,hasStandardBrowserEnv:()=>qn,hasStandardBrowserWebWorkerEnv:()=>Jn,navigator:()=>Kn,origin:()=>Yn}),Gn=typeof window<`u`&&typeof document<`u`,Kn=typeof navigator==`object`&&navigator||void 0,qn=Gn&&(!Kn||[`ReactNative`,`NativeScript`,`NS`].indexOf(Kn.product)<0),Jn=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope&&typeof self.importScripts==`function`,Yn=Gn&&window.location.href||`http://localhost`,Xn={...Wn,...Un};function Zn(e,t){return Fn(e,new Xn.classes.URLSearchParams,{visitor:function(e,t,n,r){return Xn.isNode&&N.isBuffer(e)?(this.append(t,e.toString(`base64`)),!1):r.defaultVisitor.apply(this,arguments)},...t})}function Qn(e){return N.matchAll(/\w+|\[(\w*)]/g,e).map(e=>e[0]===`[]`?``:e[1]||e[0])}function $n(e){let t={},n=Object.keys(e),r,i=n.length,a;for(r=0;r=e.length;return a=!a&&N.isArray(r)?r.length:a,s?(N.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!o):((!r[a]||!N.isObject(r[a]))&&(r[a]=[]),t(e,n,r[a],i)&&N.isArray(r[a])&&(r[a]=$n(r[a])),!o)}if(N.isFormData(e)&&N.isFunction(e.entries)){let n={};return N.forEachEntry(e,(e,r)=>{t(Qn(e),r,n,0)}),n}return null}function tr(e,t,n){if(N.isString(e))try{return(t||JSON.parse)(e),N.trim(e)}catch(e){if(e.name!==`SyntaxError`)throw e}return(n||JSON.stringify)(e)}var nr={transitional:Hn,adapter:[`xhr`,`http`,`fetch`],transformRequest:[function(e,t){let n=t.getContentType()||``,r=n.indexOf(`application/json`)>-1,i=N.isObject(e);if(i&&N.isHTMLForm(e)&&(e=new FormData(e)),N.isFormData(e))return r?JSON.stringify(er(e)):e;if(N.isArrayBuffer(e)||N.isBuffer(e)||N.isStream(e)||N.isFile(e)||N.isBlob(e)||N.isReadableStream(e))return e;if(N.isArrayBufferView(e))return e.buffer;if(N.isURLSearchParams(e))return t.setContentType(`application/x-www-form-urlencoded;charset=utf-8`,!1),e.toString();let a;if(i){if(n.indexOf(`application/x-www-form-urlencoded`)>-1)return Zn(e,this.formSerializer).toString();if((a=N.isFileList(e))||n.indexOf(`multipart/form-data`)>-1){let t=this.env&&this.env.FormData;return Fn(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||r?(t.setContentType(`application/json`,!1),tr(e)):e}],transformResponse:[function(e){let t=this.transitional||nr.transitional,n=t&&t.forcedJSONParsing,r=this.responseType===`json`;if(N.isResponse(e)||N.isReadableStream(e))return e;if(e&&N.isString(e)&&(n&&!this.responseType||r)){let n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n)throw e.name===`SyntaxError`?P.from(e,P.ERR_BAD_RESPONSE,this,null,this.response):e}}return e}],timeout:0,xsrfCookieName:`XSRF-TOKEN`,xsrfHeaderName:`X-XSRF-TOKEN`,maxContentLength:-1,maxBodyLength:-1,env:{FormData:Xn.classes.FormData,Blob:Xn.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:`application/json, text/plain, */*`,"Content-Type":void 0}}};N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`],e=>{nr.headers[e]={}});var rr=N.toObjectSet([`age`,`authorization`,`content-length`,`content-type`,`etag`,`expires`,`from`,`host`,`if-modified-since`,`if-unmodified-since`,`last-modified`,`location`,`max-forwards`,`proxy-authorization`,`referer`,`retry-after`,`user-agent`]),ir=e=>{let t={},n,r,i;return e&&e.split(` -`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&rr[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t},ar=Symbol(`internals`);function or(e){return e&&String(e).trim().toLowerCase()}function sr(e){return e===!1||e==null?e:N.isArray(e)?e.map(sr):String(e)}function cr(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var lr=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ur(e,t,n,r,i){if(N.isFunction(r))return r.call(this,t,n);if(i&&(t=n),N.isString(t)){if(N.isString(r))return t.indexOf(r)!==-1;if(N.isRegExp(r))return r.test(t)}}function dr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function fr(e,t){let n=N.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var pr=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=or(t);if(!i)throw Error(`header name must be a non-empty string`);let a=N.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=sr(e))}let a=(e,t)=>N.forEach(e,(e,n)=>i(e,n,t));if(N.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(N.isString(e)&&(e=e.trim())&&!lr(e))a(ir(e),t);else if(N.isObject(e)&&N.isIterable(e)){let n={},r,i;for(let t of e){if(!N.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?N.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=or(e),e){let n=N.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return cr(e);if(N.isFunction(t))return t.call(this,e,n);if(N.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=or(e),e){let n=N.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||ur(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=or(e),e){let i=N.findKey(n,e);i&&(!t||ur(n,n[i],i,t))&&(delete n[i],r=!0)}}return N.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||ur(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return N.forEach(this,(r,i)=>{let a=N.findKey(n,i);if(a){t[a]=sr(r),delete t[i];return}let o=e?dr(i):String(i).trim();o!==i&&delete t[i],t[o]=sr(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return N.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&N.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(` -`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[ar]=this[ar]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=or(e);t[r]||(fr(n,e),t[r]=!0)}return N.isArray(e)?e.forEach(r):r(e),this}};pr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),N.reduceDescriptors(pr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),N.freezeMethods(pr);function mr(e,t){let n=this||nr,r=t||n,i=pr.from(r.headers),a=r.data;return N.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function hr(e){return!!(e&&e.__CANCEL__)}var gr=class extends P{constructor(e,t,n){super(e??`canceled`,P.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function _r(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new P(`Request failed with status code `+n.status,[P.ERR_BAD_REQUEST,P.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function vr(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function yr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var xr=(e,t,n=3)=>{let r=0,i=yr(50,250);return br(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},Sr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Cr=e=>(...t)=>N.asap(()=>e(...t)),wr=Xn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Xn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Xn.origin),Xn.navigator&&/(msie|trident)/i.test(Xn.navigator.userAgent)):()=>!0,Tr=Xn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];N.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),N.isString(r)&&s.push(`path=${r}`),N.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),N.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Er(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Dr(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function Or(e,t,n){let r=!Er(t);return e&&(r||n==0)?Dr(e,t):t}var kr=e=>e instanceof pr?{...e}:e;function Ar(e,t){t||={};let n={};function r(e,t,n,r){return N.isPlainObject(e)&&N.isPlainObject(t)?N.merge.call({caseless:r},e,t):N.isPlainObject(t)?N.merge({},t):N.isArray(t)?t.slice():t}function i(e,t,n,i){if(!N.isUndefined(t))return r(e,t,n,i);if(!N.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!N.isUndefined(t))return r(void 0,t)}function o(e,t){if(!N.isUndefined(t))return r(void 0,t);if(!N.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(kr(e),kr(t),n,!0)};return N.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=N.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);N.isUndefined(o)&&a!==s||(n[r]=o)}),n}var jr=e=>{let t=Ar({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=pr.from(o),t.url=Bn(Or(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),N.isFormData(n)){if(Xn.hasStandardBrowserEnv||Xn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(N.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Xn.hasStandardBrowserEnv&&(r&&N.isFunction(r)&&(r=r(t)),r||r!==!1&&wr(t.url))){let e=i&&a&&Tr.read(a);e&&o.set(i,e)}return t},Mr=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=jr(e),i=r.data,a=pr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=pr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());_r(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new P(`Request aborted`,P.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new P(t&&t.message?t.message:`Network Error`,P.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Hn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new P(t,i.clarifyTimeoutError?P.ETIMEDOUT:P.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&N.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),N.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=xr(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=xr(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new gr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=vr(r.url);if(_&&Xn.protocols.indexOf(_)===-1){n(new P(`Unsupported protocol `+_+`:`,P.ERR_BAD_REQUEST,e));return}h.send(i||null)})},Nr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof P?t:new gr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new P(`timeout of ${t}ms exceeded`,P.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>N.asap(o),s}},Pr=function*(e,t){let n=e.byteLength;if(!t||n{let i=Fr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Rr=64*1024,{isFunction:zr}=N,Br=(({Request:e,Response:t})=>({Request:e,Response:t}))(N.global),{ReadableStream:Vr,TextEncoder:Hr}=N.global,Ur=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Wr=e=>{e=N.merge.call({skipUndefined:!0},Br,e);let{fetch:t,Request:n,Response:r}=e,i=t?zr(t):typeof fetch==`function`,a=zr(n),o=zr(r);if(!i)return!1;let s=i&&zr(Vr),c=i&&(typeof Hr==`function`?(e=>t=>e.encode(t))(new Hr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&Ur(()=>{let e=!1,t=new n(Xn.origin,{body:new Vr,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&Ur(()=>N.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new P(`Response type '${e}' is not supported`,P.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(N.isBlob(e))return e.size;if(N.isSpecCompliantForm(e))return(await new n(Xn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(N.isArrayBufferView(e)||N.isArrayBuffer(e))return e.byteLength;if(N.isURLSearchParams(e)&&(e+=``),N.isString(e))return(await c(e)).byteLength},p=async(e,t)=>N.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=jr(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=Nr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(N.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=Sr(ee,xr(Cr(g)));s=Lr(e.body,Rr,t,n)}}N.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=N.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&Sr(t,xr(Cr(h),!0))||[];f=new r(Lr(f.body,Rr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[N.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{_r(t,n,{data:te,headers:pr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new P(`Network Error`,P.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):P.from(t,t&&t.code,e,C,t&&t.response)}}},Gr=new Map,Kr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Gr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Wr(t)),l=c;return c};Kr();var qr={http:null,xhr:Mr,fetch:{get:Kr}};N.forEach(qr,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var Jr=e=>`- ${e}`,Yr=e=>N.isFunction(e)||e===null||e===!1;function Xr(e,t){e=N.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new P(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : -`+e.map(Jr).join(` -`):` `+Jr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var Zr={getAdapter:Xr,adapters:qr};function Qr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new gr(null,e)}function $r(e){return Qr(e),e.headers=pr.from(e.headers),e.data=mr.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),Zr.getAdapter(e.adapter||nr.adapter,e)(e).then(function(t){return Qr(e),t.data=mr.call(e,e.transformResponse,t),t.headers=pr.from(t.headers),t},function(t){return hr(t)||(Qr(e),t&&t.response&&(t.response.data=mr.call(e,e.transformResponse,t.response),t.response.headers=pr.from(t.response.headers))),Promise.reject(t)})}var ei=`1.13.6`,ti={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{ti[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var ni={};ti.transitional=function(e,t,n){function r(e,t){return`[Axios v`+ei+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new P(r(i,` has been removed`+(t?` in `+t:``)),P.ERR_DEPRECATED);return t&&!ni[i]&&(ni[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},ti.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function ri(e,t,n){if(typeof e!=`object`)throw new P(`options must be an object`,P.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new P(`option `+a+` must be `+n,P.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new P(`Unknown option `+a,P.ERR_BAD_OPTION)}}var ii={assertOptions:ri,validators:ti},ai=ii.validators,oi=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Vn,response:new Vn}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` -`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=Ar(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ii.assertOptions(n,{silentJSONParsing:ai.transitional(ai.boolean),forcedJSONParsing:ai.transitional(ai.boolean),clarifyTimeoutError:ai.transitional(ai.boolean),legacyInterceptorReqResOrdering:ai.transitional(ai.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:ii.assertOptions(r,{encode:ai.function,serialize:ai.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ii.assertOptions(t,{baseUrl:ai.spelling(`baseURL`),withXsrfToken:ai.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=pr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Hn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[$r.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new gr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function ci(e){return function(t){return e.apply(null,t)}}function li(e){return N.isObject(e)&&e.isAxiosError===!0}var ui={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ui).forEach(([e,t])=>{ui[t]=e});function di(e){let t=new oi(e),n=yt(oi.prototype.request,t);return N.extend(n,oi.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return di(Ar(e,t))},n}var F=di(nr);F.Axios=oi,F.CanceledError=gr,F.CancelToken=si,F.isCancel=hr,F.VERSION=ei,F.toFormData=Fn,F.AxiosError=P,F.Cancel=F.CanceledError,F.all=function(e){return Promise.all(e)},F.spread=ci,F.isAxiosError=li,F.mergeConfig=Ar,F.AxiosHeaders=pr,F.formToJSON=e=>er(N.isHTMLForm(e)?new FormData(e):e),F.getAdapter=Zr.getAdapter,F.HttpStatusCode=ui,F.default=F;var fi=l(_()),pi=`order-demo-001`;function mi(e,t,n,r,i,a){return{eventId:e,aggregateId:pi,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function hi(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(mi(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var gi=hi();function _i(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:pi,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var vi=_i(gi);function yi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function bi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function xi(e){let t=[],n={};for(let r of e){let e={...n};n=yi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:bi(e,i)})}return t}var Si=xi(gi);function Ci(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function wi(e){return Ci(e)?[pi]:[]}function Ti(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=gi.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:gi.slice(i,i+a),totalEvents:r}}function Ei(e){return e===`order-demo-001`?Si:[]}function Di(e){let t=Math.min(Math.max(e,1),500);return vi.slice(0,t)}function Oi(){return[...gi].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function ki(){return{status:`UP`,version:`demo`,demo:!0}}function Ai(e=1,t=24){let n=Math.max(e,1)*60*60*1e3,r=[...gi].sort((e,t)=>Date.parse(e.timestamp)-Date.parse(t.timestamp)),i=new Map,a=new Map,o=new Map;for(let e of r){let t=new Date(Math.floor(Date.parse(e.timestamp)/n)*n).toISOString();i.set(t,(i.get(t)??0)+1),a.set(e.eventType,(a.get(e.eventType)??0)+1),o.set(e.aggregateType,(o.get(e.aggregateType)??0)+1)}return{totalEvents:gi.length,distinctAggregates:1,eventTypes:[...a.entries()].map(([e,t])=>({type:e,count:t})),aggregateTypes:[...o.entries()].map(([e,t])=>({type:e,count:t})),throughput:[...i.entries()].slice(-Math.max(t,1)).map(([e,t])=>({bucket:e,count:t})),available:!0,message:null}}function ji(){return!1}var Mi=F.create({baseURL:`/api`});function Ni(e){return new Promise(t=>{setTimeout(t,e)})}function Pi(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var Fi=async(e,t=20,n)=>{let r=Pi(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(ji()){await Ni(40);let n=wi(e);try{let e=await Mi.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Mi.get(r).then(e=>e.data)},Ii=async(e,t=500,n=0,r,i=`full`)=>{if(ji()&&e===`order-demo-001`)return await Ni(50),Ti(e,t,n);let a=Pi(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Mi.get(a).then(e=>e.data)},I=async(e,t)=>ji()&&e===`order-demo-001`?(await Ni(50),Ei(e)):Mi.get(Pi(`/aggregates/${e}/transitions`,t)).then(e=>e.data),L=async(e=100,t)=>ji()?(await Ni(45),Di(e)):Mi.get(Pi(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),Li=async(e,t=1,n=24)=>{if(ji())return await Ni(30),Ai(t,n);let r=Pi(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Mi.get(r).then(e=>e.data)},Ri=async()=>ji()?(await Ni(20),ki()):Mi.get(`/health`).then(e=>e.data),zi=async()=>ji()?(await Ni(20),[{id:`demo-primary`,displayName:`Demo Primary`,status:`ready`,healthMessage:`Frontend demo datasource`,capabilities:[`timeline`,`replay`,`statistics`]}]):Mi.get(`/v1/datasources`).then(e=>e.data),Bi=async e=>ji()?(await Ni(20),{id:e,displayName:`Demo Primary`,status:`ready`,health:{state:`up`,message:`Frontend demo datasource`},lastHealthCheck:new Date().toISOString(),failureReason:``}):Mi.get(`/v1/datasources/${encodeURIComponent(e)}/health`).then(e=>e.data),Vi=async()=>ji()?(await Ni(20),[{instanceId:`demo-source`,typeId:`demo`,displayName:`Demo Source Plugin`,pluginType:`EVENT_SOURCE`,lifecycle:`ready`,health:{state:`up`,message:`Frontend demo plugin`},lastHealthCheck:new Date().toISOString(),failureReason:null}]):Mi.get(`/v1/plugins`).then(e=>e.data);function Hi(e,t){let[n,r]=(0,A.useState)(e);return(0,A.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function Ui({onSelect:e,source:t}){let[n,r]=(0,A.useState)(``),[i,a]=(0,A.useState)(!1),o=(0,A.useRef)(null),s=Hi(n,300),{data:c=[]}=vt({queryKey:[`search`,s,t??`default`],queryFn:()=>Fi(s,20,t),enabled:s.length>=2,staleTime:5e3});(0,A.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let l=(0,A.useRef)(null),u=(0,A.useCallback)(()=>{l.current?.focus(),l.current?.select()},[]);(0,A.useEffect)(()=>{let e=document.getElementById(`aggregate-search`);return e?.addEventListener(`focus`,u),()=>e?.removeEventListener(`focus`,u)},[u]);let d=t=>{r(t),a(!1),e(t)};return(0,j.jsxs)(`div`,{className:`search-wrapper`,ref:o,children:[(0,j.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,j.jsx)(`input`,{id:`aggregate-search`,ref:l,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:n,onChange:e=>{r(e.target.value),a(!0)},onFocus:()=>n.length>=2&&a(!0),onKeyDown:e=>{e.key===`Enter`&&n.trim()&&d(n.trim()),e.key===`Escape`&&a(!1)},autoComplete:`off`,"aria-expanded":i,"aria-controls":`aggregate-search-results`,"aria-autocomplete":`list`}),i&&c.length>0&&(0,j.jsx)(`div`,{className:`search-results`,role:`listbox`,id:`aggregate-search-results`,children:c.map(e=>(0,j.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>d(e),role:`option`,children:[(0,j.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,j.jsxs)(`span`,{className:`search-result-body`,children:[(0,j.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,j.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,j.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Wi(e,t){return vt({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Ii(e,500,0,t,`metadata`),enabled:!!e})}function Gi(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}function Ki(e){let t=[],n=0;for(;n=4)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function Yi(e,t){return e===t?null:t}var Xi=58,Zi=360,Qi=6,$i=[1,6,24,168];function ea(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function ta(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function na(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function ra({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Wi(e,a),[c,l]=(0,A.useState)(``),[u,d]=(0,A.useState)(``),[f,p]=(0,A.useState)(`all`),[m,h]=(0,A.useState)(null),[g,_]=(0,A.useState)(0),v=(0,A.useRef)(null),y=o?.events??[],b=o?.totalEvents??0,x=(0,A.useMemo)(()=>{let e=y;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Gi(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Gi(e.timestamp).getTime()>=t)}return e},[y,c,f]),S=(0,A.useMemo)(()=>Ki(x),[x]),C=(0,A.useMemo)(()=>[...new Set(y.map(e=>e.eventType))].sort(),[y]);(0,A.useEffect)(()=>{if(t!=null){for(let e of S)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(qi(e.startIndex,e.items.length));return}h(null)}},[S,t]);let w=(0,A.useMemo)(()=>Ji(S,m,t),[m,S,t]),ee=(0,A.useMemo)(()=>t==null?-1:w.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[w,t]);(0,A.useEffect)(()=>{let e=e=>{let t=e.detail;if(w.length&&(t<0||t>0)){let e=ee>=0?ee:0;r(ta(w[Math.max(0,Math.min(w.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,w,ee]),(0,A.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!w.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=w.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,w,t]),(0,A.useEffect)(()=>{if(ee<0||!v.current)return;let e=ee*Xi,t=e+Xi;eg+Zi&&(v.current.scrollTop=t-Zi)},[g,ee]);let te=Math.max(0,Math.floor(g/Xi)-Qi),ne=Math.min(w.length,Math.ceil((g+Zi)/Xi)+Qi),T=w.slice(te,ne);if(s)return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,j.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!y.length)return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let re=x[0]?.sequenceNumber??0,ie=x[x.length-1]?.sequenceNumber??0;return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,j.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Enhanced Timeline`,(0,j.jsxs)(`span`,{className:`timeline-count-pill`,children:[x.length,` / `,b,` events`]})]}),(0,j.jsx)(`div`,{className:`timeline-jump-group`,children:(0,j.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);x.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,j.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),C.map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,j.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),$i.map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,j.jsx)(`div`,{ref:v,className:`timeline-virtual-container`,style:{position:`relative`,overflowY:`auto`,maxHeight:Zi},onScroll:e=>_(e.currentTarget.scrollTop),children:(0,j.jsx)(`div`,{style:{height:w.length*Xi,position:`relative`},children:T.map((e,a)=>{let o=(te+a)*Xi;if(e.kind===`group`)return(0,j.jsxs)(`button`,{type:`button`,className:`timeline-group-chip timeline-step-${ea(e.eventType)} ${e.containsSelection?`active`:``} ${e.expanded?`expanded`:``}`,style:{position:`absolute`,top:o,left:0,right:0,height:Xi-6},onClick:()=>h(t=>t===qi(e.startIndex,e.items.length)?null:qi(e.startIndex,e.items.length)),"aria-expanded":e.expanded,children:[(0,j.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,j.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,j.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:e.expanded?`v`:`>`})]}),(0,j.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,j.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]},e.key);let s=e.event,c=t===s.sequenceNumber,l=n===s.sequenceNumber,u=e.kind===`group-item`?` timeline-step-compact`:``;return(0,j.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${ea(s.eventType)} ${c?`active`:``} ${l?`timeline-step-compare`:``}${u}`,style:{position:`absolute`,top:o,left:0,right:0,height:Xi-6},onClick:e=>{e.shiftKey&&i?i(Yi(n,s.sequenceNumber)):r(s.sequenceNumber)},"aria-current":c?`step`:void 0,"aria-selected":c,"aria-label":na(e.stepNumber,s),children:[(0,j.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,j.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,s.sequenceNumber]}),(0,j.jsx)(`span`,{className:`timeline-step-type`,children:s.eventType}),(0,j.jsx)(`span`,{className:`timeline-step-seq`,children:Gi(s.timestamp).toLocaleTimeString()})]},e.key)})})}),(0,j.jsx)(`input`,{type:`range`,className:`timeline-slider`,min:re,max:ie,value:t??ie,onChange:e=>r(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,j.jsxs)(`div`,{className:`timeline-info`,children:[(0,j.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,re]}),(0,j.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,j.jsxs)(`span`,{className:`timeline-info-muted`,children:[` in `,w.length,` visible rows`]})]})}),(0,j.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ie]})]})]})}function ia(e,t){return vt({queryKey:[`transitions`,e,t??`default`],queryFn:()=>I(e,t),enabled:!!e})}function aa(e,t,n=!0){let[r,i]=(0,A.useState)([]),[a,o]=(0,A.useState)(0),[s,c]=(0,A.useState)(!1),l=(0,A.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,A.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-DTKMBXSt.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function oa({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,j.jsxs)(`div`,{className:`diff-panel`,children:[(0,j.jsx)(`div`,{className:`diff-toolbar`,children:(0,j.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,j.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,j.jsx)(`div`,{className:`diff-body`,children:(0,j.jsx)(`div`,{className:`diff-scroll`,children:(0,j.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,j.jsxs)(`div`,{className:`diff-split-head`,children:[(0,j.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,j.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,j.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,j.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,j.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,j.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,j.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,j.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,j.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,j.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function sa({open:e,onToggle:t}){return(0,j.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function ca({value:e}){return e===null?(0,j.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,j.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,j.jsx)(`span`,{className:`json-number`,children:e}):(0,j.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function R({value:e,changedKeys:t}){return(0,j.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,j.jsx)(la,{value:e,depth:0,changedKeys:t,keyPath:``})})}function la({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,A.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(ca,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,j.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,j.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,j.jsx)(sa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,j.jsxs)(j.Fragment,{children:[e.map((e,n)=>(0,j.jsx)(la,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,j.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,j.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,j.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,j.jsx)(sa,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,j.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,j.jsxs)(j.Fragment,{children:[i.map(([e,n])=>(0,j.jsx)(la,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,j.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,j.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var ua=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function da({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,active:a=!1,onActivate:o,source:s}){let{data:c=[],isLoading:l}=ia(e,s),[u,d]=(0,A.useState)(`changes`),f=r??u,p=e=>{d(e),i?.(e)},m=c.find(e=>e.event.sequenceNumber===t)??null,h=n==null?null:c.find(e=>e.event.sequenceNumber===n)??null,g=m!=null&&h!=null&&m.event.sequenceNumber!==h.event.sequenceNumber,_=g?h.stateAfter:m?.stateBefore,v=m?.stateAfter,{patches:y,loading:b,durationMs:x}=aa(_,v,g&&!!_&&!!v),S=(0,A.useMemo)(()=>g?new Set(y.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(m?.diff??{})),[g,y,m?.diff]);return l?(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`State`}),(0,j.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):m?(0,j.jsxs)(`section`,{className:`card`,role:`region`,"aria-label":`State viewer`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,j.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,m.event.sequenceNumber,(0,j.jsx)(`span`,{className:`diff-count-badge`,children:m.event.eventType}),g&&(0,j.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,h?.event.sequenceNumber]}),g&&!b&&(0,j.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,x.toFixed(1),`ms`]})]}),(0,j.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:ua.map(e=>(0,j.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":f===e.id,className:`state-tab ${f===e.id?`active`:``}`,onClick:()=>p(e.id),children:e.label},e.id))}),(0,j.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[f===`changes`&&(0,j.jsx)(`div`,{children:g?b?(0,j.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,j.jsx)(oa,{patches:y,title:`Structural diff`}):m.diff&&Object.keys(m.diff).length>0?(0,j.jsx)(oa,{diff:m.diff}):(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),f===`before-after`&&(0,j.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,j.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,j.jsx)(`h4`,{children:g?`Event #${h?.event.sequenceNumber}`:`Before`}),(0,j.jsx)(R,{value:_??{},changedKeys:S})]}),(0,j.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,j.jsx)(`h4`,{children:g?`Event #${m.event.sequenceNumber}`:`After`}),(0,j.jsx)(R,{value:v??{},changedKeys:S})]})]}),f===`raw`&&(0,j.jsx)(`div`,{style:{marginTop:12},children:(0,j.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(g?{leftEvent:h?.event,rightEvent:m.event,leftState:_,rightState:v}:m.event,null,2)})})]})]}):null}var fa=1e3,pa=3e4;function ma(e,t,n){let r=n?.enabled??!0,[i,a]=(0,A.useState)(()=>r?`connecting`:`connected`),o=(0,A.useRef)(null),s=(0,A.useRef)(t),c=(0,A.useRef)(fa);return s.current=t,(0,A.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=fa,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,pa),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var ha=(0,A.createContext)(void 0);function ga({children:e}){let[t,n]=(0,A.useState)([]),r=(0,A.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,j.jsxs)(ha.Provider,{value:{notify:r},children:[e,(0,j.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,j.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function _a(){let e=(0,A.useContext)(ha);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function va(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function ya(e){return va(e)}var ba=100;function xa(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function Sa({source:e}){return(0,j.jsx)(Ta,{source:e})}function Ca(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function wa(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function Ta({source:e}){let t=ji(),[n,r]=(0,A.useState)(()=>t?Oi():[]),[i,a]=(0,A.useState)(!1),[o,s]=(0,A.useState)(null),c=(0,A.useRef)(null),l=(0,A.useRef)(i);l.current=i;let{notify:u}=_a();(0,A.useEffect)(()=>{s(null),r(t?Oi():[])},[e,t]);let d=ma(wa(e),e=>{if(Ca(e)){s(e.source),r([]);return}s(null),!l.current&&r(t=>[...t.slice(-(ba-1)),e])},{enabled:!t}),f=(0,A.useRef)(u);f.current=u;let p=(0,A.useRef)(0);return(0,A.useEffect)(()=>{t||(d===`disconnected`?(p.current++,p.current<=1&&f.current(`Live stream disconnected. Retrying…`)):d===`connected`&&(p.current=0))},[d,t]),(0,A.useEffect)(()=>{!i&&c.current&&(c.current.scrollTop=c.current.scrollHeight)},[n,i]),(0,A.useEffect)(()=>{let e=()=>a(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`live-header`,children:[(0,j.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,j.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,j.jsxs)(`div`,{className:`live-indicator`,children:[(0,j.jsx)(`span`,{className:`dot ${d===`connected`?`dot-green`:d===`connecting`?`dot-yellow`:`dot-red`}`}),(0,j.jsx)(`span`,{style:{color:d===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:d===`connected`?i?`Paused`:`Live`:d})]}),(0,j.jsx)(`button`,{className:`pause-btn`,onClick:()=>a(!i),children:i?`▶ Resume`:`⏸ Pause`})]})]}),(0,j.jsxs)(`div`,{className:`event-stream`,ref:c,children:[o&&(0,j.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:o?` (${o})`:``,`.`]}),n.length===0&&(0,j.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:o?null:t?`Demo stream (static sample events)`:`Waiting for events…`}),n.map(e=>(0,j.jsxs)(`div`,{className:`event-row ${ya(e.eventType)}`,children:[(0,j.jsx)(`span`,{className:`event-icon`,children:xa(e.eventType)}),(0,j.jsx)(`span`,{className:`event-time`,children:Gi(e.timestamp).toLocaleTimeString()}),(0,j.jsx)(`span`,{className:`event-type ${va(e.eventType)}`,children:e.eventType}),(0,j.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function Ea(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Da(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Oa(){return(0,j.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,j.jsx)(`defs`,{children:(0,j.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,j.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,j.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,j.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function ka({color:e}){return(0,j.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,j.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Aa({source:e}){let{data:t,isLoading:n}=vt({queryKey:[`anomalies`,e??`default`],queryFn:()=>L(100,e),refetchInterval:3e4}),r=t&&t.length>0;return(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,j.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!n&&r&&(0,j.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${t.length} anomalies`,children:t.length})]}),n&&(0,j.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!n&&!r&&(0,j.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,j.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,j.jsx)(`div`,{className:`shield-icon`,children:(0,j.jsx)(Oa,{})}),(0,j.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,j.jsxs)(`div`,{className:`gauge-row`,children:[(0,j.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,j.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,j.jsx)(ka,{color:`green`})]}),(0,j.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,j.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,j.jsx)(ka,{color:`cyan`})]}),(0,j.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,j.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,j.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,j.jsx)(ka,{color:`green`})]})]})]}),!n&&r&&(0,j.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,j.jsx)(`div`,{className:`anomaly-list-inner`,children:t.map((e,t)=>(0,j.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,j.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,j.jsx)(`span`,{className:`anomaly-severity-badge ${Ea(e.severity)}`,children:Da(e.severity)}),(0,j.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,j.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,j.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),(0,j.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,j.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,j.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,j.jsx)(`span`,{className:`anomaly-meta-value`,children:Gi(e.timestamp).toLocaleString()})]}),(0,j.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,j.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,j.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${t}`))})})]})}var ja=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Ma(){let[e,t]=(0,A.useState)(!1);return(0,A.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,j.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,j.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[ja.map(e=>(0,j.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,j.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,j.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,j.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,j.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,j.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,j.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}function Na({transitions:e,selectedSequence:t,onSelectSequence:n,active:r=!1,onActivate:i}){if(!e.length)return null;let a=e.find(e=>e.event.sequenceNumber===t)??e[0],o=e.findIndex(e=>e.event.sequenceNumber===a.event.sequenceNumber);return(0,j.jsxs)(`section`,{className:`card replay-debugger`,tabIndex:0,role:`region`,"aria-label":`Replay debugger`,"aria-current":r?`page`:void 0,onFocus:i,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,j.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.max(o-1,0)].event.sequenceNumber),title:`Step backward`,"aria-label":`Replay previous event`,children:`Previous`}),(0,j.jsxs)(`div`,{className:`replay-position`,children:[`Event `,o+1,` of `,e.length]}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>n(e[Math.min(o+1,e.length-1)].event.sequenceNumber),title:`Step forward`,"aria-label":`Replay next event`,children:`Next`})]}),(0,j.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:o,onChange:t=>n(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,j.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,j.jsx)(`h4`,{children:`Current State`}),(0,j.jsx)(R,{value:a.stateAfter,changedKeys:new Set(Object.keys(a.diff))})]})]})}function Pa(e,t=1,n=24){return vt({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>Li(e,t,n),staleTime:3e4})}function Fa({source:e}){let[t,n]=(0,A.useState)(24),{data:r,isLoading:i}=Pa(e,1,t);return(0,j.jsxs)(`section`,{className:`card statistics-panel`,role:`region`,"aria-label":`Statistics panel`,"aria-busy":i,children:[(0,j.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,j.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,j.jsx)(`button`,{type:`button`,className:`filter-chip ${t===e?`active`:``}`,onClick:()=>n(e),children:e===72?`3d`:`${e}h`},e))}),i&&(0,j.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!i&&r&&!r.available&&(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`},children:r.message??`Statistics not available.`}),!i&&r?.available&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`stats-kpis`,children:[(0,j.jsxs)(`div`,{className:`stat-card`,children:[(0,j.jsx)(`strong`,{children:r.totalEvents}),(0,j.jsx)(`span`,{children:`Total events`})]}),(0,j.jsxs)(`div`,{className:`stat-card`,children:[(0,j.jsx)(`strong`,{children:r.distinctAggregates}),(0,j.jsx)(`span`,{children:`Aggregates`})]}),(0,j.jsxs)(`div`,{className:`stat-card`,children:[(0,j.jsx)(`strong`,{children:r.eventTypes.length}),(0,j.jsx)(`span`,{children:`Event types`})]})]}),(0,j.jsx)(`div`,{className:`stats-chart`,children:r.throughput.map(e=>(0,j.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,j.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,j.jsx)(`div`,{className:`stats-bar-track`,children:(0,j.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...r.throughput.map(e=>e.count),1)*100)}%`}})}),(0,j.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,j.jsxs)(`div`,{className:`stats-distribution`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h4`,{children:`Event Types`}),r.eventTypes.map(e=>(0,j.jsxs)(`div`,{className:`stats-list-row`,children:[(0,j.jsx)(`span`,{children:e.type}),(0,j.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h4`,{children:`Aggregate Types`}),r.aggregateTypes.map(e=>(0,j.jsxs)(`div`,{className:`stats-list-row`,children:[(0,j.jsx)(`span`,{children:e.type}),(0,j.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Ia({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenStats:i,onOpenPlugins:a}){let[o,s]=(0,A.useState)(``),[c,l]=(0,A.useState)(0),[u,d]=(0,A.useState)(null),{data:f=[]}=vt({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>Fi(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,A.useEffect)(()=>{e?(l(0),d(document.activeElement instanceof HTMLElement?document.activeElement:null)):(s(``),u?.focus())},[e,u]);let p=(0,A.useMemo)(()=>{let e=[{id:`stats`,label:`Go to statistics panel`,action:i},{id:`plugins`,label:`Go to plugin health`,action:a}],t=f.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&f.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[f,a,i,r,o]);return(0,A.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(p.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),p[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[p,n,e,c]),e?(0,j.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,j.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,"aria-describedby":`command-palette-help`,onClick:e=>e.stopPropagation(),children:[(0,j.jsx)(`p`,{id:`command-palette-help`,className:`sr-only`,children:`Search aggregates, open statistics, or open plugin health. Use arrow keys to move and Enter to confirm.`}),(0,j.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,j.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,"aria-label":`Command results`,children:[p.map((e,t)=>(0,j.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),p.length===0&&(0,j.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function La({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,A.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Ra(e){let t=e.toLowerCase();return t===`ready`||t===`up`?`#00ff88`:t===`degraded`||t===`initializing`?`#ffd166`:`#ff6b6b`}function za(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Ba(e){return e.toLowerCase()===`ready`}function Va({datasources:e,datasourceHealth:t,plugins:n}){return(0,j.jsxs)(`div`,{className:`plugin-dashboard`,children:[(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Datasources`}),(0,j.jsx)(`div`,{className:`plugin-cards-grid`,children:e.map((e,n)=>{let r=t[n],i=Ra(e.status);return(0,j.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,style:{borderLeft:`3px solid ${i}`},children:[(0,j.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,j.jsx)(`strong`,{children:e.displayName}),(0,j.jsx)(`span`,{className:`plugin-pill`,style:{color:i,borderColor:`${i}55`},children:e.status})]}),(0,j.jsx)(`div`,{className:`plugin-card-meta`,children:e.id}),r&&(0,j.jsxs)(`div`,{className:`plugin-card-detail`,children:[r.health.message,r.failureReason?` | ${r.failureReason}`:``]})]},e.id)})})]}),(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`All Plugins`}),(0,j.jsx)(`div`,{className:`plugin-cards-grid plugin-cards-grid--dense`,children:n.map(e=>(0,j.jsxs)(`article`,{className:`plugin-card plugin-card--interactive`,children:[(0,j.jsxs)(`div`,{className:`plugin-card-head`,children:[(0,j.jsx)(`strong`,{children:e.displayName}),(0,j.jsx)(`span`,{className:`plugin-pill`,style:{color:Ra(e.lifecycle),borderColor:`${Ra(e.lifecycle)}55`},children:e.lifecycle})]}),(0,j.jsxs)(`div`,{className:`plugin-card-meta`,children:[e.pluginType,` | `,e.typeId]}),(0,j.jsx)(`div`,{className:`plugin-card-meta`,children:e.instanceId}),(0,j.jsxs)(`div`,{className:`plugin-card-detail`,children:[e.health.message,e.failureReason?` | ${e.failureReason}`:``]})]},e.instanceId))})]})]})}function Ha(){let[e,t]=(0,A.useState)(`state`),[n,r]=(0,A.useState)(null),[i,a]=(0,A.useState)(null),[o,s]=(0,A.useState)(null),[c,l]=(0,A.useState)(`changes`),[u,d]=(0,A.useState)(``),[f,p]=(0,A.useState)(window.location.hash||``),[m,h]=(0,A.useState)(!1),[g,_]=(0,A.useState)(!1);(0,A.useEffect)(()=>{let e=()=>p(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,A.useEffect)(()=>{let e=e=>{let t=e.detail;t&&l(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,A.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`panel`),f=e.get(`source`);n&&r(n),i&&a(Number(i)),o&&s(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&l(c),(u===`replay`||u===`state`)&&t(u),f&&d(f)},[]),(0,A.useEffect)(()=>{let t=new URLSearchParams(window.location.search);n?t.set(`aggregateId`,n):t.delete(`aggregateId`),i==null?t.delete(`seq`):t.set(`seq`,String(i)),o==null?t.delete(`compare`):t.set(`compare`,String(o)),t.set(`tab`,c),t.set(`panel`,e),u?t.set(`source`,u):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[e,c,o,n,i,u]);let{data:v}=vt({queryKey:[`health`],queryFn:Ri,refetchInterval:3e4}),{data:y=[]}=vt({queryKey:[`datasources`],queryFn:zi,staleTime:1e4}),{data:b=[]}=vt({queryKey:[`plugins`],queryFn:Vi,staleTime:1e4}),x=gt({queries:y.map(e=>({queryKey:[`datasource-health`,e.id],queryFn:()=>Bi(e.id),staleTime:1e4}))}).map(e=>e.data),{data:S=[]}=ia(n??``,u||null),{data:C}=vt({queryKey:[`timeline-summary`,n,u||`default`],queryFn:()=>Ii(n,500,0,u||null,`metadata`),enabled:!!n,staleTime:3e4}),w=v?.status===`UP`,ee=f===`#/plugins`,te=f===`#/stats`,ne=y.filter(e=>za(e.status)).length,T=b.filter(e=>za(e.lifecycle)).length,re=y.length-ne+(b.length-T),ie=e=>{r(e),a(null),s(null),t(`state`),window.location.hash=`#/timeline`};return(0,j.jsxs)(`div`,{className:`app`,children:[(0,j.jsx)(La,{paletteOpen:g,onOpenPalette:()=>_(!0),onClosePalette:()=>_(!1)}),(0,j.jsx)(Ia,{open:g,selectedSource:u||null,onClose:()=>_(!1),onSelectAggregate:ie,onOpenStats:()=>{window.location.hash=`#/stats`},onOpenPlugins:()=>{window.location.hash=`#/plugins`}}),(0,j.jsxs)(`header`,{className:`app-header`,children:[(0,j.jsx)(`div`,{className:`brand`,children:(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,j.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,j.jsxs)(`div`,{className:`header-center`,children:[ji()&&(0,j.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,j.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,j.jsx)(`div`,{className:`header-actions`,children:(0,j.jsxs)(`div`,{className:`header-status`,children:[(0,j.jsx)(`span`,{className:`dot ${w?`dot-green`:`dot-red`}`}),(0,j.jsx)(`span`,{className:`status-text ${w?``:`offline`}`,children:w?`Connected`:v?.status??`Connecting`})]})})]}),(0,j.jsxs)(`aside`,{className:`workspace-dock${m?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,j.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!m,children:[(0,j.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,j.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,j.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,j.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:u,onChange:e=>{d(e.target.value),a(null),s(null)},children:[(0,j.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),y.map(e=>(0,j.jsxs)(`option`,{value:e.id,disabled:!Ba(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,j.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Datasources Healthy`}),(0,j.jsxs)(`strong`,{children:[ne,`/`,y.length||0]})]}),(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Plugins Healthy`}),(0,j.jsxs)(`strong`,{children:[T,`/`,b.length||0]})]}),(0,j.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,j.jsx)(`span`,{children:`Issues`}),(0,j.jsx)(`strong`,{children:re})]})]})]}),(0,j.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>h(e=>!e),"aria-expanded":m,"aria-controls":`workspace-dock-panel`,children:(0,j.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:m?`>`:`<`})})]}),(0,j.jsx)(`main`,{className:`app-main`,role:`main`,"aria-label":`EventLens workspace`,children:(0,j.jsxs)(`div`,{className:`workspace-content`,children:[!ee&&!te&&(0,j.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,j.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,j.jsx)(Ui,{onSelect:ie,source:u||null}),n&&(0,j.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,j.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:n}),u?(0,j.jsxs)(`span`,{children:[` on `,u]}):(0,j.jsx)(`span`,{children:` on primary datasource`}),o!=null&&(0,j.jsxs)(`span`,{children:[` comparing with seq #`,o]}),(0,j.jsxs)(`span`,{className:`sr-only`,"aria-live":`polite`,children:[`Current panel `,e]}),(0,j.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{r(null),a(null),s(null)},children:`× clear`})]})]}),ee?(0,j.jsx)(Va,{datasources:y,datasourceHealth:x,plugins:b}):te?(0,j.jsx)(Fa,{source:u||null}):(0,j.jsxs)(j.Fragment,{children:[n&&(0,j.jsx)(ra,{aggregateId:n,selectedSequence:i,compareSequence:o,onSelectEvent:e=>{a(e),t(`state`)},onSelectCompare:s,source:u||null}),n&&i!==null&&(0,j.jsx)(da,{aggregateId:n,sequence:i,compareSequence:o,activeTab:c,onTabChange:e=>{l(e),t(`state`)},active:e===`state`,onActivate:()=>t(`state`),source:u||null}),n&&S.length>0&&(0,j.jsx)(Na,{transitions:S,selectedSequence:i,onSelectSequence:e=>{a(e),t(`replay`)},active:e===`replay`,onActivate:()=>t(`replay`)}),(0,j.jsxs)(`div`,{className:`bottom-grid`,children:[(0,j.jsx)(Sa,{source:u||null}),(0,j.jsx)(Aa,{source:u||null})]}),n&&C&&(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,j.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[C.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,j.jsx)(Ma,{})]})}var Ua=class extends A.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,j.jsx)(`div`,{className:`app`,children:(0,j.jsx)(`main`,{className:`app-main`,children:(0,j.jsxs)(`div`,{className:`card`,children:[(0,j.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,j.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Wa=new Qe({defaultOptions:{queries:{staleTime:3e4,retry:2}}});fi.createRoot(document.getElementById(`root`)).render((0,j.jsx)(A.StrictMode,{children:(0,j.jsx)(rt,{client:Wa,children:(0,j.jsx)(ga,{children:(0,j.jsx)(Ua,{children:(0,j.jsx)(Ha,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js b/eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js new file mode 100644 index 0000000..0875bdb --- /dev/null +++ b/eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js @@ -0,0 +1,14 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():S=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function O(e,t){fe++,de[fe]=e.current,e.current=t}var he=pe(null),ge=pe(null),_e=pe(null),ve=pe(null);function ye(e,t){switch(O(_e,t),O(ge,e),O(he,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}me(he),O(he,e)}function be(){me(he),me(ge),me(_e)}function xe(e){e.memoizedState!==null&&O(ve,e);var t=he.current,n=Hd(t,e.type);t!==n&&(O(ge,e),O(he,n))}function Se(e){ge.current===e&&(me(he),me(ge)),ve.current===e&&(me(ve),Qf._currentValue=ue)}var Ce,we;function Te(e){if(Ce===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Ce=t&&t[1]||``,we=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Ee=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Te(n):``}function Oe(e,t){switch(e.tag){case 26:case 27:case 5:return Te(e.type);case 16:return Te(`Lazy`);case 13:return e.child!==t&&t!==null?Te(`Suspense Fallback`):Te(`Suspense`);case 19:return Te(`SuspenseList`);case 0:case 15:return De(e.type,!1);case 11:return De(e.type.render,!1);case 1:return De(e.type,!0);case 31:return Te(`Activity`);default:return``}}function ke(e){try{var t=``,n=null;do t+=Oe(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var Ae=Object.prototype.hasOwnProperty,je=t.unstable_scheduleCallback,Me=t.unstable_cancelCallback,Ne=t.unstable_shouldYield,Pe=t.unstable_requestPaint,Fe=t.unstable_now,Ie=t.unstable_getCurrentPriorityLevel,Le=t.unstable_ImmediatePriority,Re=t.unstable_UserBlockingPriority,ze=t.unstable_NormalPriority,Be=t.unstable_LowPriority,Ve=t.unstable_IdlePriority,He=t.log,Ue=t.unstable_setDisableYieldValue,We=null,Ge=null;function Ke(e){if(typeof He==`function`&&Ue(e),Ge&&typeof Ge.setStrictMode==`function`)try{Ge.setStrictMode(We,e)}catch{}}var qe=Math.clz32?Math.clz32:Xe,Je=Math.log,Ye=Math.LN2;function Xe(e){return e>>>=0,e===0?32:31-(Je(e)/Ye|0)|0}var Ze=256,Qe=262144,k=4194304;function A(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function $e(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=A(n))):i=A(o):i=A(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=A(n))):i=A(o)):i=A(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function et(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function tt(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function nt(){var e=k;return k<<=1,!(k&62914560)&&(k=4194304),e}function rt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function it(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function at(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),gn=!1;if(hn)try{var _n={};Object.defineProperty(_n,`passive`,{get:function(){gn=!0}}),window.addEventListener(`test`,_n,_n),window.removeEventListener(`test`,_n,_n)}catch{gn=!1}var vn=null,yn=null,bn=null;function xn(){if(bn)return bn;var e,t=yn,n=t.length,r,i=`value`in vn?vn.value:vn.textContent,a=i.length;for(e=0;e=Zn),er=` `,tr=!1;function nr(e,t){switch(e){case`keyup`:return Yn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function rr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var ir=!1;function ar(e,t){switch(e){case`compositionend`:return rr(t);case`keypress`:return t.which===32?(tr=!0,er):null;case`textInput`:return e=t.data,e===er&&tr?null:e;default:return null}}function or(e,t){if(ir)return e===`compositionend`||!Xn&&nr(e,t)?(e=xn(),bn=yn=vn=null,ir=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Or(n)}}function Ar(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ar(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ht(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ht(e.document)}return t}function Mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Nr=hn&&`documentMode`in document&&11>=document.documentMode,Pr=null,Fr=null,Ir=null,Lr=!1;function Rr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Lr||Pr==null||Pr!==Ht(r)||(r=Pr,`selectionStart`in r&&Mr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ir&&Dr(Ir,r)||(Ir=r,r=Ed(Fr,`onSelect`),0>=o,i-=o,Oi=1<<32-qe(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),R&&Ai(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),R&&Ai(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return R&&Ai(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),R&&Ai(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&Oa(l)===r.type){n(e,r.sibling),c=a(r,o.props),Fa(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=hi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=mi(o.type,o.key,o.props,null,e.mode,c),Fa(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=vi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=Oa(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Pa(o),c);if(o.$$typeof===C)return b(e,r,ra(e,o),c);Ia(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=gi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Na=0;var i=b(e,t,n,r);return Ma=null,i}catch(t){if(t===Sa||t===wa)throw t;var a=ui(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ra=La(!0),za=La(!1),Ba=!1;function Va(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ha(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ua(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=si(e),I(e,null,n),t}return ii(e,r,t,n),si(e)}function Ga(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,st(e,n)}}function Ka(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var qa=!1;function Ja(){if(qa){var e=pa;if(e!==null)throw e}}function Ya(e,t,n,r){qa=!1;var i=e.updateQueue;Ba=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===fa&&(qa=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Ba=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Xa(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Za(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Fs(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ps(e,t,ga(c,r),pu(e)):Ps(e,t,r,pu(e))}catch(n){Ps(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function ws(){}function Ts(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Es(e).queue;Cs(e,a,t,ue,n===null?ws:function(){return Ds(e),n(r)})}function Es(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Io,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ds(e){var t=Es(e);t.next===null&&(t=e.alternate.memoizedState),Ps(e,t.next.queue,{},pu())}function Os(){return na(Qf)}function ks(){return jo().memoizedState}function As(){return jo().memoizedState}function js(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Ua(n);var r=Wa(t,e,n);r!==null&&(hu(r,t,n),Ga(r,t,n)),t={cache:ca()},e.payload=t;return}t=t.return}}function Ms(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Is(e)?Ls(t,n):(n=ai(e,t,n,r),n!==null&&(hu(n,e,r),Rs(n,t,r)))}function Ns(e,t,n){Ps(e,t,n,pu())}function Ps(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Is(e))Ls(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Er(s,o))return ii(e,t,i,0),K===null&&ri(),!1}catch{}if(n=ai(e,t,i,r),n!==null)return hu(n,e,r),Rs(n,t,r),!0}return!1}function Fs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Is(e)){if(t)throw Error(i(479))}else t=ai(e,n,r,2),t!==null&&hu(t,e,2)}function Is(e){var t=e.alternate;return e===B||t!==null&&t===B}function Ls(e,t){go=ho=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Rs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,st(e,n)}}var zs={readContext:na,use:Po,useCallback:H,useContext:H,useEffect:H,useImperativeHandle:H,useLayoutEffect:H,useInsertionEffect:H,useMemo:H,useReducer:H,useRef:H,useState:H,useDebugValue:H,useDeferredValue:H,useTransition:H,useSyncExternalStore:H,useId:H,useHostTransitionStatus:H,useFormState:H,useActionState:H,useOptimistic:H,useMemoCache:H,useCacheRefresh:H};zs.useEffectEvent=H;var Bs={readContext:na,use:Po,useCallback:function(e,t){return Ao().memoizedState=[e,t===void 0?null:t],e},useContext:na,useEffect:us,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),cs(4194308,4,gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cs(4194308,4,e,t)},useInsertionEffect:function(e,t){cs(4,2,e,t)},useMemo:function(e,t){var n=Ao();t=t===void 0?null:t;var r=e();if(_o){Ke(!0);try{e()}finally{Ke(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Ao();if(n!==void 0){var i=n(t);if(_o){Ke(!0);try{n(t)}finally{Ke(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ms.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Ao();return e={current:e},t.memoizedState=e},useState:function(e){e=Ko(e);var t=e.queue,n=Ns.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:vs,useDeferredValue:function(e,t){return xs(Ao(),e,t)},useTransition:function(){var e=Ko(!1);return e=Cs.bind(null,B,e.queue,!0,!1),Ao().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=Ao();if(R){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Vo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,us(Uo.bind(null,r,o,e),[e]),r.flags|=2048,os(9,{destroy:void 0},Ho.bind(null,r,o,n,t),null),n},useId:function(){var e=Ao(),t=K.identifierPrefix;if(R){var n=ki,r=Oi;n=(r&~(1<<32-qe(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=vo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[mt]=t,o[j]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Pc(t)}}return U(t),Fc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Pc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=_e.current,Hi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Fi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[mt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||zi(t,!0)}else e=Bd(e).createTextNode(r),e[mt]=t,t.stateNode=e}return U(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Hi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[mt]=t}else Ui(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),e=!1}else n=Wi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(lo(t),t):(lo(t),null);if(t.flags&128)throw Error(i(558))}return U(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Hi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[mt]=t}else Ui(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;U(t),a=!1}else a=Wi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(lo(t),t):(lo(t),null)}return lo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Lc(t,t.updateQueue),U(t),null);case 4:return be(),e===null&&Sd(t.stateNode.containerInfo),U(t),null;case 10:return Xi(t.type),U(t),null;case 19:if(me(uo),r=t.memoizedState,r===null)return U(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Rc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=fo(e),o!==null){for(t.flags|=128,Rc(r,!1),e=o.updateQueue,t.updateQueue=e,Lc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)pi(n,e),n=n.sibling;return O(uo,uo.current&1|2),R&&Ai(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Fe()>tu&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304)}else{if(!a)if(e=fo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Lc(t,e),Rc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!R)return U(t),null}else 2*Fe()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Rc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(U(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Fe(),e.sibling=null,n=uo.current,O(uo,a?n&1|2:n&1),R&&Ai(t,r.treeForkCount),e);case 22:case 23:return lo(t),no(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(U(t),t.subtreeFlags&6&&(t.flags|=8192)):U(t),n=t.updateQueue,n!==null&&Lc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&me(va),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Xi(z),U(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Ni(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Xi(z),be(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Se(t),null;case 31:if(t.memoizedState!==null){if(lo(t),t.alternate===null)throw Error(i(340));Ui()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(lo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ui()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return me(uo),null;case 4:return be(),null;case 10:return Xi(t.type),null;case 22:case 23:return lo(t),no(),e!==null&&me(va),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Xi(z),null;case 25:return null;default:return null}}function Vc(e,t){switch(Ni(t),t.tag){case 3:Xi(z),be();break;case 26:case 27:case 5:Se(t);break;case 4:be();break;case 31:t.memoizedState!==null&&lo(t);break;case 13:lo(t);break;case 19:me(uo);break;case 10:Xi(t.type);break;case 22:case 23:lo(t),no(),e!==null&&me(va);break;case 24:Xi(z)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Za(t,n)}catch(t){Z(e,e.return,t)}}}function Gc(e,t,n){n.props=qs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[j]=t}catch(t){Z(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=on));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[mt]=e,t[j]=n}catch(t){Z(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=jr(e),Mr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[mt]=e,Et(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=kr(s,h),v=kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),Ge&&typeof Ge.onPostCommitFiberRoot==`function`)try{Ge.onPostCommitFiberRoot(We,o)}catch{}return!0}finally{D.p=a,E.T=r,Vu(e,t)}}function Wu(e,t,n){t=bi(n,t),t=$s(e.stateNode,t,2),e=Wa(e,t,2),e!==null&&(it(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=bi(n,e),n=ec(2),r=Wa(t,n,2),r!==null&&(tc(n,r,t,e),it(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Fe()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=nt()),e=oi(e,t),e!==null&&(it(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return je(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-qe(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=$e(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||et(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Fe(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Wt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),Et(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Wt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Wt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Wt(n.imageSizes)+`"]`)):i+=`[href="`+Wt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),Et(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Wt(r)+`"][href="`+Wt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),Et(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=Tt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);Et(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),Et(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=Tt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),Et(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=_e.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=Tt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=Tt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=Tt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Wt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),Et(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Wt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Wt(n.href)+`"]`);if(r)return t.instance=r,Et(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Et(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,Et(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),Et(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,Et(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),Et(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Et(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),Et(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},b={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},x=new class{#e=b;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function S(e){setTimeout(e,0)}var C=typeof window>`u`||`Deno`in globalThis;function w(){}function ee(e,t){return typeof e==`function`?e(t):e}function te(e){return typeof e==`number`&&e>=0&&e!==1/0}function ne(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){return typeof e==`function`?e(t):e}function ie(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==oe(o,t.options))return!1}else if(!ce(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ae(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(se(t.options.mutationKey)!==se(a))return!1}else if(!ce(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function oe(e,t){return(t?.queryKeyHashFn||se)(e)}function se(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ce(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>ce(e[n],t[n])):!1}var le=Object.prototype.hasOwnProperty;function E(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{x.setTimeout(t,e)})}function me(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function O(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function he(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var ge=Symbol();function _e(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===ge?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ve(e,t){return typeof e==`function`?e(...t):!!e}function ye(e,t,n){let r=!1,i;return Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var be=(()=>{let e=()=>C;return{isServer(){return e()},setIsServer(t){e=t}}})();function xe(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var Se=S;function Ce(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=Se,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var we=Ce(),Te=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function Ee(e){return Math.min(1e3*2**e,3e4)}function De(e){return(e??`online`)===`online`?Te.isOnline():!0}var Oe=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function ke(e){let t=!1,n=0,r,i=xe(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Oe(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>y.isFocused()&&(e.networkMode===`always`||Te.isOnline())&&e.canRun(),u=()=>De(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(be.isServer()?0:3),o=e.retryDelay??Ee,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var Ae=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),te(this.gcTime)&&(this.#e=x.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(be.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e&&=(x.clearTimeout(this.#e),void 0)}},je=class extends Ae{#e;#t;#n;#r;#i;#a;#o;constructor(e){super(),this.#o=!1,this.#a=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Pe(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){if(this.options={...this.#a,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Pe(this.options);e.data!==void 0&&(this.setState(Ne(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#n.remove(this)}setData(e,t){let n=me(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#c({type:`setState`,state:e,setStateOptions:t})}cancel(e){let t=this.#i?.promise;return this.#i?.cancel(e),t?t.then(w).catch(w):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>re(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===ge||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>T(e.options.staleTime,this)===`static`):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!ne(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#i&&(this.#o||this.#s()?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#n.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#s(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#i?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,`signal`,{enumerable:!0,get:()=>(this.#o=!0,n.signal)})},i=()=>{let e=_e(this.options,t),n=(()=>{let e={client:this.#r,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#o=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:i};return r(e),e})();this.options.behavior?.onFetch(a,this),this.#t=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta}),this.#i=ke({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Oe&&e.revert&&this.setState({...this.#t,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#i.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#n.config.onSuccess?.(e,this),this.#n.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Oe){if(e.silent)return this.#i.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#n.config.onError?.(e,this),this.#n.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#c(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Me(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Ne(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}})(this.state),we.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#n.notify({query:this,type:`updated`,action:e})})}};function Me(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:De(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Ne(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Pe(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Fe=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=xe(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Le(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Re(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Re(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof re(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&ze(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return Ve(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(w)),t}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(be.isServer()||this.#r.isStale||!te(e))return;let t=ne(this.#r.dataUpdatedAt,e)+1;this.#d=x.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(be.isServer()||re(this.options.enabled,this.#t)===!1||!te(this.#p)||this.#p===0)&&(this.#f=x.setInterval(()=>{(this.options.refetchIntervalInBackground||y.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d&&=(x.clearTimeout(this.#d),void 0)}#x(){this.#f&&=(x.clearInterval(this.#f),void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Le(e,t),o=i&&ze(e,n,t,r);(a||o)&&(l={...l,...Me(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=me(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=me(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Be(e,t),refetch:this.refetch,promise:this.#o,isEnabled:re(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{i(this.#o=x.promise=xe())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!D(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){we.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Ie(e,t){return re(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function Le(e,t){return Ie(e,t)||e.state.data!==void 0&&Re(e,t,t.refetchOnMount)}function Re(e,t,n){if(re(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Be(e,t)}return!1}function ze(e,t,n,r){return(e!==t||re(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Be(e,n)}function Be(e,t){return re(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}function Ve(e,t){return!D(e.getCurrentResult(),t)}function He(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ye(e,()=>t.signal,()=>n=!0)},u=_e(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?he:O;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?We:Ue,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Ue(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function Ue(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function We(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Ge=class extends Ae{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||Ke(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=ke({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),we.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function Ke(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var qe=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new Ge({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Je(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Je(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Je(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=Je(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){we.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ae(t,e))}findAll(e={}){return this.getAll().filter(t=>ae(e,t))}notify(e){we.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return we.batch(()=>Promise.all(e.map(e=>e.continue().catch(w))))}};function Je(e){return e.options.scope?.id}var Ye=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??oe(r,t),a=this.get(i);return a||(a=new je({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){we.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ie(e,t)):t}notify(e){we.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){we.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){we.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Xe=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ye,this.#t=e.mutationCache||new qe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Te.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(T(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=ee(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return we.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;we.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return we.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=we.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(w).catch(w)}invalidateQueries(e,t={}){return we.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=we.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(w)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(w)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(T(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(w).catch(w)}fetchInfiniteQuery(e){return e.behavior=He(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(w).catch(w)}ensureInfiniteQueryData(e){return e.behavior=He(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Te.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(se(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(se(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=oe(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===ge&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Ze=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Qe=o(((e,t)=>{t.exports=Ze()})),k=l(d(),1),A=Qe(),$e=k.createContext(void 0),et=e=>{let t=k.useContext($e);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},tt=({client:e,children:t})=>(k.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,A.jsx)($e.Provider,{value:e,children:t})),nt=k.createContext(!1),rt=()=>k.useContext(nt);nt.Provider;function it(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var at=k.createContext(it()),ot=()=>k.useContext(at),st=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?ve(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},ct=e=>{k.useEffect(()=>{e.clearReset()},[e])},lt=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||ve(n,[e.error,r])),ut=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},dt=(e,t)=>e.isLoading&&e.isFetching&&!t,ft=(e,t)=>e?.suspense&&t.isPending,pt=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function mt(e,t,n){let r=rt(),i=ot(),a=et(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash);o._optimisticResults=r?`isRestoring`:`optimistic`,ut(o),st(o,i,s),ct(i);let c=!a.getQueryCache().get(o.queryHash),[l]=k.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&e.subscribed!==!1;if(k.useSyncExternalStore(k.useCallback(e=>{let t=d?l.subscribe(we.batchCalls(e)):w;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),k.useEffect(()=>{l.setOptions(o)},[o,l]),ft(o,u))throw pt(o,l,i);if(lt({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,u),o.experimental_prefetchInRender&&!be.isServer()&&dt(u,r)&&(c?pt(o,l,i):s?.promise)?.catch(w).finally(()=>{l.updateResult()}),o.notifyOnChangeProps?u:l.trackResult(u)}function j(e,t){return mt(e,Fe,t)}function ht(e,t){return function(){return e.apply(t,arguments)}}var{toString:gt}=Object.prototype,{getPrototypeOf:_t}=Object,{iterator:vt,toStringTag:yt}=Symbol,bt=(e=>t=>{let n=gt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),xt=e=>(e=e.toLowerCase(),t=>bt(t)===e),St=e=>t=>typeof t===e,{isArray:Ct}=Array,wt=St(`undefined`);function Tt(e){return e!==null&&!wt(e)&&e.constructor!==null&&!wt(e.constructor)&&M(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Et=xt(`ArrayBuffer`);function Dt(e){let t;return t=typeof ArrayBuffer<`u`&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Et(e.buffer),t}var Ot=St(`string`),M=St(`function`),kt=St(`number`),At=e=>typeof e==`object`&&!!e,jt=e=>e===!0||e===!1,Mt=e=>{if(bt(e)!==`object`)return!1;let t=_t(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(yt in e)&&!(vt in e)},Nt=e=>{if(!At(e)||Tt(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Pt=xt(`Date`),Ft=xt(`File`),It=e=>!!(e&&e.uri!==void 0),Lt=e=>e&&e.getParts!==void 0,Rt=xt(`Blob`),zt=xt(`FileList`),Bt=e=>At(e)&&M(e.pipe);function Vt(){return typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{}}var Ht=Vt(),Ut=Ht.FormData===void 0?void 0:Ht.FormData,Wt=e=>{let t;return e&&(Ut&&e instanceof Ut||M(e.append)&&((t=bt(e))===`formdata`||t===`object`&&M(e.toString)&&e.toString()===`[object FormData]`))},Gt=xt(`URLSearchParams`),[Kt,qt,Jt,Yt]=[`ReadableStream`,`Request`,`Response`,`Headers`].map(xt),Xt=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,``);function Zt(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,i;if(typeof e!=`object`&&(e=[e]),Ct(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}var $t=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:global,en=e=>!wt(e)&&e!==$t;function tn(){let{caseless:e,skipUndefined:t}=en(this)&&this||{},n={},r=(r,i)=>{if(i===`__proto__`||i===`constructor`||i===`prototype`)return;let a=e&&Qt(n,i)||i;Mt(n[a])&&Mt(r)?n[a]=tn(n[a],r):Mt(r)?n[a]=tn({},r):Ct(r)?n[a]=r.slice():(!t||!wt(r))&&(n[a]=r)};for(let e=0,t=arguments.length;e(Zt(t,(t,r)=>{n&&M(t)?Object.defineProperty(e,r,{value:ht(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),rn=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),an=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,`constructor`,{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,`super`,{value:t.prototype}),n&&Object.assign(e.prototype,n)},on=(e,t,n,r)=>{let i,a,o,s={};if(t||={},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)o=i[a],(!r||r(o,e,t))&&!s[o]&&(t[o]=e[o],s[o]=!0);e=n!==!1&&_t(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},sn=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},cn=e=>{if(!e)return null;if(Ct(e))return e;let t=e.length;if(!kt(t))return null;let n=Array(t);for(;t-- >0;)n[t]=e[t];return n},ln=(e=>t=>e&&t instanceof e)(typeof Uint8Array<`u`&&_t(Uint8Array)),un=(e,t)=>{let n=(e&&e[vt]).call(e),r;for(;(r=n.next())&&!r.done;){let n=r.value;t.call(e,n[0],n[1])}},dn=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},fn=xt(`HTMLFormElement`),pn=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),mn=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),hn=xt(`RegExp`),gn=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};Zt(n,(n,i)=>{let a;(a=t(n,i,e))!==!1&&(r[i]=a||n)}),Object.defineProperties(e,r)},_n=e=>{gn(e,(t,n)=>{if(M(e)&&[`arguments`,`caller`,`callee`].indexOf(n)!==-1)return!1;let r=e[n];if(M(r)){if(t.enumerable=!1,`writable`in t){t.writable=!1;return}t.set||=()=>{throw Error(`Can not rewrite read-only method '`+n+`'`)}}})},vn=(e,t)=>{let n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Ct(e)?r(e):r(String(e).split(t)),n},yn=()=>{},bn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function xn(e){return!!(e&&M(e.append)&&e[yt]===`FormData`&&e[vt])}var Sn=e=>{let t=Array(10),n=(e,r)=>{if(At(e)){if(t.indexOf(e)>=0)return;if(Tt(e))return e;if(!(`toJSON`in e)){t[r]=e;let i=Ct(e)?[]:{};return Zt(e,(e,t)=>{let a=n(e,r+1);!wt(a)&&(i[t]=a)}),t[r]=void 0,i}}return e};return n(e,0)},Cn=xt(`AsyncFunction`),wn=e=>e&&(At(e)||M(e))&&M(e.then)&&M(e.catch),Tn=((e,t)=>e?setImmediate:t?((e,t)=>($t.addEventListener(`message`,({source:n,data:r})=>{n===$t&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),$t.postMessage(e,`*`)}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))(typeof setImmediate==`function`,M($t.postMessage)),N={isArray:Ct,isArrayBuffer:Et,isBuffer:Tt,isFormData:Wt,isArrayBufferView:Dt,isString:Ot,isNumber:kt,isBoolean:jt,isObject:At,isPlainObject:Mt,isEmptyObject:Nt,isReadableStream:Kt,isRequest:qt,isResponse:Jt,isHeaders:Yt,isUndefined:wt,isDate:Pt,isFile:Ft,isReactNativeBlob:It,isReactNative:Lt,isBlob:Rt,isRegExp:hn,isFunction:M,isStream:Bt,isURLSearchParams:Gt,isTypedArray:ln,isFileList:zt,forEach:Zt,merge:tn,extend:nn,trim:Xt,stripBOM:rn,inherits:an,toFlatObject:on,kindOf:bt,kindOfTest:xt,endsWith:sn,toArray:cn,forEachEntry:un,matchAll:dn,isHTMLForm:fn,hasOwnProperty:mn,hasOwnProp:mn,reduceDescriptors:gn,freezeMethods:_n,toObjectSet:vn,toCamelCase:pn,noop:yn,toFiniteNumber:bn,findKey:Qt,global:$t,isContextDefined:en,isSpecCompliantForm:xn,toJSONObject:Sn,isAsyncFn:Cn,isThenable:wn,setImmediate:Tn,asap:typeof queueMicrotask<`u`?queueMicrotask.bind($t):typeof process<`u`&&process.nextTick||Tn,isIterable:e=>e!=null&&M(e[vt])},P=class e extends Error{static from(t,n,r,i,a,o){let s=new e(t.message,n||t.code,r,i,a);return s.cause=t,s.name=t.name,t.status!=null&&s.status==null&&(s.status=t.status),o&&Object.assign(s,o),s}constructor(e,t,n,r,i){super(e),Object.defineProperty(this,`message`,{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name=`AxiosError`,this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:N.toJSONObject(this.config),code:this.code,status:this.status}}};P.ERR_BAD_OPTION_VALUE=`ERR_BAD_OPTION_VALUE`,P.ERR_BAD_OPTION=`ERR_BAD_OPTION`,P.ECONNABORTED=`ECONNABORTED`,P.ETIMEDOUT=`ETIMEDOUT`,P.ERR_NETWORK=`ERR_NETWORK`,P.ERR_FR_TOO_MANY_REDIRECTS=`ERR_FR_TOO_MANY_REDIRECTS`,P.ERR_DEPRECATED=`ERR_DEPRECATED`,P.ERR_BAD_RESPONSE=`ERR_BAD_RESPONSE`,P.ERR_BAD_REQUEST=`ERR_BAD_REQUEST`,P.ERR_CANCELED=`ERR_CANCELED`,P.ERR_NOT_SUPPORT=`ERR_NOT_SUPPORT`,P.ERR_INVALID_URL=`ERR_INVALID_URL`;function En(e){return N.isPlainObject(e)||N.isArray(e)}function Dn(e){return N.endsWith(e,`[]`)?e.slice(0,-2):e}function On(e,t,n){return e?e.concat(t).map(function(e,t){return e=Dn(e),!n&&t?`[`+e+`]`:e}).join(n?`.`:``):t}function kn(e){return N.isArray(e)&&!e.some(En)}var An=N.toFlatObject(N,{},null,function(e){return/^is[A-Z]/.test(e)});function jn(e,t,n){if(!N.isObject(e))throw TypeError(`target must be an object`);t||=new FormData,n=N.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!N.isUndefined(t[e])});let r=n.metaTokens,i=n.visitor||l,a=n.dots,o=n.indexes,s=(n.Blob||typeof Blob<`u`&&Blob)&&N.isSpecCompliantForm(t);if(!N.isFunction(i))throw TypeError(`visitor must be a function`);function c(e){if(e===null)return``;if(N.isDate(e))return e.toISOString();if(N.isBoolean(e))return e.toString();if(!s&&N.isBlob(e))throw new P(`Blob is not supported. Use a Buffer instead.`);return N.isArrayBuffer(e)||N.isTypedArray(e)?s&&typeof Blob==`function`?new Blob([e]):Buffer.from(e):e}function l(e,n,i){let s=e;if(N.isReactNative(t)&&N.isReactNativeBlob(e))return t.append(On(i,n,a),c(e)),!1;if(e&&!i&&typeof e==`object`){if(N.endsWith(n,`{}`))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(N.isArray(e)&&kn(e)||(N.isFileList(e)||N.endsWith(n,`[]`))&&(s=N.toArray(e)))return n=Dn(n),s.forEach(function(e,r){!(N.isUndefined(e)||e===null)&&t.append(o===!0?On([n],r,a):o===null?n:n+`[]`,c(e))}),!1}return En(e)?!0:(t.append(On(i,n,a),c(e)),!1)}let u=[],d=Object.assign(An,{defaultVisitor:l,convertValue:c,isVisitable:En});function f(e,n){if(!N.isUndefined(e)){if(u.indexOf(e)!==-1)throw Error(`Circular reference detected in `+n.join(`.`));u.push(e),N.forEach(e,function(e,r){(!(N.isUndefined(e)||e===null)&&i.call(t,e,N.isString(r)?r.trim():r,n,d))===!0&&f(e,n?n.concat(r):[r])}),u.pop()}}if(!N.isObject(e))throw TypeError(`data must be an object`);return f(e),t}function Mn(e){let t={"!":`%21`,"'":`%27`,"(":`%28`,")":`%29`,"~":`%7E`,"%20":`+`,"%00":`\0`};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function Nn(e,t){this._pairs=[],e&&jn(e,this,t)}var Pn=Nn.prototype;Pn.append=function(e,t){this._pairs.push([e,t])},Pn.toString=function(e){let t=e?function(t){return e.call(this,t,Mn)}:Mn;return this._pairs.map(function(e){return t(e[0])+`=`+t(e[1])},``).join(`&`)};function Fn(e){return encodeURIComponent(e).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`).replace(/%20/g,`+`)}function In(e,t,n){if(!t)return e;let r=n&&n.encode||Fn,i=N.isFunction(n)?{serialize:n}:n,a=i&&i.serialize,o;if(o=a?a(t,i):N.isURLSearchParams(t)?t.toString():new Nn(t,i).toString(r),o){let t=e.indexOf(`#`);t!==-1&&(e=e.slice(0,t)),e+=(e.indexOf(`?`)===-1?`?`:`&`)+o}return e}var Ln=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&=[]}forEach(e){N.forEach(this.handlers,function(t){t!==null&&e(t)})}},Rn={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},zn={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<`u`?URLSearchParams:Nn,FormData:typeof FormData<`u`?FormData:null,Blob:typeof Blob<`u`?Blob:null},protocols:[`http`,`https`,`file`,`blob`,`url`,`data`]},Bn=s({hasBrowserEnv:()=>Vn,hasStandardBrowserEnv:()=>Un,hasStandardBrowserWebWorkerEnv:()=>Wn,navigator:()=>Hn,origin:()=>Gn}),Vn=typeof window<`u`&&typeof document<`u`,Hn=typeof navigator==`object`&&navigator||void 0,Un=Vn&&(!Hn||[`ReactNative`,`NativeScript`,`NS`].indexOf(Hn.product)<0),Wn=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope&&typeof self.importScripts==`function`,Gn=Vn&&window.location.href||`http://localhost`,Kn={...Bn,...zn};function qn(e,t){return jn(e,new Kn.classes.URLSearchParams,{visitor:function(e,t,n,r){return Kn.isNode&&N.isBuffer(e)?(this.append(t,e.toString(`base64`)),!1):r.defaultVisitor.apply(this,arguments)},...t})}function Jn(e){return N.matchAll(/\w+|\[(\w*)]/g,e).map(e=>e[0]===`[]`?``:e[1]||e[0])}function Yn(e){let t={},n=Object.keys(e),r,i=n.length,a;for(r=0;r=e.length;return a=!a&&N.isArray(r)?r.length:a,s?(N.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!o):((!r[a]||!N.isObject(r[a]))&&(r[a]=[]),t(e,n,r[a],i)&&N.isArray(r[a])&&(r[a]=Yn(r[a])),!o)}if(N.isFormData(e)&&N.isFunction(e.entries)){let n={};return N.forEachEntry(e,(e,r)=>{t(Jn(e),r,n,0)}),n}return null}function Zn(e,t,n){if(N.isString(e))try{return(t||JSON.parse)(e),N.trim(e)}catch(e){if(e.name!==`SyntaxError`)throw e}return(n||JSON.stringify)(e)}var Qn={transitional:Rn,adapter:[`xhr`,`http`,`fetch`],transformRequest:[function(e,t){let n=t.getContentType()||``,r=n.indexOf(`application/json`)>-1,i=N.isObject(e);if(i&&N.isHTMLForm(e)&&(e=new FormData(e)),N.isFormData(e))return r?JSON.stringify(Xn(e)):e;if(N.isArrayBuffer(e)||N.isBuffer(e)||N.isStream(e)||N.isFile(e)||N.isBlob(e)||N.isReadableStream(e))return e;if(N.isArrayBufferView(e))return e.buffer;if(N.isURLSearchParams(e))return t.setContentType(`application/x-www-form-urlencoded;charset=utf-8`,!1),e.toString();let a;if(i){if(n.indexOf(`application/x-www-form-urlencoded`)>-1)return qn(e,this.formSerializer).toString();if((a=N.isFileList(e))||n.indexOf(`multipart/form-data`)>-1){let t=this.env&&this.env.FormData;return jn(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||r?(t.setContentType(`application/json`,!1),Zn(e)):e}],transformResponse:[function(e){let t=this.transitional||Qn.transitional,n=t&&t.forcedJSONParsing,r=this.responseType===`json`;if(N.isResponse(e)||N.isReadableStream(e))return e;if(e&&N.isString(e)&&(n&&!this.responseType||r)){let n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n)throw e.name===`SyntaxError`?P.from(e,P.ERR_BAD_RESPONSE,this,null,this.response):e}}return e}],timeout:0,xsrfCookieName:`XSRF-TOKEN`,xsrfHeaderName:`X-XSRF-TOKEN`,maxContentLength:-1,maxBodyLength:-1,env:{FormData:Kn.classes.FormData,Blob:Kn.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:`application/json, text/plain, */*`,"Content-Type":void 0}}};N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`],e=>{Qn.headers[e]={}});var $n=N.toObjectSet([`age`,`authorization`,`content-length`,`content-type`,`etag`,`expires`,`from`,`host`,`if-modified-since`,`if-unmodified-since`,`last-modified`,`location`,`max-forwards`,`proxy-authorization`,`referer`,`retry-after`,`user-agent`]),er=e=>{let t={},n,r,i;return e&&e.split(` +`).forEach(function(e){i=e.indexOf(`:`),n=e.substring(0,i).trim().toLowerCase(),r=e.substring(i+1).trim(),!(!n||t[n]&&$n[n])&&(n===`set-cookie`?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+`, `+r:r)}),t},tr=Symbol(`internals`);function nr(e){return e&&String(e).trim().toLowerCase()}function rr(e){return e===!1||e==null?e:N.isArray(e)?e.map(rr):String(e)}function ir(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var ar=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function or(e,t,n,r,i){if(N.isFunction(r))return r.call(this,t,n);if(i&&(t=n),N.isString(t)){if(N.isString(r))return t.indexOf(r)!==-1;if(N.isRegExp(r))return r.test(t)}}function sr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}function cr(e,t){let n=N.toCamelCase(` `+t);[`get`,`set`,`has`].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,i){return this[r].call(this,t,e,n,i)},configurable:!0})})}var lr=class{constructor(e){e&&this.set(e)}set(e,t,n){let r=this;function i(e,t,n){let i=nr(t);if(!i)throw Error(`header name must be a non-empty string`);let a=N.findKey(r,i);(!a||r[a]===void 0||n===!0||n===void 0&&r[a]!==!1)&&(r[a||t]=rr(e))}let a=(e,t)=>N.forEach(e,(e,n)=>i(e,n,t));if(N.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(N.isString(e)&&(e=e.trim())&&!ar(e))a(er(e),t);else if(N.isObject(e)&&N.isIterable(e)){let n={},r,i;for(let t of e){if(!N.isArray(t))throw TypeError(`Object iterator must return a key-value pair`);n[i=t[0]]=(r=n[i])?N.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(n,t)}else e!=null&&i(t,e,n);return this}get(e,t){if(e=nr(e),e){let n=N.findKey(this,e);if(n){let e=this[n];if(!t)return e;if(t===!0)return ir(e);if(N.isFunction(t))return t.call(this,e,n);if(N.isRegExp(t))return t.exec(e);throw TypeError(`parser must be boolean|regexp|function`)}}}has(e,t){if(e=nr(e),e){let n=N.findKey(this,e);return!!(n&&this[n]!==void 0&&(!t||or(this,this[n],n,t)))}return!1}delete(e,t){let n=this,r=!1;function i(e){if(e=nr(e),e){let i=N.findKey(n,e);i&&(!t||or(n,n[i],i,t))&&(delete n[i],r=!0)}}return N.isArray(e)?e.forEach(i):i(e),r}clear(e){let t=Object.keys(this),n=t.length,r=!1;for(;n--;){let i=t[n];(!e||or(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let t=this,n={};return N.forEach(this,(r,i)=>{let a=N.findKey(n,i);if(a){t[a]=rr(r),delete t[i];return}let o=e?sr(i):String(i).trim();o!==i&&delete t[i],t[o]=rr(r),n[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let t=Object.create(null);return N.forEach(this,(n,r)=>{n!=null&&n!==!1&&(t[r]=e&&N.isArray(n)?n.join(`, `):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+`: `+t).join(` +`)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[tr]=this[tr]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=nr(e);t[r]||(cr(n,e),t[r]=!0)}return N.isArray(e)?e.forEach(r):r(e),this}};lr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),N.reduceDescriptors(lr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),N.freezeMethods(lr);function ur(e,t){let n=this||Qn,r=t||n,i=lr.from(r.headers),a=r.data;return N.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function dr(e){return!!(e&&e.__CANCEL__)}var fr=class extends P{constructor(e,t,n){super(e??`canceled`,P.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function pr(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new P(`Request failed with status code `+n.status,[P.ERR_BAD_REQUEST,P.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function mr(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function hr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var _r=(e,t,n=3)=>{let r=0,i=hr(50,250);return gr(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},vr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},yr=e=>(...t)=>N.asap(()=>e(...t)),br=Kn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Kn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Kn.origin),Kn.navigator&&/(msie|trident)/i.test(Kn.navigator.userAgent)):()=>!0,xr=Kn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];N.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),N.isString(r)&&s.push(`path=${r}`),N.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),N.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Sr(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Cr(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function wr(e,t,n){let r=!Sr(t);return e&&(r||n==0)?Cr(e,t):t}var Tr=e=>e instanceof lr?{...e}:e;function Er(e,t){t||={};let n={};function r(e,t,n,r){return N.isPlainObject(e)&&N.isPlainObject(t)?N.merge.call({caseless:r},e,t):N.isPlainObject(t)?N.merge({},t):N.isArray(t)?t.slice():t}function i(e,t,n,i){if(!N.isUndefined(t))return r(e,t,n,i);if(!N.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!N.isUndefined(t))return r(void 0,t)}function o(e,t){if(!N.isUndefined(t))return r(void 0,t);if(!N.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(Tr(e),Tr(t),n,!0)};return N.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=N.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);N.isUndefined(o)&&a!==s||(n[r]=o)}),n}var Dr=e=>{let t=Er({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=lr.from(o),t.url=In(wr(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),N.isFormData(n)){if(Kn.hasStandardBrowserEnv||Kn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(N.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Kn.hasStandardBrowserEnv&&(r&&N.isFunction(r)&&(r=r(t)),r||r!==!1&&br(t.url))){let e=i&&a&&xr.read(a);e&&o.set(i,e)}return t},Or=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=Dr(e),i=r.data,a=lr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=lr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());pr(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new P(`Request aborted`,P.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new P(t&&t.message?t.message:`Network Error`,P.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Rn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new P(t,i.clarifyTimeoutError?P.ETIMEDOUT:P.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&N.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),N.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=_r(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=_r(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new fr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=mr(r.url);if(_&&Kn.protocols.indexOf(_)===-1){n(new P(`Unsupported protocol `+_+`:`,P.ERR_BAD_REQUEST,e));return}h.send(i||null)})},kr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof P?t:new fr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new P(`timeout of ${t}ms exceeded`,P.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>N.asap(o),s}},Ar=function*(e,t){let n=e.byteLength;if(!t||n{let i=jr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Pr=64*1024,{isFunction:Fr}=N,Ir=(({Request:e,Response:t})=>({Request:e,Response:t}))(N.global),{ReadableStream:Lr,TextEncoder:Rr}=N.global,zr=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Br=e=>{e=N.merge.call({skipUndefined:!0},Ir,e);let{fetch:t,Request:n,Response:r}=e,i=t?Fr(t):typeof fetch==`function`,a=Fr(n),o=Fr(r);if(!i)return!1;let s=i&&Fr(Lr),c=i&&(typeof Rr==`function`?(e=>t=>e.encode(t))(new Rr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&zr(()=>{let e=!1,t=new n(Kn.origin,{body:new Lr,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&zr(()=>N.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new P(`Response type '${e}' is not supported`,P.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(N.isBlob(e))return e.size;if(N.isSpecCompliantForm(e))return(await new n(Kn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(N.isArrayBufferView(e)||N.isArrayBuffer(e))return e.byteLength;if(N.isURLSearchParams(e)&&(e+=``),N.isString(e))return(await c(e)).byteLength},p=async(e,t)=>N.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=Dr(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=kr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(N.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=vr(ee,_r(yr(g)));s=Nr(e.body,Pr,t,n)}}N.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=N.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&vr(t,_r(yr(h),!0))||[];f=new r(Nr(f.body,Pr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[N.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{pr(t,n,{data:te,headers:lr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new P(`Network Error`,P.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):P.from(t,t&&t.code,e,C,t&&t.response)}}},Vr=new Map,Hr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Vr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Br(t)),l=c;return c};Hr();var Ur={http:null,xhr:Or,fetch:{get:Hr}};N.forEach(Ur,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var Wr=e=>`- ${e}`,Gr=e=>N.isFunction(e)||e===null||e===!1;function Kr(e,t){e=N.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new P(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : +`+e.map(Wr).join(` +`):` `+Wr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var qr={getAdapter:Kr,adapters:Ur};function Jr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new fr(null,e)}function Yr(e){return Jr(e),e.headers=lr.from(e.headers),e.data=ur.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),qr.getAdapter(e.adapter||Qn.adapter,e)(e).then(function(t){return Jr(e),t.data=ur.call(e,e.transformResponse,t),t.headers=lr.from(t.headers),t},function(t){return dr(t)||(Jr(e),t&&t.response&&(t.response.data=ur.call(e,e.transformResponse,t.response),t.response.headers=lr.from(t.response.headers))),Promise.reject(t)})}var Xr=`1.13.6`,Zr={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{Zr[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var Qr={};Zr.transitional=function(e,t,n){function r(e,t){return`[Axios v`+Xr+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new P(r(i,` has been removed`+(t?` in `+t:``)),P.ERR_DEPRECATED);return t&&!Qr[i]&&(Qr[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},Zr.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function $r(e,t,n){if(typeof e!=`object`)throw new P(`options must be an object`,P.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new P(`option `+a+` must be `+n,P.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new P(`Unknown option `+a,P.ERR_BAD_OPTION)}}var ei={assertOptions:$r,validators:Zr},F=ei.validators,ti=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Ln,response:new Ln}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` +`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=Er(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ei.assertOptions(n,{silentJSONParsing:F.transitional(F.boolean),forcedJSONParsing:F.transitional(F.boolean),clarifyTimeoutError:F.transitional(F.boolean),legacyInterceptorReqResOrdering:F.transitional(F.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:ei.assertOptions(r,{encode:F.function,serialize:F.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ei.assertOptions(t,{baseUrl:F.spelling(`baseURL`),withXsrfToken:F.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=lr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Rn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Yr.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new fr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function ri(e){return function(t){return e.apply(null,t)}}function ii(e){return N.isObject(e)&&e.isAxiosError===!0}var ai={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ai).forEach(([e,t])=>{ai[t]=e});function oi(e){let t=new ti(e),n=ht(ti.prototype.request,t);return N.extend(n,ti.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return oi(Er(e,t))},n}var I=oi(Qn);I.Axios=ti,I.CanceledError=fr,I.CancelToken=ni,I.isCancel=dr,I.VERSION=Xr,I.toFormData=jn,I.AxiosError=P,I.Cancel=I.CanceledError,I.all=function(e){return Promise.all(e)},I.spread=ri,I.isAxiosError=ii,I.mergeConfig=Er,I.AxiosHeaders=lr,I.formToJSON=e=>Xn(N.isHTMLForm(e)?new FormData(e):e),I.getAdapter=qr.getAdapter,I.HttpStatusCode=ai,I.default=I;var si=l(_()),ci=`order-demo-001`;function li(e,t,n,r,i,a){return{eventId:e,aggregateId:ci,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function ui(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(li(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var di=ui();function fi(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:ci,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var pi=fi(di);function mi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function hi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function gi(e){let t=[],n={};for(let r of e){let e={...n};n=mi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:hi(e,i)})}return t}var _i=gi(di);function vi(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function yi(e){return vi(e)?[ci]:[]}function bi(e){let t=Math.min(Math.max(e,1),500);return[...di].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,t)}function xi(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=di.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:di.slice(i,i+a),totalEvents:r}}function Si(e){return e===`order-demo-001`?_i:[]}function Ci(e){let t=Math.min(Math.max(e,1),500);return pi.slice(0,t)}function wi(){return[...di].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function Ti(){return{status:`UP`,version:`demo`,demo:!0}}function Ei(e=1,t=24){let n=Math.max(e,1)*60*60*1e3,r=[...di].sort((e,t)=>Date.parse(e.timestamp)-Date.parse(t.timestamp)),i=new Map,a=new Map,o=new Map;for(let e of r){let t=new Date(Math.floor(Date.parse(e.timestamp)/n)*n).toISOString();i.set(t,(i.get(t)??0)+1),a.set(e.eventType,(a.get(e.eventType)??0)+1),o.set(e.aggregateType,(o.get(e.aggregateType)??0)+1)}return{totalEvents:di.length,distinctAggregates:1,eventTypes:[...a.entries()].map(([e,t])=>({type:e,count:t})),aggregateTypes:[...o.entries()].map(([e,t])=>({type:e,count:t})),throughput:[...i.entries()].slice(-Math.max(t,1)).map(([e,t])=>({bucket:e,count:t})),available:!0,message:null}}function Di(){return!1}var Oi=I.create({baseURL:`/api`});function ki(e){return new Promise(t=>{setTimeout(t,e)})}function Ai(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var ji=async(e,t=20,n)=>{let r=Ai(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(Di()){await ki(40);let n=yi(e);try{let e=await Oi.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Oi.get(r).then(e=>e.data)},Mi=async(e,t=500,n=0,r,i=`full`)=>{if(Di()&&e===`order-demo-001`)return await ki(50),xi(e,t,n);let a=Ai(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Oi.get(a).then(e=>e.data)},Ni=async(e,t)=>Di()&&e===`order-demo-001`?(await ki(50),Si(e)):Oi.get(Ai(`/aggregates/${e}/transitions`,t)).then(e=>e.data),Pi=async(e=100,t)=>Di()?(await ki(45),Ci(e)):Oi.get(Ai(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),Fi=async(e=50,t)=>Di()?(await ki(35),bi(e)):Oi.get(Ai(`/events/recent?limit=${e}`,t)).then(e=>e.data),L=async(e,t=1,n=24)=>{if(Di())return await ki(30),Ei(t,n);let r=Ai(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Oi.get(r).then(e=>e.data)},R=async()=>Di()?(await ki(20),Ti()):Oi.get(`/health`).then(e=>e.data),Ii=async()=>Di()?(await ki(20),[{id:`demo-primary`,displayName:`Demo Primary`,status:`ready`,healthMessage:`Frontend demo datasource`,capabilities:[`timeline`,`replay`,`statistics`]}]):Oi.get(`/v1/datasources`).then(e=>e.data),Li=async()=>Di()?(await ki(20),[{instanceId:`demo-source`,typeId:`demo`,displayName:`Demo Source Plugin`,pluginType:`EVENT_SOURCE`,lifecycle:`ready`,health:{state:`up`,message:`Frontend demo plugin`},lastHealthCheck:new Date().toISOString(),failureReason:null}]):Oi.get(`/v1/plugins`).then(e=>e.data);function Ri(e,t){let[n,r]=(0,k.useState)(e);return(0,k.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function zi({onSelect:e,source:t,selectedValue:n}){let[r,i]=(0,k.useState)(``),[a,o]=(0,k.useState)(!1),s=(0,k.useRef)(null),c=Ri(r,300),{data:l=[]}=j({queryKey:[`search`,c,t??`default`],queryFn:()=>ji(c,20,t),enabled:c.length>=2,staleTime:5e3});(0,k.useEffect)(()=>{i(n??``)},[n]),(0,k.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let u=(0,k.useRef)(null),d=(0,k.useCallback)(()=>{u.current?.focus(),u.current?.select()},[]);(0,k.useEffect)(()=>{let e=document.getElementById(`aggregate-search`);return e?.addEventListener(`focus`,d),()=>e?.removeEventListener(`focus`,d)},[d]);let f=t=>{i(t),o(!1),e(t)};return(0,A.jsxs)(`div`,{className:`search-wrapper`,ref:s,children:[(0,A.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,A.jsx)(`input`,{id:`aggregate-search`,ref:u,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:r,onChange:e=>{i(e.target.value),o(!0)},onFocus:()=>r.length>=2&&o(!0),onKeyDown:e=>{e.key===`Enter`&&r.trim()&&f(r.trim()),e.key===`Escape`&&o(!1)},autoComplete:`off`,"aria-expanded":a,"aria-controls":`aggregate-search-results`,"aria-autocomplete":`list`}),a&&l.length>0&&(0,A.jsx)(`div`,{className:`search-results`,role:`listbox`,id:`aggregate-search-results`,children:l.map(e=>(0,A.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>f(e),role:`option`,children:[(0,A.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,A.jsxs)(`span`,{className:`search-result-body`,children:[(0,A.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,A.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,A.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Bi(e,t){return j({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Mi(e,500,0,t,`metadata`),enabled:!!e})}function Vi(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}function Hi(e){let t=[],n=0;for(;n=4)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function Gi(e,t){return e===t?null:t}var Ki=[1,6,24,168];function qi(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function Ji(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function Yi(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function Xi(e,t){return t==null?!1:e.kind===`single`?e.event.sequenceNumber===t:e.items.some(e=>e.sequenceNumber===t)}function Zi(e,t,n,r,i){let a=e.event,o=t===a.sequenceNumber,s=n===a.sequenceNumber,c=e.kind===`group-item`?` timeline-step-compact`:``;return(0,A.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${qi(a.eventType)} ${o?`active`:``} ${s?`timeline-step-compare`:``}${c}`,onClick:e=>{e.shiftKey&&i?i(Gi(n,a.sequenceNumber)):r(a.sequenceNumber)},"aria-current":o?`step`:void 0,"aria-selected":o,"aria-label":Yi(e.stepNumber,a),children:[(0,A.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,A.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,a.sequenceNumber]}),(0,A.jsx)(`span`,{className:`timeline-step-type`,children:a.eventType}),(0,A.jsx)(`span`,{className:`timeline-step-seq`,children:Vi(a.timestamp).toLocaleTimeString()})]},e.key)}function Qi({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Bi(e,a),[c,l]=(0,k.useState)(``),[u,d]=(0,k.useState)(``),[f,p]=(0,k.useState)(`all`),[m,h]=(0,k.useState)(null),g=(0,k.useRef)(null),_=o?.events??[],v=o?.totalEvents??0,y=(0,k.useMemo)(()=>{let e=_;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Vi(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Vi(e.timestamp).getTime()>=t)}return e},[_,c,f]),b=(0,k.useMemo)(()=>Hi(y),[y]),x=(0,k.useMemo)(()=>[...new Set(_.map(e=>e.eventType))].sort(),[_]);(0,k.useEffect)(()=>{if(t!=null){for(let e of b)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(Ui(e.startIndex,e.items.length));return}h(null)}},[b,t]);let S=(0,k.useMemo)(()=>Wi(b,m,t),[m,b,t]),C=(0,k.useMemo)(()=>t==null?-1:S.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[S,t]);if((0,k.useEffect)(()=>{let e=e=>{let t=e.detail;if(S.length&&(t<0||t>0)){let e=C>=0?C:0;r(Ji(S[Math.max(0,Math.min(S.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,S,C]),(0,k.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!S.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=S.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,S,t]),(0,k.useEffect)(()=>{if(!g.current||t==null)return;let e=g.current.querySelector(`[aria-current="step"]`);if(!e)return;let n=g.current.getBoundingClientRect(),r=e.getBoundingClientRect(),i=g.current.scrollLeft,a=i+(r.left-n.left),o=a+r.width,s=i,c=i+g.current.clientWidth;ac-24&&g.current.scrollTo({left:o-g.current.clientWidth+24,behavior:`smooth`})},[m,t]),s)return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,A.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!_.length)return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let w=y[0]?.sequenceNumber??0,ee=y[y.length-1]?.sequenceNumber??0;return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,A.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Event Sequence`,(0,A.jsxs)(`span`,{className:`timeline-count-pill`,children:[y.length,` / `,v,` events`]})]}),(0,A.jsx)(`div`,{className:`timeline-jump-group`,children:(0,A.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);y.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,A.jsx)(`p`,{className:`timeline-hint`,children:`Scroll the rail horizontally from left to right. Repeated event runs collapse into grouped cards; click a group to open the full strip below.`}),(0,A.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),x.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,A.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),Ki.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,A.jsx)(`div`,{className:`timeline-rail`,children:(0,A.jsx)(`div`,{ref:g,className:`timeline-stepper`,children:(0,A.jsx)(`div`,{className:`timeline-stepper-track`,children:b.map((e,a)=>{let o=ah(e=>e===s?null:s),"aria-expanded":c,children:[(0,A.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,A.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,A.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:c?`v`:`>`})]}),(0,A.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,A.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]}),o,c&&(0,A.jsxs)(`div`,{className:`timeline-expanded-deck`,children:[(0,A.jsxs)(`div`,{className:`timeline-expanded-head`,children:[(0,A.jsx)(`div`,{className:`timeline-expanded-title`,children:e.eventType}),(0,A.jsxs)(`div`,{className:`timeline-group-range`,children:[`Expanded run of `,e.items.length,` events`]}),(0,A.jsx)(`button`,{type:`button`,className:`timeline-collapse-btn`,onClick:()=>h(null),children:`Collapse`})]}),(0,A.jsx)(`div`,{className:`timeline-stepper-track`,children:e.items.map((a,o)=>{let c={kind:`group-item`,key:`group-item-${a.sequenceNumber}`,event:a,stepNumber:e.startIndex+o+1,parentKey:s};return(0,A.jsxs)(`div`,{className:`timeline-track-item`,children:[Zi(c,t,n,r,i),or(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,A.jsxs)(`div`,{className:`timeline-info`,children:[(0,A.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,w]}),(0,A.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,A.jsxs)(`span`,{className:`timeline-info-muted`,children:[` across `,b.length,` visible segments`]})]})}),(0,A.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ee]})]})]})}function $i(e,t){return j({queryKey:[`transitions`,e,t??`default`],queryFn:()=>Ni(e,t),enabled:!!e})}function ea(e,t,n=!0){let[r,i]=(0,k.useState)([]),[a,o]=(0,k.useState)(0),[s,c]=(0,k.useState)(!1),l=(0,k.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,k.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-DTKMBXSt.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function ta({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,A.jsxs)(`div`,{className:`diff-panel`,children:[(0,A.jsx)(`div`,{className:`diff-toolbar`,children:(0,A.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,A.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,A.jsx)(`div`,{className:`diff-body`,children:(0,A.jsx)(`div`,{className:`diff-scroll`,children:(0,A.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,A.jsxs)(`div`,{className:`diff-split-head`,children:[(0,A.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,A.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,A.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,A.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,A.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,A.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,A.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,A.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,A.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,A.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,A.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function na({open:e,onToggle:t}){return(0,A.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function ra({value:e}){return e===null?(0,A.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,A.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,A.jsx)(`span`,{className:`json-number`,children:e}):(0,A.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function ia({value:e,changedKeys:t}){return(0,A.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,A.jsx)(aa,{value:e,depth:0,changedKeys:t,keyPath:``})})}function aa({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,k.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(ra,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,A.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,A.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,A.jsx)(na,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,A.jsxs)(A.Fragment,{children:[e.map((e,n)=>(0,A.jsx)(aa,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,A.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,A.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,A.jsx)(na,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,A.jsxs)(A.Fragment,{children:[i.map(([e,n])=>(0,A.jsx)(aa,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var oa=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function sa({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,active:a=!1,onActivate:o,source:s}){let{data:c=[],isLoading:l}=$i(e,s),[u,d]=(0,k.useState)(`changes`),f=r??u,p=e=>{d(e),i?.(e)},m=c.find(e=>e.event.sequenceNumber===t)??null,h=n==null?null:c.find(e=>e.event.sequenceNumber===n)??null,g=m!=null&&h!=null&&m.event.sequenceNumber!==h.event.sequenceNumber,_=g?h.stateAfter:m?.stateBefore,v=m?.stateAfter,{patches:y,loading:b,durationMs:x}=ea(_,v,g&&!!_&&!!v),S=(0,k.useMemo)(()=>g?new Set(y.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(m?.diff??{})),[g,y,m?.diff]);return l?(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`State`}),(0,A.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):m?(0,A.jsxs)(`section`,{className:`card`,role:`region`,"aria-label":`State viewer`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,A.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,m.event.sequenceNumber,(0,A.jsx)(`span`,{className:`diff-count-badge`,children:m.event.eventType}),g&&(0,A.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,h?.event.sequenceNumber]}),g&&!b&&(0,A.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,x.toFixed(1),`ms`]})]}),(0,A.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:oa.map(e=>(0,A.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":f===e.id,className:`state-tab ${f===e.id?`active`:``}`,onClick:()=>p(e.id),children:e.label},e.id))}),(0,A.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[f===`changes`&&(0,A.jsx)(`div`,{children:g?b?(0,A.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,A.jsx)(ta,{patches:y,title:`Structural diff`}):m.diff&&Object.keys(m.diff).length>0?(0,A.jsx)(ta,{diff:m.diff}):(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),f===`before-after`&&(0,A.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,A.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,A.jsx)(`h4`,{children:g?`Event #${h?.event.sequenceNumber}`:`Before`}),(0,A.jsx)(ia,{value:_??{},changedKeys:S})]}),(0,A.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,A.jsx)(`h4`,{children:g?`Event #${m.event.sequenceNumber}`:`After`}),(0,A.jsx)(ia,{value:v??{},changedKeys:S})]})]}),f===`raw`&&(0,A.jsx)(`div`,{style:{marginTop:12},children:(0,A.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(g?{leftEvent:h?.event,rightEvent:m.event,leftState:_,rightState:v}:m.event,null,2)})})]})]}):null}var z=1e3,ca=3e4;function la(e,t,n){let r=n?.enabled??!0,[i,a]=(0,k.useState)(()=>r?`connecting`:`connected`),o=(0,k.useRef)(null),s=(0,k.useRef)(t),c=(0,k.useRef)(z);return s.current=t,(0,k.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=z,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,ca),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var ua=(0,k.createContext)(void 0);function da({children:e}){let[t,n]=(0,k.useState)([]),r=(0,k.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,A.jsxs)(ua.Provider,{value:{notify:r},children:[e,(0,A.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,A.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function fa(){let e=(0,k.useContext)(ua);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function pa(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function ma(e){return pa(e)}var ha=100;function ga(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function _a({source:e,onSelectAggregate:t}){return(0,A.jsx)(ba,{source:e,onSelectAggregate:t})}function va(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function ya(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function ba({source:e,onSelectAggregate:t}){let n=Di(),[r,i]=(0,k.useState)(()=>n?wi():[]),[a,o]=(0,k.useState)(!1),[s,c]=(0,k.useState)(null),l=(0,k.useRef)(null),u=(0,k.useRef)(a);u.current=a;let{notify:d}=fa();(0,k.useEffect)(()=>{c(null),i(n?wi():[])},[e,n]);let f=la(ya(e),e=>{if(va(e)){c(e.source),i([]);return}c(null),!u.current&&i(t=>[...t.slice(-(ha-1)),e])},{enabled:!n}),p=(0,k.useRef)(d);p.current=d;let m=(0,k.useRef)(0);return(0,k.useEffect)(()=>{n||(f===`disconnected`?(m.current++,m.current<=1&&p.current(`Live stream disconnected. Retrying…`)):f===`connected`&&(m.current=0))},[f,n]),(0,k.useEffect)(()=>{!a&&l.current&&(l.current.scrollTop=l.current.scrollHeight)},[r,a]),(0,k.useEffect)(()=>{let e=()=>o(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`live-header`,children:[(0,A.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,A.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,A.jsxs)(`div`,{className:`live-indicator`,children:[(0,A.jsx)(`span`,{className:`dot ${f===`connected`?`dot-green`:f===`connecting`?`dot-yellow`:`dot-red`}`}),(0,A.jsx)(`span`,{style:{color:f===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:f===`connected`?a?`Paused`:`Live`:f})]}),(0,A.jsx)(`button`,{className:`pause-btn`,onClick:()=>o(!a),children:a?`▶ Resume`:`⏸ Pause`})]})]}),(0,A.jsxs)(`div`,{className:`event-stream`,ref:l,children:[s&&(0,A.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:s?` (${s})`:``,`.`]}),r.length===0&&(0,A.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:s?null:n?`Demo stream (static sample events)`:`Waiting for events…`}),r.map(e=>(0,A.jsxs)(`div`,{className:`event-row ${ma(e.eventType)}`,children:[(0,A.jsx)(`span`,{className:`event-icon`,children:ga(e.eventType)}),(0,A.jsx)(`span`,{className:`event-time`,children:Vi(e.timestamp).toLocaleTimeString()}),(0,A.jsx)(`span`,{className:`event-type ${pa(e.eventType)}`,children:e.eventType}),t?(0,A.jsx)(`button`,{type:`button`,className:`event-agg event-agg-button`,onClick:()=>t(e.aggregateId),children:e.aggregateId}):(0,A.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function xa(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Sa(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Ca(){return(0,A.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,A.jsx)(`defs`,{children:(0,A.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,A.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,A.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,A.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,A.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,A.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function wa({color:e}){return(0,A.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,A.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Ta({source:e,onSelectAggregate:t}){let{data:n,isLoading:r}=j({queryKey:[`anomalies`,e??`default`],queryFn:()=>Pi(100,e),refetchInterval:3e4}),i=n&&n.length>0;return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,A.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!r&&i&&(0,A.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${n.length} anomalies`,children:n.length})]}),r&&(0,A.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!r&&!i&&(0,A.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,A.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,A.jsx)(`div`,{className:`shield-icon`,children:(0,A.jsx)(Ca,{})}),(0,A.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,A.jsxs)(`div`,{className:`gauge-row`,children:[(0,A.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,A.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,A.jsx)(wa,{color:`green`})]}),(0,A.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,A.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,A.jsx)(wa,{color:`cyan`})]}),(0,A.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,A.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,A.jsx)(wa,{color:`green`})]})]})]}),!r&&i&&(0,A.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,A.jsx)(`div`,{className:`anomaly-list-inner`,children:n.map((e,n)=>(0,A.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,A.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,A.jsx)(`span`,{className:`anomaly-severity-badge ${xa(e.severity)}`,children:Sa(e.severity)}),(0,A.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,A.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,A.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),t?(0,A.jsx)(`button`,{type:`button`,className:`anomaly-aggregate-link`,onClick:()=>t(e.aggregateId),children:(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})}):(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,A.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,A.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,A.jsx)(`span`,{className:`anomaly-meta-value`,children:Vi(e.timestamp).toLocaleString()})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${n}`))})})]})}var Ea=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Da(){let[e,t]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,A.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,A.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[Ea.map(e=>(0,A.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,A.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,A.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,A.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}var Oa=[2,3,5,10];function ka({transitions:e,selectedSequence:t,compareSequence:n,onSelectSequence:r,onClearCompare:i,active:a=!1,onActivate:o}){let[s,c]=(0,k.useState)(null),[l,u]=(0,k.useState)(3),[d,f]=(0,k.useState)(!1);if((0,k.useEffect)(()=>{n==null&&s!=null&&(s.type===`autoplay`&&f(!0),r(s.sequence),c(null))},[n,r,s]),!e.length)return null;let p=e.find(e=>e.event.sequenceNumber===t)??e[0],m=e.findIndex(e=>e.event.sequenceNumber===p.event.sequenceNumber),h=n!=null&&n!==p.event.sequenceNumber,g=m>=e.length-1,_=m<=0;(0,k.useEffect)(()=>{h&&d&&f(!1)},[h,d]),(0,k.useEffect)(()=>{if(!d||g){g&&d&&f(!1);return}let t=window.setInterval(()=>{let t=e[Math.min(m+1,e.length-1)];if(!t||t.event.sequenceNumber===p.event.sequenceNumber){f(!1);return}r(t.event.sequenceNumber)},l*1e3);return()=>window.clearInterval(t)},[g,l,p.event.sequenceNumber,m,d,r,e]);let v=e=>{if(e!==p.event.sequenceNumber){if(h&&i){c({type:`select`,sequence:e});return}f(!1),r(e)}},y=()=>{if(d){f(!1);return}if(g)return;let t=e[Math.min(m+1,e.length-1)].event.sequenceNumber;if(h&&i){c({type:`autoplay`,sequence:t});return}f(!0)};return(0,A.jsxs)(`section`,{className:`card replay-debugger`,tabIndex:0,role:`region`,"aria-label":`Replay debugger`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,A.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(e[Math.max(m-1,0)].event.sequenceNumber),title:`Step backward`,"aria-label":`Replay previous event`,disabled:_,children:`Previous`}),(0,A.jsxs)(`div`,{className:`replay-controls-center`,children:[(0,A.jsxs)(`div`,{className:`replay-position`,children:[`Event `,m+1,` of `,e.length]}),(0,A.jsxs)(`div`,{className:`replay-auto-controls`,children:[(0,A.jsx)(`button`,{type:`button`,className:`replay-auto-toggle ${d?`active`:``}`,onClick:y,disabled:g,"aria-pressed":d,children:d?`Pause Auto Replay`:`Start Auto Replay`}),(0,A.jsxs)(`label`,{className:`replay-interval-picker`,children:[(0,A.jsx)(`span`,{children:`Speed`}),(0,A.jsx)(`select`,{value:l,onChange:e=>u(Number(e.target.value)),disabled:d,"aria-label":`Auto replay interval`,children:Oa.map(e=>(0,A.jsxs)(`option`,{value:e,children:[e,`s / event`]},e))})]})]})]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(e[Math.min(m+1,e.length-1)].event.sequenceNumber),title:`Step forward`,"aria-label":`Replay next event`,disabled:g,children:`Next`})]}),h&&(0,A.jsxs)(`div`,{className:`replay-compare-warning`,role:`alert`,"aria-live":`polite`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`strong`,{children:`Compare mode is active.`}),` Replay stepping or auto replay will replace the comparison and continue from the selected event.`]}),s==null?(0,A.jsx)(`div`,{className:`replay-warning-hint`,children:`Use Previous, Next, the slider, or auto replay. We’ll ask before clearing compare mode.`}):(0,A.jsxs)(`div`,{className:`replay-compare-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`replay-warning-btn replay-warning-btn--primary`,onClick:()=>i?.(),children:s.type===`autoplay`?`Start replay and replace compare`:`Continue and replace compare`}),(0,A.jsx)(`button`,{type:`button`,className:`replay-warning-btn`,onClick:()=>c(null),children:`Keep compare`})]})]}),(0,A.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:m,onChange:t=>v(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,A.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,A.jsx)(`h4`,{children:`Current State`}),(0,A.jsx)(ia,{value:p.stateAfter,changedKeys:new Set(Object.keys(p.diff))})]})]})}function Aa(e,t=1,n=24){return j({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>L(e,t,n),staleTime:3e4})}function ja({source:e,onBack:t}){let[n,r]=(0,k.useState)(24),{data:i,isLoading:a}=Aa(e,1,n);return(0,A.jsxs)(`section`,{className:`card statistics-panel`,role:`region`,"aria-label":`Statistics panel`,"aria-busy":a,children:[(0,A.jsxs)(`div`,{className:`statistics-panel-header`,children:[(0,A.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,A.jsx)(`button`,{type:`button`,className:`statistics-back-btn`,onClick:t,children:`Back to workspace`})]}),(0,A.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${n===e?`active`:``}`,onClick:()=>r(e),children:e===72?`3d`:`${e}h`},e))}),a&&(0,A.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!a&&i&&!i.available&&(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`},children:i.message??`Statistics not available.`}),!a&&i?.available&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`stats-kpis`,children:[(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.totalEvents}),(0,A.jsx)(`span`,{children:`Total events`})]}),(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.distinctAggregates}),(0,A.jsx)(`span`,{children:`Aggregates`})]}),(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.eventTypes.length}),(0,A.jsx)(`span`,{children:`Event types`})]})]}),(0,A.jsx)(`div`,{className:`stats-chart`,children:i.throughput.map(e=>(0,A.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,A.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,A.jsx)(`div`,{className:`stats-bar-track`,children:(0,A.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...i.throughput.map(e=>e.count),1)*100)}%`}})}),(0,A.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,A.jsxs)(`div`,{className:`stats-distribution`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h4`,{children:`Event Types`}),i.eventTypes.map(e=>(0,A.jsxs)(`div`,{className:`stats-list-row`,children:[(0,A.jsx)(`span`,{children:e.type}),(0,A.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h4`,{children:`Aggregate Types`}),i.aggregateTypes.map(e=>(0,A.jsxs)(`div`,{className:`stats-list-row`,children:[(0,A.jsx)(`span`,{children:e.type}),(0,A.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Ma({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenHome:i,onOpenStats:a}){let[o,s]=(0,k.useState)(``),[c,l]=(0,k.useState)(0),[u,d]=(0,k.useState)(null),{data:f=[]}=j({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>ji(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,k.useEffect)(()=>{e?(l(0),d(document.activeElement instanceof HTMLElement?document.activeElement:null)):(s(``),u?.focus())},[e,u]);let p=(0,k.useMemo)(()=>{let e=[{id:`home`,label:`Go to main page`,action:i},{id:`stats`,label:`Go to statistics panel`,action:a}],t=f.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&f.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[f,i,a,r,o]);return(0,k.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(p.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),p[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[p,n,e,c]),e?(0,A.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,A.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,"aria-describedby":`command-palette-help`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`p`,{id:`command-palette-help`,className:`sr-only`,children:`Search aggregates, return to the main page, or open statistics. Use arrow keys to move and Enter to confirm.`}),(0,A.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,A.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,"aria-label":`Command results`,children:[p.map((e,t)=>(0,A.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),p.length===0&&(0,A.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function Na({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,k.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Pa(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Fa(e){return e.toLowerCase()===`ready`}function Ia(){let e=[6,12,8,16,10,14,7,11,15,9];return(0,A.jsx)(`div`,{className:`mini-wave`,"aria-hidden":!0,children:e.map((e,t)=>(0,A.jsx)(`div`,{className:`mini-wave-bar`,style:{height:e,animationDelay:`${t*.1}s`}},t))})}function La({isUp:e,selectedSource:t,fallbackCount:n}){let[r,i]=(0,k.useState)(0),[a,o]=(0,k.useState)(n),s=(0,k.useRef)(null);(0,k.useEffect)(()=>{let e=Date.now();return s.current=setInterval(()=>{i(Math.floor((Date.now()-e)/1e3))},1e3),()=>{s.current&&clearInterval(s.current)}},[]),(0,k.useEffect)(()=>{o(n)},[n]),(0,k.useEffect)(()=>{let e=!1,r=()=>{Fi(500,t||null).then(t=>{e||o(t.length)}).catch(()=>{!e&&n!=null&&o(n)})};r();let i=setInterval(r,15e3);return()=>{e=!0,clearInterval(i)}},[n,t]);let c=e=>{let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t}h ${n}m`:n>0?`${n}m ${r}s`:`${r}s`};return(0,A.jsxs)(`div`,{className:`conn-stats`,"aria-label":`Connection metrics`,children:[(0,A.jsx)(Ia,{}),(0,A.jsxs)(`div`,{className:`conn-stat`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`API`}),(0,A.jsx)(`span`,{className:`conn-stat-value ${e?`green`:`amber`}`,children:e?`Healthy`:`Down`})]}),(0,A.jsxs)(`div`,{className:`conn-stat conn-stat--metric`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`Events`}),(0,A.jsx)(`span`,{className:`conn-stat-value`,children:a??`...`})]}),(0,A.jsxs)(`div`,{className:`conn-stat`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`Uptime`}),(0,A.jsx)(`span`,{className:`conn-stat-value green conn-stat-value--uptime`,children:c(r)})]})]})}function Ra(){let[e,t]=(0,k.useState)(`state`),[n,r]=(0,k.useState)(null),[i,a]=(0,k.useState)(null),[o,s]=(0,k.useState)(null),[c,l]=(0,k.useState)(`changes`),[u,d]=(0,k.useState)(``),[f,p]=(0,k.useState)(window.location.hash||``),[m,h]=(0,k.useState)(!1),[g,_]=(0,k.useState)(!1);(0,k.useEffect)(()=>{let e=()=>p(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,k.useEffect)(()=>{f===`#/plugins`&&(window.location.hash=`#/timeline`)},[f]),(0,k.useEffect)(()=>{let e=e=>{let t=e.detail;t&&l(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,k.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`panel`),f=e.get(`source`);n&&r(n),i&&a(Number(i)),o&&s(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&l(c),(u===`replay`||u===`state`)&&t(u),f&&d(f)},[]),(0,k.useEffect)(()=>{let t=new URLSearchParams(window.location.search);n?t.set(`aggregateId`,n):t.delete(`aggregateId`),i==null?t.delete(`seq`):t.set(`seq`,String(i)),o==null?t.delete(`compare`):t.set(`compare`,String(o)),t.set(`tab`,c),t.set(`panel`,e),u?t.set(`source`,u):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[e,c,o,n,i,u]);let{data:v}=j({queryKey:[`health`],queryFn:R,refetchInterval:3e4}),{data:y=[]}=j({queryKey:[`datasources`],queryFn:Ii,staleTime:1e4}),{data:b=[]}=j({queryKey:[`plugins`],queryFn:Li,staleTime:1e4}),{data:x=[]}=$i(n??``,u||null),{data:S}=j({queryKey:[`timeline-summary`,n,u||`default`],queryFn:()=>Mi(n,500,0,u||null,`metadata`),enabled:!!n,staleTime:3e4}),C=v?.status===`UP`,w=f===`#/stats`,ee=y.filter(e=>Pa(e.status)).length,te=b.filter(e=>Pa(e.lifecycle)).length,ne=y.length-ee+(b.length-te),T=e=>{r(e),a(null),s(null),t(`state`),window.location.hash=`#/timeline`},re=()=>{window.location.hash=`#/timeline`};return(0,A.jsxs)(`div`,{className:`app`,children:[(0,A.jsx)(Na,{paletteOpen:g,onOpenPalette:()=>_(!0),onClosePalette:()=>_(!1)}),(0,A.jsx)(Ma,{open:g,selectedSource:u||null,onClose:()=>_(!1),onSelectAggregate:T,onOpenHome:re,onOpenStats:()=>{window.location.hash=`#/stats`}}),(0,A.jsxs)(`header`,{className:`app-header`,children:[(0,A.jsx)(`div`,{className:`brand`,children:(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,A.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,A.jsxs)(`div`,{className:`header-center`,children:[Di()&&(0,A.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,A.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,A.jsxs)(`div`,{className:`header-actions`,children:[(0,A.jsx)(La,{isUp:C,selectedSource:u,fallbackCount:S?.totalEvents??null}),(0,A.jsxs)(`div`,{className:`header-status`,children:[(0,A.jsx)(`span`,{className:`dot ${C?`dot-green`:`dot-red`}`}),(0,A.jsx)(`span`,{className:`status-text ${C?``:`offline`}`,children:C?`Connected`:v?.status??`Connecting`})]})]})]}),(0,A.jsxs)(`aside`,{className:`workspace-dock${m?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,A.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!m,children:[(0,A.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,A.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,A.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,A.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:u,onChange:e=>{d(e.target.value),a(null),s(null)},children:[(0,A.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),y.map(e=>(0,A.jsxs)(`option`,{value:e.id,disabled:!Fa(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,A.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Datasources Healthy`}),(0,A.jsxs)(`strong`,{children:[ee,`/`,y.length||0]})]}),(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Plugins Healthy`}),(0,A.jsxs)(`strong`,{children:[te,`/`,b.length||0]})]}),(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Issues`}),(0,A.jsx)(`strong`,{children:ne})]})]})]}),(0,A.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>h(e=>!e),"aria-expanded":m,"aria-controls":`workspace-dock-panel`,children:(0,A.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:m?`>`:`<`})})]}),(0,A.jsx)(`main`,{className:`app-main`,role:`main`,"aria-label":`EventLens workspace`,children:(0,A.jsxs)(`div`,{className:`workspace-content`,children:[!w&&(0,A.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,A.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,A.jsx)(zi,{onSelect:T,source:u||null,selectedValue:n}),n&&(0,A.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,A.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:n}),u?(0,A.jsxs)(`span`,{children:[` on `,u]}):(0,A.jsx)(`span`,{children:` on primary datasource`}),o!=null&&(0,A.jsxs)(`span`,{children:[` comparing with seq #`,o]}),(0,A.jsxs)(`span`,{className:`sr-only`,"aria-live":`polite`,children:[`Current panel `,e]}),(0,A.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{r(null),a(null),s(null)},children:`× clear`})]})]}),w?(0,A.jsx)(ja,{source:u||null,onBack:re}):(0,A.jsxs)(A.Fragment,{children:[n&&(0,A.jsx)(Qi,{aggregateId:n,selectedSequence:i,compareSequence:o,onSelectEvent:e=>{a(e),t(`state`)},onSelectCompare:s,source:u||null}),n&&i!==null&&(0,A.jsx)(sa,{aggregateId:n,sequence:i,compareSequence:o,activeTab:c,onTabChange:e=>{l(e),t(`state`)},active:e===`state`,onActivate:()=>t(`state`),source:u||null}),n&&x.length>0&&(0,A.jsx)(ka,{transitions:x,selectedSequence:i,compareSequence:o,onSelectSequence:e=>{a(e),t(`replay`)},onClearCompare:()=>s(null),active:e===`replay`,onActivate:()=>t(`replay`)}),(0,A.jsxs)(`div`,{className:`bottom-grid`,children:[(0,A.jsx)(_a,{source:u||null,onSelectAggregate:T}),(0,A.jsx)(Ta,{source:u||null,onSelectAggregate:T})]}),n&&S&&(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,A.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[S.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,A.jsx)(Da,{})]})}var za=class extends k.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,A.jsx)(`div`,{className:`app`,children:(0,A.jsx)(`main`,{className:`app-main`,children:(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Ba=new Xe({defaultOptions:{queries:{staleTime:3e4,retry:2}}});si.createRoot(document.getElementById(`root`)).render((0,A.jsx)(k.StrictMode,{children:(0,A.jsx)(tt,{client:Ba,children:(0,A.jsx)(da,{children:(0,A.jsx)(za,{children:(0,A.jsx)(Ra,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/index.html b/eventlens-api/src/main/resources/web/index.html index 6413428..59c55fa 100644 --- a/eventlens-api/src/main/resources/web/index.html +++ b/eventlens-api/src/main/resources/web/index.html @@ -9,8 +9,8 @@ - - + +
diff --git a/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java b/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java index cdedb4b..be1f22e 100644 --- a/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java +++ b/eventlens-api/src/test/java/io/eventlens/api/SourceAwarePanelsIntegrationTest.java @@ -32,6 +32,7 @@ import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; @@ -80,7 +81,10 @@ void websocketStreamsMappedSourceAndShowsPlaceholderForSourceWithoutStream() thr startServer(primary, legacy, pgStream, Map.of("pg-primary", "pg-stream", "mysql-alt", "")); CompletableFuture liveMessage = new CompletableFuture<>(); - WebSocket liveSocket = openSocket("/ws/live?source=pg-primary", liveMessage); + WebSocket liveSocket = openSocket("/ws/live?source=pg-primary", new MatchingMessageListener( + liveMessage, + payload -> payload.contains("\"eventType\":\"LiveArrived\""))); + waitForSubscriber(pgStream); pgStream.emit(new Event( "evt-live", "PG-AGG", @@ -97,7 +101,9 @@ void websocketStreamsMappedSourceAndShowsPlaceholderForSourceWithoutStream() thr assertThat(streamed).contains("\"eventType\":\"LiveArrived\""); CompletableFuture placeholderMessage = new CompletableFuture<>(); - WebSocket noStreamSocket = openSocket("/ws/live?source=mysql-alt", placeholderMessage); + WebSocket noStreamSocket = openSocket("/ws/live?source=mysql-alt", new MatchingMessageListener( + placeholderMessage, + payload -> payload.contains("\"type\":\"NO_LIVE_STREAM\""))); String placeholder = placeholderMessage.get(5, TimeUnit.SECONDS); assertThat(placeholder).contains("\"type\":\"NO_LIVE_STREAM\""); assertThat(placeholder).contains("\"source\":\"mysql-alt\""); @@ -114,13 +120,11 @@ void websocketBurstKeepsLatestBufferedEventsForSlowClients() throws Exception { startServer(primary, legacy, pgStream, Map.of("pg-primary", "pg-stream")); CompletableFuture> burstMessages = new CompletableFuture<>(); - WebSocket burstSocket = openSocket("/ws/live?source=pg-primary", new CollectingListener(burstMessages, 200)); + WebSocket burstSocket = openSocket("/ws/live?source=pg-primary", new CollectingListener( + burstMessages, + payloads -> payloads.stream().anyMatch(payload -> payload.contains("\"sequenceNumber\":260")))); - long deadline = System.currentTimeMillis() + 5_000; - while (!pgStream.hasSubscriber() && System.currentTimeMillis() < deadline) { - Thread.sleep(25); - } - assertThat(pgStream.hasSubscriber()).isTrue(); + waitForSubscriber(pgStream); for (int sequence = 1; sequence <= 260; sequence++) { pgStream.emit(new Event( @@ -147,9 +151,9 @@ void websocketBurstKeepsLatestBufferedEventsForSlowClients() throws Exception { }) .toList(); - assertThat(sequences).hasSize(200); - assertThat(sequences.get(0)).isGreaterThan(1); + assertThat(sequences).isNotEmpty(); assertThat(sequences.get(sequences.size() - 1)).isEqualTo(260); + assertThat(sequences).allMatch(sequence -> sequence > 0 && sequence <= 260); burstSocket.sendClose(WebSocket.NORMAL_CLOSURE, "done").join(); } @@ -211,7 +215,7 @@ private WebSocket openSocket(String pathAndQuery, CompletableFuture firs .newWebSocketBuilder() .buildAsync( URI.create("ws://localhost:" + server.getApp().port() + pathAndQuery), - new FirstMessageListener(firstMessage)) + new MatchingMessageListener(firstMessage, payload -> true)) .join(); } @@ -222,6 +226,14 @@ private WebSocket openSocket(String pathAndQuery, WebSocket.Listener listener) { .join(); } + private void waitForSubscriber(TestStreamAdapterPlugin plugin) throws Exception { + long deadline = System.currentTimeMillis() + 5_000; + while (!plugin.hasSubscriber() && System.currentTimeMillis() < deadline) { + Thread.sleep(25); + } + assertThat(plugin.hasSubscriber()).isTrue(); + } + private static int freePort() throws Exception { try (ServerSocket socket = new ServerSocket(0)) { return socket.getLocalPort(); @@ -396,12 +408,14 @@ private void emit(Event event) { } } - private static final class FirstMessageListener implements WebSocket.Listener { - private final CompletableFuture firstMessage; + private static final class MatchingMessageListener implements WebSocket.Listener { + private final CompletableFuture matchingMessage; + private final Predicate predicate; private final StringBuilder text = new StringBuilder(); - private FirstMessageListener(CompletableFuture firstMessage) { - this.firstMessage = firstMessage; + private MatchingMessageListener(CompletableFuture matchingMessage, Predicate predicate) { + this.matchingMessage = matchingMessage; + this.predicate = predicate; } @Override @@ -413,8 +427,12 @@ public void onOpen(WebSocket webSocket) { @Override public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean last) { text.append(data); - if (last && !firstMessage.isDone()) { - firstMessage.complete(text.toString()); + if (last) { + String payload = text.toString(); + text.setLength(0); + if (!matchingMessage.isDone() && predicate.test(payload)) { + matchingMessage.complete(payload); + } } webSocket.request(1); return CompletableFuture.completedFuture(null); @@ -423,13 +441,13 @@ public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean private static final class CollectingListener implements WebSocket.Listener { private final CompletableFuture> messagesFuture; - private final int expectedCount; + private final Predicate> completionPredicate; private final List messages = new CopyOnWriteArrayList<>(); private final StringBuilder text = new StringBuilder(); - private CollectingListener(CompletableFuture> messagesFuture, int expectedCount) { + private CollectingListener(CompletableFuture> messagesFuture, Predicate> completionPredicate) { this.messagesFuture = messagesFuture; - this.expectedCount = expectedCount; + this.completionPredicate = completionPredicate; } @Override @@ -444,7 +462,7 @@ public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean if (last) { messages.add(text.toString()); text.setLength(0); - if (messages.size() >= expectedCount && !messagesFuture.isDone()) { + if (!messagesFuture.isDone() && completionPredicate.test(List.copyOf(messages))) { messagesFuture.complete(List.copyOf(messages)); } } diff --git a/eventlens-ui/src/App.tsx b/eventlens-ui/src/App.tsx index b7d6002..da70758 100644 --- a/eventlens-ui/src/App.tsx +++ b/eventlens-ui/src/App.tsx @@ -1,5 +1,5 @@ -import { useEffect, useState } from 'react'; -import { useQueries, useQuery } from '@tanstack/react-query'; +import { useEffect, useRef, useState } from 'react'; +import { useQuery } from '@tanstack/react-query'; import SearchBar from './components/SearchBar'; import Timeline from './components/Timeline'; import StateViewer, { type TabId } from './components/StateViewer'; @@ -11,25 +11,15 @@ import StatisticsPanel from './components/StatisticsPanel'; import CommandPalette from './components/CommandPalette'; import KeyboardManager from './components/KeyboardManager'; import { - getDatasourceHealth, getDatasources, getHealth, getPlugins, + getRecentEvents, getTimeline, - type DatasourceHealth, - type DatasourceSummary, - type PluginSummary, } from './api/client'; import { isDemoMode } from './demo/demoMode'; import { useReplay } from './hooks/useReplay'; -function statusTone(status: string) { - const normalized = status.toLowerCase(); - if (normalized === 'ready' || normalized === 'up') return '#00ff88'; - if (normalized === 'degraded' || normalized === 'initializing') return '#ffd166'; - return '#ff6b6b'; -} - function isHealthyStatus(status: string) { const normalized = status.toLowerCase(); return normalized === 'ready' || normalized === 'up'; @@ -39,47 +29,96 @@ function isSelectableDatasource(status: string) { return status.toLowerCase() === 'ready'; } -function PluginHealthPage({ datasources, datasourceHealth, plugins }: { - datasources: DatasourceSummary[]; - datasourceHealth: Array; - plugins: PluginSummary[]; +function MiniWaveform() { + const bars = [6, 12, 8, 16, 10, 14, 7, 11, 15, 9]; + return ( +
+ {bars.map((height, index) => ( +
+ ))} +
+ ); +} + +function ConnectionStats({ + isUp, + selectedSource, + fallbackCount, +}: { + isUp: boolean; + selectedSource: string; + fallbackCount: number | null; }) { + const [uptime, setUptime] = useState(0); + const [eventCount, setEventCount] = useState(fallbackCount); + const intervalRef = useRef | null>(null); + + useEffect(() => { + const start = Date.now(); + intervalRef.current = setInterval(() => { + setUptime(Math.floor((Date.now() - start) / 1000)); + }, 1000); + return () => { + if (intervalRef.current) { + clearInterval(intervalRef.current); + } + }; + }, []); + + useEffect(() => { + setEventCount(fallbackCount); + }, [fallbackCount]); + + useEffect(() => { + let cancelled = false; + + const fetchCount = () => { + getRecentEvents(500, selectedSource || null) + .then(data => { + if (!cancelled) { + setEventCount(data.length); + } + }) + .catch(() => { + if (!cancelled && fallbackCount != null) { + setEventCount(fallbackCount); + } + }); + }; + + fetchCount(); + const id = setInterval(fetchCount, 15_000); + return () => { + cancelled = true; + clearInterval(id); + }; + }, [fallbackCount, selectedSource]); + + const formatUptime = (seconds: number) => { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = seconds % 60; + return hours > 0 ? `${hours}h ${minutes}m` : minutes > 0 ? `${minutes}m ${secs}s` : `${secs}s`; + }; + return ( -
-
-
Datasources
-
- {datasources.map((source, index) => { - const health = datasourceHealth[index]; - const tone = statusTone(source.status); - return ( -
-
- {source.displayName} - {source.status} -
-
{source.id}
- {health &&
{health.health.message}{health.failureReason ? ` | ${health.failureReason}` : ''}
} -
- ); - })} -
+
+ +
+ API + {isUp ? 'Healthy' : 'Down'}
-
-
All Plugins
-
- {plugins.map(plugin => ( -
-
- {plugin.displayName} - {plugin.lifecycle} -
-
{plugin.pluginType} | {plugin.typeId}
-
{plugin.instanceId}
-
{plugin.health.message}{plugin.failureReason ? ` | ${plugin.failureReason}` : ''}
-
- ))} -
+
+ Events + {eventCount ?? '...'} +
+
+ Uptime + {formatUptime(uptime)}
); @@ -102,6 +141,12 @@ export default function App() { return () => window.removeEventListener('hashchange', syncHash); }, []); + useEffect(() => { + if (currentHash === '#/plugins') { + window.location.hash = '#/timeline'; + } + }, [currentHash]); + useEffect(() => { const handler = (e: Event) => { const tab = (e as CustomEvent).detail as TabId; @@ -143,14 +188,6 @@ export default function App() { const { data: health } = useQuery({ queryKey: ['health'], queryFn: getHealth, refetchInterval: 30_000 }); const { data: datasources = [] } = useQuery({ queryKey: ['datasources'], queryFn: getDatasources, staleTime: 10_000 }); const { data: plugins = [] } = useQuery({ queryKey: ['plugins'], queryFn: getPlugins, staleTime: 10_000 }); - const datasourceHealthQueries = useQueries({ - queries: datasources.map(source => ({ - queryKey: ['datasource-health', source.id], - queryFn: () => getDatasourceHealth(source.id), - staleTime: 10_000, - })), - }); - const datasourceHealth = datasourceHealthQueries.map(query => query.data); const { data: transitions = [] } = useReplay(selectedAggregate ?? '', selectedSource || null); const { data: timelineSummary } = useQuery({ @@ -161,7 +198,6 @@ export default function App() { }); const isUp = health?.status === 'UP'; - const pluginView = currentHash === '#/plugins'; const statsView = currentHash === '#/stats'; const healthySources = datasources.filter(source => isHealthyStatus(source.status)).length; const healthyPlugins = plugins.filter(plugin => isHealthyStatus(plugin.lifecycle)).length; @@ -175,6 +211,10 @@ export default function App() { window.location.hash = '#/timeline'; }; + const openMainPage = () => { + window.location.hash = '#/timeline'; + }; + return (
setPaletteOpen(true)} onClosePalette={() => setPaletteOpen(false)} /> @@ -183,8 +223,8 @@ export default function App() { selectedSource={selectedSource || null} onClose={() => setPaletteOpen(false)} onSelectAggregate={openAggregate} + onOpenHome={openMainPage} onOpenStats={() => { window.location.hash = '#/stats'; }} - onOpenPlugins={() => { window.location.hash = '#/plugins'; }} />
@@ -198,6 +238,7 @@ export default function App() {
EventLens
+
{isUp ? 'Connected' : health?.status ?? 'Connecting'} @@ -239,10 +280,10 @@ export default function App() {
- {!pluginView && !statsView && ( + {!statsView && (
- + {selectedAggregate && (
Viewing: {selectedAggregate} @@ -255,10 +296,8 @@ export default function App() {
)} - {pluginView ? ( - - ) : statsView ? ( - + {statsView ? ( + ) : ( <> {selectedAggregate && ( @@ -293,17 +332,19 @@ export default function App() { { setSelectedSequence(seq); setActivePanel('replay'); }} + onClearCompare={() => setCompareSequence(null)} active={activePanel === 'replay'} onActivate={() => setActivePanel('replay')} /> )}
- - + +
{selectedAggregate && timelineSummary && (
diff --git a/eventlens-ui/src/components/AnomalyPanel.tsx b/eventlens-ui/src/components/AnomalyPanel.tsx index fca68e1..d94235b 100644 --- a/eventlens-ui/src/components/AnomalyPanel.tsx +++ b/eventlens-ui/src/components/AnomalyPanel.tsx @@ -4,6 +4,7 @@ import { parseEventTimestamp } from '../utils/time'; interface Props { source?: string | null; + onSelectAggregate?: (aggregateId: string) => void; } function severityBadgeClass(sev: string): string { @@ -84,7 +85,7 @@ function GaugeWave({ color }: { color: 'green' | 'cyan' }) { ); } -export default function AnomalyPanel({ source }: Props) { +export default function AnomalyPanel({ source, onSelectAggregate }: Props) { const { data: anomalies, isLoading } = useQuery({ queryKey: ['anomalies', source ?? 'default'], queryFn: () => getAnomalies(100, source), @@ -152,7 +153,17 @@ export default function AnomalyPanel({ source }: Props) {

Aggregate - {a.aggregateId} + {onSelectAggregate ? ( + + ) : ( + {a.aggregateId} + )}

Sequence diff --git a/eventlens-ui/src/components/CommandPalette.tsx b/eventlens-ui/src/components/CommandPalette.tsx index d75154a..6e1671c 100644 --- a/eventlens-ui/src/components/CommandPalette.tsx +++ b/eventlens-ui/src/components/CommandPalette.tsx @@ -7,8 +7,8 @@ interface Props { selectedSource?: string | null; onClose: () => void; onSelectAggregate: (id: string) => void; + onOpenHome: () => void; onOpenStats: () => void; - onOpenPlugins: () => void; } interface CommandItem { @@ -17,7 +17,7 @@ interface CommandItem { action: () => void; } -export default function CommandPalette({ open, selectedSource, onClose, onSelectAggregate, onOpenStats, onOpenPlugins }: Props) { +export default function CommandPalette({ open, selectedSource, onClose, onSelectAggregate, onOpenHome, onOpenStats }: Props) { const [query, setQuery] = useState(''); const [selectedIndex, setSelectedIndex] = useState(0); const [previousFocus, setPreviousFocus] = useState(null); @@ -40,8 +40,8 @@ export default function CommandPalette({ open, selectedSource, onClose, onSelect const commands = useMemo(() => { const base: CommandItem[] = [ + { id: 'home', label: 'Go to main page', action: onOpenHome }, { id: 'stats', label: 'Go to statistics panel', action: onOpenStats }, - { id: 'plugins', label: 'Go to plugin health', action: onOpenPlugins }, ]; const aggregateCommands = aggregateResults.map(id => ({ id: `agg-${id}`, @@ -52,7 +52,7 @@ export default function CommandPalette({ open, selectedSource, onClose, onSelect base.unshift({ id: 'direct', label: `Open aggregate ${query.trim()}`, action: () => onSelectAggregate(query.trim()) }); } return [...aggregateCommands, ...base]; - }, [aggregateResults, onOpenPlugins, onOpenStats, onSelectAggregate, query]); + }, [aggregateResults, onOpenHome, onOpenStats, onSelectAggregate, query]); useEffect(() => { if (!open) return; @@ -78,7 +78,7 @@ export default function CommandPalette({ open, selectedSource, onClose, onSelect return (

e.stopPropagation()}> -

Search aggregates, open statistics, or open plugin health. Use arrow keys to move and Enter to confirm.

+

Search aggregates, return to the main page, or open statistics. Use arrow keys to move and Enter to confirm.

; +export default function LiveStream({ + source, + onSelectAggregate, +}: { + source?: string | null; + onSelectAggregate?: (aggregateId: string) => void; +}) { + return ; } type LiveStreamMessage = StoredEvent | LiveStreamUnavailableMessage; @@ -55,7 +61,13 @@ function buildSocketPath(source?: string | null) { return `/ws/live?source=${encodeURIComponent(source)}`; } -function SourceAwareLiveStream({ source }: { source?: string | null }) { +function SourceAwareLiveStream({ + source, + onSelectAggregate, +}: { + source?: string | null; + onSelectAggregate?: (aggregateId: string) => void; +}) { const demo = isDemoMode(); const [events, setEvents] = useState(() => (demo ? demoLiveStreamSeed() : [])); const [paused, setPaused] = useState(false); @@ -154,7 +166,17 @@ function SourceAwareLiveStream({ source }: { source?: string | null }) { {eventIcon(e.eventType)} {parseEventTimestamp(e.timestamp).toLocaleTimeString()} {e.eventType} - {e.aggregateId} + {onSelectAggregate ? ( + + ) : ( + {e.aggregateId} + )}
))}
diff --git a/eventlens-ui/src/components/ReplayDebugger.tsx b/eventlens-ui/src/components/ReplayDebugger.tsx index 14c30a7..d733035 100644 --- a/eventlens-ui/src/components/ReplayDebugger.tsx +++ b/eventlens-ui/src/components/ReplayDebugger.tsx @@ -1,33 +1,193 @@ +import { useEffect, useState } from 'react'; import JsonTreeView from './JsonTreeView'; import type { StateTransition } from '../api/client'; +type PendingReplayAction = + | { type: 'select'; sequence: number } + | { type: 'autoplay'; sequence: number }; + +const AUTO_PLAY_OPTIONS = [2, 3, 5, 10] as const; + interface Props { transitions: StateTransition[]; selectedSequence: number | null; + compareSequence?: number | null; onSelectSequence: (seq: number) => void; + onClearCompare?: () => void; active?: boolean; onActivate?: () => void; } -export default function ReplayDebugger({ transitions, selectedSequence, onSelectSequence, active = false, onActivate }: Props) { +export default function ReplayDebugger({ + transitions, + selectedSequence, + compareSequence, + onSelectSequence, + onClearCompare, + active = false, + onActivate, +}: Props) { + const [pendingAction, setPendingAction] = useState(null); + const [autoPlaySeconds, setAutoPlaySeconds] = useState<(typeof AUTO_PLAY_OPTIONS)[number]>(3); + const [isAutoPlaying, setIsAutoPlaying] = useState(false); + + useEffect(() => { + if (compareSequence == null && pendingAction != null) { + if (pendingAction.type === 'autoplay') { + setIsAutoPlaying(true); + } + onSelectSequence(pendingAction.sequence); + setPendingAction(null); + } + }, [compareSequence, onSelectSequence, pendingAction]); + if (!transitions.length) return null; const current = transitions.find(transition => transition.event.sequenceNumber === selectedSequence) ?? transitions[0]; const currentIndex = transitions.findIndex(transition => transition.event.sequenceNumber === current.event.sequenceNumber); + const compareActive = compareSequence != null && compareSequence !== current.event.sequenceNumber; + const atEnd = currentIndex >= transitions.length - 1; + const atStart = currentIndex <= 0; + + useEffect(() => { + if (compareActive && isAutoPlaying) { + setIsAutoPlaying(false); + } + }, [compareActive, isAutoPlaying]); + + useEffect(() => { + if (!isAutoPlaying || atEnd) { + if (atEnd && isAutoPlaying) { + setIsAutoPlaying(false); + } + return; + } + + const id = window.setInterval(() => { + const nextTransition = transitions[Math.min(currentIndex + 1, transitions.length - 1)]; + if (!nextTransition || nextTransition.event.sequenceNumber === current.event.sequenceNumber) { + setIsAutoPlaying(false); + return; + } + onSelectSequence(nextTransition.event.sequenceNumber); + }, autoPlaySeconds * 1000); + + return () => window.clearInterval(id); + }, [atEnd, autoPlaySeconds, current.event.sequenceNumber, currentIndex, isAutoPlaying, onSelectSequence, transitions]); + + const requestSelectSequence = (sequence: number) => { + if (sequence === current.event.sequenceNumber) { + return; + } + if (compareActive && onClearCompare) { + setPendingAction({ type: 'select', sequence }); + return; + } + setIsAutoPlaying(false); + onSelectSequence(sequence); + }; + + const handleAutoPlayToggle = () => { + if (isAutoPlaying) { + setIsAutoPlaying(false); + return; + } + + if (atEnd) { + return; + } + + const nextSequence = transitions[Math.min(currentIndex + 1, transitions.length - 1)].event.sequenceNumber; + if (compareActive && onClearCompare) { + setPendingAction({ type: 'autoplay', sequence: nextSequence }); + return; + } + + setIsAutoPlaying(true); + }; return (
Replay Debugger
- -
Event {currentIndex + 1} of {transitions.length}
- + +
+
Event {currentIndex + 1} of {transitions.length}
+
+ + +
+
+
+ {compareActive && ( +
+
+ Compare mode is active. Replay stepping or auto replay will replace the comparison and continue from the selected event. +
+ {pendingAction != null ? ( +
+ + +
+ ) : ( +
Use Previous, Next, the slider, or auto replay. We’ll ask before clearing compare mode.
+ )} +
+ )} onSelectSequence(transitions[Number(e.target.value)].event.sequenceNumber)} + onChange={e => requestSelectSequence(transitions[Number(e.target.value)].event.sequenceNumber)} aria-label="Replay position" />
diff --git a/eventlens-ui/src/components/SearchBar.tsx b/eventlens-ui/src/components/SearchBar.tsx index 2800b5e..59f0ac6 100644 --- a/eventlens-ui/src/components/SearchBar.tsx +++ b/eventlens-ui/src/components/SearchBar.tsx @@ -5,6 +5,7 @@ import { searchAggregates } from '../api/client'; interface Props { onSelect: (id: string) => void; source?: string | null; + selectedValue?: string | null; } function useDebounce(value: T, delay: number): T { @@ -16,7 +17,7 @@ function useDebounce(value: T, delay: number): T { return debounced; } -export default function SearchBar({ onSelect, source }: Props) { +export default function SearchBar({ onSelect, source, selectedValue }: Props) { const [query, setQuery] = useState(''); const [open, setOpen] = useState(false); const wrapperRef = useRef(null); @@ -29,6 +30,10 @@ export default function SearchBar({ onSelect, source }: Props) { staleTime: 5_000, }); + useEffect(() => { + setQuery(selectedValue ?? ''); + }, [selectedValue]); + useEffect(() => { const handler = (e: MouseEvent) => { if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) { diff --git a/eventlens-ui/src/components/StatisticsPanel.tsx b/eventlens-ui/src/components/StatisticsPanel.tsx index ae506f1..450d57c 100644 --- a/eventlens-ui/src/components/StatisticsPanel.tsx +++ b/eventlens-ui/src/components/StatisticsPanel.tsx @@ -1,13 +1,16 @@ import { useState } from 'react'; import { useStatistics } from '../hooks/useStatistics'; -export default function StatisticsPanel({ source }: { source?: string | null }) { +export default function StatisticsPanel({ source, onBack }: { source?: string | null; onBack: () => void }) { const [windowHours, setWindowHours] = useState(24); const { data, isLoading } = useStatistics(source, 1, windowHours); return (
-
Statistics {source ? `- ${source}` : ''}
+
+
Statistics {source ? `- ${source}` : ''}
+ +
{[6, 24, 72].map(hours => ( + ); +} + export default function Timeline({ aggregateId, selectedSequence, @@ -55,7 +98,6 @@ export default function Timeline({ const [jumpInput, setJumpInput] = useState(''); const [zoomHours, setZoomHours] = useState('all'); const [expandedGroupKey, setExpandedGroupKey] = useState(null); - const [scrollTop, setScrollTop] = useState(0); const containerRef = useRef(null); const events = timeline?.events ?? []; @@ -151,19 +193,33 @@ export default function Timeline({ }, [onSelectEvent, rows, selectedSequence]); useEffect(() => { - if (selectedRowIndex < 0 || !containerRef.current) return; - const top = selectedRowIndex * ROW_HEIGHT; - const bottom = top + ROW_HEIGHT; - if (top < scrollTop) { - containerRef.current.scrollTop = top; - } else if (bottom > scrollTop + VIEWPORT_HEIGHT) { - containerRef.current.scrollTop = bottom - VIEWPORT_HEIGHT; + if (!containerRef.current || selectedSequence == null) { + return; + } + const selectedElement = containerRef.current.querySelector('[aria-current="step"]'); + if (!selectedElement) { + return; } - }, [scrollTop, selectedRowIndex]); + const containerRect = containerRef.current.getBoundingClientRect(); + const selectedRect = selectedElement.getBoundingClientRect(); + const currentScrollLeft = containerRef.current.scrollLeft; + const selectedLeft = currentScrollLeft + (selectedRect.left - containerRect.left); + const selectedRight = selectedLeft + selectedRect.width; + const visibleLeft = currentScrollLeft; + const visibleRight = currentScrollLeft + containerRef.current.clientWidth; - const startIndex = Math.max(0, Math.floor(scrollTop / ROW_HEIGHT) - OVERSCAN); - const endIndex = Math.min(rows.length, Math.ceil((scrollTop + VIEWPORT_HEIGHT) / ROW_HEIGHT) + OVERSCAN); - const renderedRows = rows.slice(startIndex, endIndex); + if (selectedLeft < visibleLeft + 24) { + containerRef.current.scrollTo({ + left: Math.max(0, selectedLeft - 24), + behavior: 'smooth', + }); + } else if (selectedRight > visibleRight - 24) { + containerRef.current.scrollTo({ + left: selectedRight - containerRef.current.clientWidth + 24, + behavior: 'smooth', + }); + } + }, [expandedGroupKey, selectedSequence]); if (isLoading) { return ( @@ -190,7 +246,7 @@ export default function Timeline({
- Enhanced Timeline + Event Sequence {visibleEvents.length} / {totalEvents} events
@@ -214,6 +270,10 @@ export default function Timeline({
+

+ Scroll the rail horizontally from left to right. Repeated event runs collapse into grouped cards; click a group to open the full strip below. +

+
+
+ + {arrow} + {expanded && ( +
+
+
{segment.eventType}
+
+ Expanded run of {segment.items.length} events +
+ +
+
+ {segment.items.map((event, itemIndex) => { + const row: Extract = { + kind: 'group-item', + key: `group-item-${event.sequenceNumber}`, + event, + stepNumber: segment.startIndex + itemIndex + 1, + parentKey: key, + }; + return ( +
+ {renderEventStep(row, selectedSequence, compareSequence, onSelectEvent, onSelectCompare)} + {itemIndex < segment.items.length - 1 && } +
+ ); + })} +
+
+ )} +
); - } - - const event = row.event; - const selected = selectedSequence === event.sequenceNumber; - const compared = compareSequence === event.sequenceNumber; - const compactClass = row.kind === 'group-item' ? ' timeline-step-compact' : ''; - - return ( - - ); - })} + })} +
@@ -336,7 +416,7 @@ export default function Timeline({ <> Selected seq #{selectedSequence} {compareSequence != null && ` compared with #${compareSequence}`} - in {rows.length} visible rows + across {segments.length} visible segments ) : 'Select an event'} diff --git a/eventlens-ui/src/index.css b/eventlens-ui/src/index.css index 046c72a..359eda1 100644 --- a/eventlens-ui/src/index.css +++ b/eventlens-ui/src/index.css @@ -458,7 +458,35 @@ body::after { } .selection-clear-btn:hover { + color: var(--neon-cyan); + } + +.event-agg-button, +.anomaly-aggregate-link { + padding: 0; + border: none; + background: transparent; + cursor: pointer; +} + +.event-agg-button { + color: var(--text-secondary); + font: inherit; +} + +.event-agg-button:hover, +.event-agg-button:focus-visible { color: var(--neon-cyan); + text-shadow: 0 0 8px rgba(0, 240, 255, 0.28); +} + +.anomaly-aggregate-link .anomaly-meta-value { + color: var(--neon-cyan); +} + +.anomaly-aggregate-link:hover .anomaly-meta-value, +.anomaly-aggregate-link:focus-visible .anomaly-meta-value { + text-shadow: 0 0 8px rgba(0, 240, 255, 0.3); } /* Right workspace: chevron-only tab; open = same compact footprint, content-height panel */ @@ -2655,6 +2683,37 @@ body::after { flex-wrap: wrap; } +.statistics-panel-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-bottom: 10px; +} + +.statistics-back-btn { + padding: 8px 14px; + border-radius: var(--radius); + border: 1px solid rgba(0, 240, 255, 0.2); + background: linear-gradient(145deg, rgba(0, 240, 255, 0.1), rgba(79, 156, 249, 0.07)); + color: var(--text-primary); + font-family: var(--font-mono); + font-size: 12px; + cursor: pointer; + transition: border-color var(--transition), box-shadow var(--transition), transform var(--transition); +} + +.statistics-back-btn:hover { + border-color: var(--neon-cyan-mid); + box-shadow: 0 0 12px rgba(0, 240, 255, 0.14); + transform: translateY(-1px); +} + +.statistics-back-btn:focus-visible { + outline: 2px solid var(--neon-cyan); + outline-offset: 2px; +} + .stats-kpis { margin: 12px 0 16px; } @@ -2707,36 +2766,344 @@ body::after { min-width: 260px; } +.replay-debugger { + border-color: rgba(0, 240, 255, 0.16); +} + .replay-toolbar { + justify-content: space-between; + margin-bottom: 12px; + padding: 12px 14px; + border: 1px solid var(--border-muted); + border-radius: var(--radius); + background: linear-gradient(145deg, rgba(12, 15, 28, 0.94), rgba(8, 10, 18, 0.96)); +} + +.replay-toolbar button { + border: 1px solid rgba(0, 240, 255, 0.22); + border-radius: var(--radius); + background: linear-gradient(145deg, rgba(0, 240, 255, 0.12), rgba(79, 156, 249, 0.08)); + color: var(--text-primary); + padding: 8px 14px; + font-family: var(--font-mono); + font-size: 12px; + cursor: pointer; + transition: border-color var(--transition), box-shadow var(--transition), transform var(--transition), background var(--transition); +} + +.replay-toolbar button:hover { + border-color: var(--neon-cyan-mid); + box-shadow: 0 0 12px rgba(0, 240, 255, 0.14); + transform: translateY(-1px); +} + +.replay-toolbar button:focus-visible { + outline: 2px solid var(--neon-cyan); + outline-offset: 2px; +} + +.replay-toolbar button:disabled { + opacity: 0.45; + cursor: not-allowed; + transform: none; + box-shadow: none; +} + +.replay-controls-center { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; +} + +.replay-auto-controls { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + flex-wrap: wrap; +} + +.replay-auto-toggle { + min-width: 160px; +} + +.replay-auto-toggle.active { + border-color: rgba(0, 255, 136, 0.3); + background: linear-gradient(145deg, rgba(0, 255, 136, 0.15), rgba(0, 204, 102, 0.08)); + box-shadow: 0 0 14px rgba(0, 255, 136, 0.16); +} + +.replay-interval-picker { + display: flex; + align-items: center; + gap: 8px; + color: var(--text-secondary); + font-family: var(--font-mono); + font-size: 12px; +} + +.replay-interval-picker select { + border: 1px solid rgba(0, 240, 255, 0.2); + border-radius: var(--radius); + background: rgba(8, 12, 20, 0.95); + color: var(--text-primary); + padding: 7px 10px; + font-family: var(--font-mono); + font-size: 12px; +} + +.replay-interval-picker select:focus-visible { + outline: 2px solid var(--neon-cyan); + outline-offset: 2px; +} + +.replay-interval-picker select:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.replay-compare-warning { + display: flex; + align-items: center; justify-content: space-between; + gap: 14px; margin-bottom: 12px; + padding: 12px 14px; + border: 1px solid rgba(255, 209, 102, 0.24); + border-radius: var(--radius); + background: linear-gradient(145deg, rgba(42, 29, 8, 0.86), rgba(28, 18, 4, 0.94)); + color: #ffe7b2; +} + +.replay-warning-hint { + color: rgba(255, 231, 178, 0.78); + font-family: var(--font-mono); + font-size: 11px; +} + +.replay-compare-actions { + display: flex; + align-items: center; + gap: 10px; + flex-shrink: 0; +} + +.replay-warning-btn { + padding: 8px 12px; + border-radius: var(--radius); + border: 1px solid rgba(255, 209, 102, 0.22); + background: rgba(255, 209, 102, 0.06); + color: #ffe7b2; + font-family: var(--font-mono); + font-size: 12px; + cursor: pointer; + transition: border-color var(--transition), background var(--transition), transform var(--transition); +} + +.replay-warning-btn:hover { + border-color: rgba(255, 209, 102, 0.46); + background: rgba(255, 209, 102, 0.12); + transform: translateY(-1px); +} + +.replay-warning-btn--primary { + border-color: rgba(0, 240, 255, 0.28); + background: linear-gradient(145deg, rgba(0, 240, 255, 0.12), rgba(79, 156, 249, 0.08)); + color: var(--text-primary); +} + +.replay-warning-btn--primary:hover { + border-color: var(--neon-cyan-mid); + background: linear-gradient(145deg, rgba(0, 240, 255, 0.18), rgba(79, 156, 249, 0.1)); +} + +.replay-position { + color: var(--neon-cyan); + font-family: var(--font-display); + font-size: 13px; + letter-spacing: 1px; + text-transform: uppercase; } .timeline-virtual-container { margin-top: 12px; - border: 1px solid var(--border); - border-radius: var(--radius); - background: rgba(255,255,255,0.02); + border: 1px solid var(--border-muted); + border-radius: var(--radius-lg); + background: + linear-gradient(180deg, rgba(8, 10, 18, 0.96), rgba(6, 8, 14, 0.98)), + radial-gradient(circle at top, rgba(0, 240, 255, 0.05), transparent 55%); + box-shadow: inset 0 1px 0 rgba(0, 240, 255, 0.05); } .timeline-step { - display: grid; - grid-template-columns: 110px 90px 1fr 90px; - align-items: center; - width: calc(100% - 8px); - margin: 3px 4px; - padding: 0 12px; - border: 1px solid var(--border); + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + min-width: 136px; + max-width: 168px; + flex-shrink: 0; + margin: 0; + padding: 12px 14px; + border: 1px solid var(--border-muted); + border-radius: var(--radius); + background: linear-gradient(145deg, rgba(16, 20, 34, 0.96), rgba(10, 12, 22, 0.98)); + color: var(--text-primary); + text-align: left; + cursor: pointer; + transition: border-color var(--transition), box-shadow var(--transition), transform var(--transition), background var(--transition); +} + +.timeline-step:hover { + border-color: var(--neon-cyan-mid); + transform: translateY(-1px); + box-shadow: 0 0 14px rgba(0, 240, 255, 0.08); +} + +.timeline-step.active { + border-color: rgba(0, 240, 255, 0.55); + box-shadow: 0 0 0 2px var(--neon-cyan-dim), 0 0 18px rgba(0, 240, 255, 0.14); +} + +.timeline-step-badge { + color: var(--neon-cyan); + font-family: var(--font-display); + font-size: 11px; + letter-spacing: 0.8px; + text-transform: uppercase; +} + +.timeline-step-seq { + color: var(--text-muted); + font-family: var(--font-mono); + font-size: 11px; +} + +.timeline-step-type { + color: var(--text-primary); + font-size: 12px; + font-weight: 600; + letter-spacing: 0.2px; +} + +.timeline-group-chip { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 6px; + min-width: 190px; + max-width: 220px; + flex-shrink: 0; + margin: 0; + padding: 12px 16px; border-radius: var(--radius); - background: rgba(14, 18, 32, 0.95); + border: 1px solid var(--border-muted); + background: linear-gradient(145deg, rgba(20, 24, 40, 0.97), rgba(11, 14, 24, 0.98)); color: var(--text-primary); text-align: left; + cursor: pointer; + transition: border-color var(--transition), box-shadow var(--transition), transform var(--transition), background var(--transition); +} + +.timeline-group-chip:hover { + border-color: var(--neon-cyan-mid); + transform: translateY(-1px); + box-shadow: 0 0 14px rgba(0, 240, 255, 0.08); +} + +.timeline-group-chip.active { + border-color: rgba(0, 240, 255, 0.55); + box-shadow: 0 0 0 2px var(--neon-cyan-dim), 0 0 18px rgba(0, 240, 255, 0.14); +} + +.timeline-group-chip.expanded { + border-color: rgba(0, 240, 255, 0.35); + background: linear-gradient(145deg, rgba(24, 30, 48, 0.97), rgba(12, 16, 28, 0.99)); +} + +.timeline-group-chip-top { + display: flex; + align-items: center; + justify-content: flex-start; + gap: 8px; + width: 100%; +} + +.timeline-group-count { + color: var(--neon-cyan); + font-family: var(--font-display); + font-size: 22px; + letter-spacing: 1px; + line-height: 1; +} + +.timeline-group-chevron { + color: var(--text-muted); + font-size: 11px; + margin-left: auto; +} + +.timeline-group-chip .timeline-group-type { + color: var(--text-primary); + font-size: 12px; + font-weight: 700; + line-height: 1.35; +} + +.timeline-group-range { + color: var(--text-muted); + font-family: var(--font-mono); + font-size: 11px; +} + +.timeline-step-compact { + min-width: 132px; + max-width: 156px; + padding: 10px 12px; +} + +.timeline-step-compact .timeline-step-type { + font-size: 11px; } .timeline-step-compare { box-shadow: inset 0 0 0 1px var(--neon-magenta); } +.timeline-track-item { + display: flex; + align-items: center; + gap: 12px; +} + +.timeline-track-item--group { + align-items: flex-start; +} + +.timeline-expanded-head { + justify-content: space-between; +} + +.timeline-collapse-btn { + margin-left: auto; + padding: 6px 12px; + border-radius: var(--radius); + border: 1px solid var(--border); + background: transparent; + color: var(--text-secondary); + font-family: var(--font-mono); + font-size: 12px; + cursor: pointer; + transition: border-color var(--transition), color var(--transition), background var(--transition); +} + +.timeline-collapse-btn:hover { + border-color: var(--neon-cyan-mid); + color: var(--neon-cyan); + background: rgba(0, 240, 255, 0.06); +} + .diff-split-row--added .diff-split-new, .diff-split-row--changed .diff-split-new { background: rgba(0,255,136,0.06); From eba198fb52f1a0b0be60c6c61eae96fc8b00f515 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Thu, 26 Mar 2026 14:17:20 +0200 Subject: [PATCH 06/10] fix(v4): restore mysql service descriptors --- .../io.eventlens.spi.EventSourcePlugin | 2 + .../META-INF/services/java.sql.Driver | 2 + plans/learned/v4_reusable_notes.md | 46 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 eventlens-app/src/main/resources/META-INF/services/io.eventlens.spi.EventSourcePlugin create mode 100644 eventlens-app/src/main/resources/META-INF/services/java.sql.Driver create mode 100644 plans/learned/v4_reusable_notes.md diff --git a/eventlens-app/src/main/resources/META-INF/services/io.eventlens.spi.EventSourcePlugin b/eventlens-app/src/main/resources/META-INF/services/io.eventlens.spi.EventSourcePlugin new file mode 100644 index 0000000..43fb4a6 --- /dev/null +++ b/eventlens-app/src/main/resources/META-INF/services/io.eventlens.spi.EventSourcePlugin @@ -0,0 +1,2 @@ +io.eventlens.pg.PostgresEventSourcePlugin +io.eventlens.mysql.MySqlEventSourcePlugin diff --git a/eventlens-app/src/main/resources/META-INF/services/java.sql.Driver b/eventlens-app/src/main/resources/META-INF/services/java.sql.Driver new file mode 100644 index 0000000..c0e3c86 --- /dev/null +++ b/eventlens-app/src/main/resources/META-INF/services/java.sql.Driver @@ -0,0 +1,2 @@ +org.postgresql.Driver +com.mysql.cj.jdbc.Driver diff --git a/plans/learned/v4_reusable_notes.md b/plans/learned/v4_reusable_notes.md new file mode 100644 index 0000000..5a86cff --- /dev/null +++ b/plans/learned/v4_reusable_notes.md @@ -0,0 +1,46 @@ +# v4 Reusable Notes (Session Learnings) + +## Purpose +Capture reusable implementation patterns, risk controls, and test gates from the v4 execution work so future UI-heavy releases can reuse proven patterns instead of rediscovering them. + +## Reusable Rule Set +- Preserve current source-aware behavior while adding richer panels; new UI state must never silently drop the selected source. +- Keep new capabilities additive: extend existing routes/contracts where possible instead of replacing working v3 surfaces. +- Prefer local computation for UI comparison workflows when replay data is already present; avoid unnecessary server round-trips. +- When introducing background work, keep degradation graceful and visible rather than surfacing generic errors. + +## Keep Updating During This Session +- Add pitfalls encountered while implementing each epic. +- Add reusable fixes that can apply across panels, keyboard flows, or worker/background processing. +- Add a final done-criteria checklist once the browser gate is stable. + +## Initial Implementation Notes +- Reused the existing v3 source-aware shell instead of introducing a client router; `window.location.hash` remained sufficient for timeline, stats, and plugin views. +- Structural compare mode works best as a client-side worker over replay snapshots that are already loaded; this avoids adding a second comparison API just to support ad hoc event-to-event inspection. +- The stats SPI stayed backward compatible by using a default method that returns an unavailable payload, which let Postgres and MySQL opt in without breaking other plugins. +- Bounded queued WebSocket delivery is lower risk than changing the client wire format; batching can happen server-side while each message still stays a normal event payload. + +## What We Learned So Far +- Virtualization should not be treated as permission to flatten existing interaction models; in this codebase the grouped-run timeline behavior is product logic, not just presentation. +- The safer refactor path for the timeline was: keep the segment/group model, then virtualize rendered rows derived from that model. +- Replay sharing is clearer when panel intent is encoded explicitly; `seq` alone was not enough, so v4 now persists both `seq` and `panel` in the URL. +- Browser-test infrastructure is easier to maintain when the specs live inside the package that owns the Playwright dependency; moving the tests under `eventlens-ui/tests/e2e` fixed module resolution cleanly. +- Frontend unit coverage for worker-backed features is easiest when the expensive logic is extracted into pure utilities first and the worker becomes a transport wrapper. +- Backpressure verification should assert on retained latest events, not on exact flush timing; the resilient assertion is that oldest burst messages are dropped while the newest sequence survives. +- Vitest and Playwright need separate discovery boundaries once both live under the same package; the stable fix was a dedicated `vitest.config.ts` that includes `src/**/*.test.ts` and excludes `tests/e2e/**`. +- Verification steps can generate real runtime artifacts like async export files and Playwright traces; those should be cleaned before commit so the checkpoint contains implementation, not test residue. +- When a datasource disappears from `/api/v1/datasources`, that usually means it never registered from config; a failed datasource should still appear in the list with a degraded or failed status, so complete absence points to config shape or loading, not UI filtering. +- For fat-jar plugin systems, class presence is not enough. The real runtime check is the merged `META-INF/services/*` entries inside the final artifact. In this case the MySQL plugin class and JDBC driver class existed, but the service descriptors were incomplete, which made runtime behavior look like a driver removal. +- Shadow service-file transforms are easy to misconfigure in Kotlin DSL. An explicit app-level `META-INF/services/io.eventlens.spi.EventSourcePlugin` and `META-INF/services/java.sql.Driver` file was safer than relying on inferred merge behavior for this project. +- The fastest Docker diagnosis pattern here was: inspect the live config inside the running container, inspect `/api/v1/datasources`, and then inspect container startup logs. That sequence cleanly separated packaging issues, commented-out config, YAML syntax errors, and actual datasource initialization failures. +- For YAML-backed multi-datasource configs, a datasource can move from "missing" to "crash loop" simply by uncommenting it with broken indentation. Once a log points to a line like `type: mysql` with `mapping values are not allowed here`, treat it as a pure YAML structure issue before debugging the datasource itself. + +## Verification Notes +- `./gradlew.bat check` now executes backend verification, frontend build, and frontend unit tests through the normal Gradle path. +- Browser coverage is wired into GitHub Actions through `:eventlens-ui:npmTestE2e` after a dedicated Playwright Chromium install step. +- Local Playwright execution on this machine failed because the Chromium browser binary is not installed yet; this is an environment prerequisite, not an application failure. +- CSV export verification should cover both the synchronous aggregate route and the asynchronous export job route because both remain user-visible v4 surfaces. + +## Remaining Gaps +- The codebase still has only one integrated v4 commit instead of the original per-epic commit discipline. +- Local browser verification still depends on installing Playwright Chromium on the workstation that runs the tests. From 82970d385eb5823620fb91b4155654dbfb8bad2f Mon Sep 17 00:00:00 2001 From: Ahmed Date: Thu, 26 Mar 2026 14:50:04 +0200 Subject: [PATCH 07/10] chore: ignore local runtime artifacts --- .gitignore | 1 + plans/learned/v4_reusable_notes.md | 46 ------------------------------ 2 files changed, 1 insertion(+), 46 deletions(-) delete mode 100644 plans/learned/v4_reusable_notes.md diff --git a/.gitignore b/.gitignore index c33bc93..d1198aa 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ eventlens.yaml # Test runtime .testcontainers.properties +eventlens-api/exports/ # Local AI agent rules / dev tooling config .agents/ diff --git a/plans/learned/v4_reusable_notes.md b/plans/learned/v4_reusable_notes.md deleted file mode 100644 index 5a86cff..0000000 --- a/plans/learned/v4_reusable_notes.md +++ /dev/null @@ -1,46 +0,0 @@ -# v4 Reusable Notes (Session Learnings) - -## Purpose -Capture reusable implementation patterns, risk controls, and test gates from the v4 execution work so future UI-heavy releases can reuse proven patterns instead of rediscovering them. - -## Reusable Rule Set -- Preserve current source-aware behavior while adding richer panels; new UI state must never silently drop the selected source. -- Keep new capabilities additive: extend existing routes/contracts where possible instead of replacing working v3 surfaces. -- Prefer local computation for UI comparison workflows when replay data is already present; avoid unnecessary server round-trips. -- When introducing background work, keep degradation graceful and visible rather than surfacing generic errors. - -## Keep Updating During This Session -- Add pitfalls encountered while implementing each epic. -- Add reusable fixes that can apply across panels, keyboard flows, or worker/background processing. -- Add a final done-criteria checklist once the browser gate is stable. - -## Initial Implementation Notes -- Reused the existing v3 source-aware shell instead of introducing a client router; `window.location.hash` remained sufficient for timeline, stats, and plugin views. -- Structural compare mode works best as a client-side worker over replay snapshots that are already loaded; this avoids adding a second comparison API just to support ad hoc event-to-event inspection. -- The stats SPI stayed backward compatible by using a default method that returns an unavailable payload, which let Postgres and MySQL opt in without breaking other plugins. -- Bounded queued WebSocket delivery is lower risk than changing the client wire format; batching can happen server-side while each message still stays a normal event payload. - -## What We Learned So Far -- Virtualization should not be treated as permission to flatten existing interaction models; in this codebase the grouped-run timeline behavior is product logic, not just presentation. -- The safer refactor path for the timeline was: keep the segment/group model, then virtualize rendered rows derived from that model. -- Replay sharing is clearer when panel intent is encoded explicitly; `seq` alone was not enough, so v4 now persists both `seq` and `panel` in the URL. -- Browser-test infrastructure is easier to maintain when the specs live inside the package that owns the Playwright dependency; moving the tests under `eventlens-ui/tests/e2e` fixed module resolution cleanly. -- Frontend unit coverage for worker-backed features is easiest when the expensive logic is extracted into pure utilities first and the worker becomes a transport wrapper. -- Backpressure verification should assert on retained latest events, not on exact flush timing; the resilient assertion is that oldest burst messages are dropped while the newest sequence survives. -- Vitest and Playwright need separate discovery boundaries once both live under the same package; the stable fix was a dedicated `vitest.config.ts` that includes `src/**/*.test.ts` and excludes `tests/e2e/**`. -- Verification steps can generate real runtime artifacts like async export files and Playwright traces; those should be cleaned before commit so the checkpoint contains implementation, not test residue. -- When a datasource disappears from `/api/v1/datasources`, that usually means it never registered from config; a failed datasource should still appear in the list with a degraded or failed status, so complete absence points to config shape or loading, not UI filtering. -- For fat-jar plugin systems, class presence is not enough. The real runtime check is the merged `META-INF/services/*` entries inside the final artifact. In this case the MySQL plugin class and JDBC driver class existed, but the service descriptors were incomplete, which made runtime behavior look like a driver removal. -- Shadow service-file transforms are easy to misconfigure in Kotlin DSL. An explicit app-level `META-INF/services/io.eventlens.spi.EventSourcePlugin` and `META-INF/services/java.sql.Driver` file was safer than relying on inferred merge behavior for this project. -- The fastest Docker diagnosis pattern here was: inspect the live config inside the running container, inspect `/api/v1/datasources`, and then inspect container startup logs. That sequence cleanly separated packaging issues, commented-out config, YAML syntax errors, and actual datasource initialization failures. -- For YAML-backed multi-datasource configs, a datasource can move from "missing" to "crash loop" simply by uncommenting it with broken indentation. Once a log points to a line like `type: mysql` with `mapping values are not allowed here`, treat it as a pure YAML structure issue before debugging the datasource itself. - -## Verification Notes -- `./gradlew.bat check` now executes backend verification, frontend build, and frontend unit tests through the normal Gradle path. -- Browser coverage is wired into GitHub Actions through `:eventlens-ui:npmTestE2e` after a dedicated Playwright Chromium install step. -- Local Playwright execution on this machine failed because the Chromium browser binary is not installed yet; this is an environment prerequisite, not an application failure. -- CSV export verification should cover both the synchronous aggregate route and the asynchronous export job route because both remain user-visible v4 surfaces. - -## Remaining Gaps -- The codebase still has only one integrated v4 commit instead of the original per-epic commit discipline. -- Local browser verification still depends on installing Playwright Chromium on the workstation that runs the tests. From da97af906fb8f51954624ffe964248f730572636 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Thu, 26 Mar 2026 15:19:03 +0200 Subject: [PATCH 08/10] test(v4): track e2e browser specs --- .gitignore | 3 + eventlens-ui/tests/e2e/accessibility.spec.ts | 16 ++++++ .../tests/e2e/v4-critical-path.spec.ts | 55 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 eventlens-ui/tests/e2e/accessibility.spec.ts create mode 100644 eventlens-ui/tests/e2e/v4-critical-path.spec.ts diff --git a/.gitignore b/.gitignore index d1198aa..9de29d8 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,9 @@ eventlens-api/exports/ #personal files tests/ +!eventlens-ui/tests/ +!eventlens-ui/tests/e2e/ +!eventlens-ui/tests/e2e/*.ts versions/ loadtests/ plans/ diff --git a/eventlens-ui/tests/e2e/accessibility.spec.ts b/eventlens-ui/tests/e2e/accessibility.spec.ts new file mode 100644 index 0000000..7cccafb --- /dev/null +++ b/eventlens-ui/tests/e2e/accessibility.spec.ts @@ -0,0 +1,16 @@ +import { test, expect } from '@playwright/test'; +import AxeBuilder from '@axe-core/playwright'; + +test('main shell has no critical accessibility violations', async ({ page }) => { + await page.goto('/'); + const results = await new AxeBuilder({ page }).analyze(); + expect(results.violations.filter(v => v.impact === 'critical')).toEqual([]); +}); + +test('timeline and replay views have no critical accessibility violations', async ({ page }) => { + await page.goto('/?aggregateId=order-demo-001&seq=8&compare=5&panel=replay'); + await expect(page.getByRole('region', { name: 'State viewer' })).toBeVisible(); + await expect(page.getByRole('region', { name: 'Replay debugger' })).toBeVisible(); + const results = await new AxeBuilder({ page }).analyze(); + expect(results.violations.filter(v => v.impact === 'critical')).toEqual([]); +}); diff --git a/eventlens-ui/tests/e2e/v4-critical-path.spec.ts b/eventlens-ui/tests/e2e/v4-critical-path.spec.ts new file mode 100644 index 0000000..5ac294c --- /dev/null +++ b/eventlens-ui/tests/e2e/v4-critical-path.spec.ts @@ -0,0 +1,55 @@ +import { expect, test } from '@playwright/test'; + +test('state diff compare mode is shareable by URL', async ({ page }) => { + await page.goto('/?aggregateId=order-demo-001&seq=100&compare=89&tab=changes&panel=state'); + + await expect(page.getByRole('region', { name: 'State viewer' })).toBeVisible(); + await expect(page.getByText('Compared with #89')).toBeVisible(); + await expect(page.getByText('Structural diff')).toBeVisible(); +}); + +test('replay debugger keeps panel and position in URL while stepping', async ({ page }) => { + await page.goto('/?aggregateId=order-demo-001&seq=5&panel=replay'); + + await expect(page.getByRole('region', { name: 'Replay debugger' })).toBeVisible(); + await page.getByRole('button', { name: 'Replay next event' }).click(); + await expect(page).toHaveURL(/seq=6/); + await expect(page).toHaveURL(/panel=replay/); +}); + +test('statistics panel renders in demo mode', async ({ page }) => { + await page.goto('/#/stats'); + + await expect(page.getByRole('region', { name: 'Statistics panel' })).toBeVisible(); + await expect(page.getByText('Total events')).toBeVisible(); + await expect(page.getByText('100')).toBeVisible(); +}); + +test('command palette opens aggregate and keyboard navigation advances the selection', async ({ page }) => { + await page.goto('/'); + + await page.keyboard.press('Control+K'); + await expect(page.getByRole('dialog', { name: 'Command palette' })).toBeVisible(); + await page.getByLabel('Command palette search').fill('demo'); + await page.keyboard.press('Enter'); + + await expect(page).toHaveURL(/aggregateId=order-demo-001/); + await expect(page.getByText('Viewing:')).toBeVisible(); + + await page.keyboard.press('j'); + await expect(page).toHaveURL(/seq=2/); +}); + +test('timeline stays virtualized while still allowing direct jumps', async ({ page }) => { + await page.goto('/?aggregateId=order-demo-001&seq=1'); + + const timelineButtons = page.locator('.timeline-stepper button'); + expect(await timelineButtons.count()).toBeLessThan(40); + + const jumpInput = page.getByLabel('Jump to sequence number'); + await jumpInput.fill('100'); + await jumpInput.press('Enter'); + + await expect(page).toHaveURL(/seq=100/); + await expect(page.getByText('Selected seq #100')).toBeVisible(); +}); From 8c8875b2061340903e705ba38737436fcdab0e04 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Thu, 26 Mar 2026 15:38:33 +0200 Subject: [PATCH 09/10] fix(ui): tighten accessibility and e2e coverage --- .../{index-DXJiUi5_.js => index-ri1P99Z8.js} | 2 +- .../src/main/resources/web/index.html | 2 +- eventlens-ui/src/App.tsx | 9 ++++++++- eventlens-ui/src/components/JsonTreeView.tsx | 7 ++----- eventlens-ui/src/components/SearchBar.tsx | 1 - eventlens-ui/src/components/Timeline.tsx | 1 - eventlens-ui/tests/e2e/accessibility.spec.ts | 1 + .../tests/e2e/v4-critical-path.spec.ts | 19 +++++++++++-------- 8 files changed, 24 insertions(+), 18 deletions(-) rename eventlens-api/src/main/resources/web/assets/{index-DXJiUi5_.js => index-ri1P99Z8.js} (84%) diff --git a/eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js b/eventlens-api/src/main/resources/web/assets/index-ri1P99Z8.js similarity index 84% rename from eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js rename to eventlens-api/src/main/resources/web/assets/index-ri1P99Z8.js index 0875bdb..ea0bf31 100644 --- a/eventlens-api/src/main/resources/web/assets/index-DXJiUi5_.js +++ b/eventlens-api/src/main/resources/web/assets/index-ri1P99Z8.js @@ -11,4 +11,4 @@ Error generating stack: `+e.message+` `)}getSetCookie(){return this.get(`set-cookie`)||[]}get[Symbol.toStringTag](){return`AxiosHeaders`}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){let n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){let t=(this[tr]=this[tr]={accessors:{}}).accessors,n=this.prototype;function r(e){let r=nr(e);t[r]||(cr(n,e),t[r]=!0)}return N.isArray(e)?e.forEach(r):r(e),this}};lr.accessor([`Content-Type`,`Content-Length`,`Accept`,`Accept-Encoding`,`User-Agent`,`Authorization`]),N.reduceDescriptors(lr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),N.freezeMethods(lr);function ur(e,t){let n=this||Qn,r=t||n,i=lr.from(r.headers),a=r.data;return N.forEach(e,function(e){a=e.call(n,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function dr(e){return!!(e&&e.__CANCEL__)}var fr=class extends P{constructor(e,t,n){super(e??`canceled`,P.ERR_CANCELED,t,n),this.name=`CanceledError`,this.__CANCEL__=!0}};function pr(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new P(`Request failed with status code `+n.status,[P.ERR_BAD_REQUEST,P.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function mr(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||``}function hr(e,t){e||=10;let n=Array(e),r=Array(e),i=0,a=0,o;return t=t===void 0?1e3:t,function(s){let c=Date.now(),l=r[a];o||=c,n[i]=s,r[i]=c;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),c-o{n=r,i=null,a&&=(clearTimeout(a),null),e(...t)};return[(...e)=>{let t=Date.now(),s=t-n;s>=r?o(e,t):(i=e,a||=setTimeout(()=>{a=null,o(i)},r-s))},()=>i&&o(i)]}var _r=(e,t,n=3)=>{let r=0,i=hr(50,250);return gr(n=>{let a=n.loaded,o=n.lengthComputable?n.total:void 0,s=a-r,c=i(s),l=a<=o;r=a,e({loaded:a,total:o,progress:o?a/o:void 0,bytes:s,rate:c||void 0,estimated:c&&o&&l?(o-a)/c:void 0,event:n,lengthComputable:o!=null,[t?`download`:`upload`]:!0})},n)},vr=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},yr=e=>(...t)=>N.asap(()=>e(...t)),br=Kn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Kn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Kn.origin),Kn.navigator&&/(msie|trident)/i.test(Kn.navigator.userAgent)):()=>!0,xr=Kn.hasStandardBrowserEnv?{write(e,t,n,r,i,a,o){if(typeof document>`u`)return;let s=[`${e}=${encodeURIComponent(t)}`];N.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),N.isString(r)&&s.push(`path=${r}`),N.isString(i)&&s.push(`domain=${i}`),a===!0&&s.push(`secure`),N.isString(o)&&s.push(`SameSite=${o}`),document.cookie=s.join(`; `)},read(e){if(typeof document>`u`)return null;let t=document.cookie.match(RegExp(`(?:^|; )`+e+`=([^;]*)`));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,``,Date.now()-864e5,`/`)}}:{write(){},read(){return null},remove(){}};function Sr(e){return typeof e==`string`?/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e):!1}function Cr(e,t){return t?e.replace(/\/?\/$/,``)+`/`+t.replace(/^\/+/,``):e}function wr(e,t,n){let r=!Sr(t);return e&&(r||n==0)?Cr(e,t):t}var Tr=e=>e instanceof lr?{...e}:e;function Er(e,t){t||={};let n={};function r(e,t,n,r){return N.isPlainObject(e)&&N.isPlainObject(t)?N.merge.call({caseless:r},e,t):N.isPlainObject(t)?N.merge({},t):N.isArray(t)?t.slice():t}function i(e,t,n,i){if(!N.isUndefined(t))return r(e,t,n,i);if(!N.isUndefined(e))return r(void 0,e,n,i)}function a(e,t){if(!N.isUndefined(t))return r(void 0,t)}function o(e,t){if(!N.isUndefined(t))return r(void 0,t);if(!N.isUndefined(e))return r(void 0,e)}function s(n,i,a){if(a in t)return r(n,i);if(a in e)return r(void 0,n)}let c={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(e,t,n)=>i(Tr(e),Tr(t),n,!0)};return N.forEach(Object.keys({...e,...t}),function(r){if(r===`__proto__`||r===`constructor`||r===`prototype`)return;let a=N.hasOwnProp(c,r)?c[r]:i,o=a(e[r],t[r],r);N.isUndefined(o)&&a!==s||(n[r]=o)}),n}var Dr=e=>{let t=Er({},e),{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:o,auth:s}=t;if(t.headers=o=lr.from(o),t.url=In(wr(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&o.set(`Authorization`,`Basic `+btoa((s.username||``)+`:`+(s.password?unescape(encodeURIComponent(s.password)):``))),N.isFormData(n)){if(Kn.hasStandardBrowserEnv||Kn.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(N.isFunction(n.getHeaders)){let e=n.getHeaders(),t=[`content-type`,`content-length`];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&o.set(e,n)})}}if(Kn.hasStandardBrowserEnv&&(r&&N.isFunction(r)&&(r=r(t)),r||r!==!1&&br(t.url))){let e=i&&a&&xr.read(a);e&&o.set(i,e)}return t},Or=typeof XMLHttpRequest<`u`&&function(e){return new Promise(function(t,n){let r=Dr(e),i=r.data,a=lr.from(r.headers).normalize(),{responseType:o,onUploadProgress:s,onDownloadProgress:c}=r,l,u,d,f,p;function m(){f&&f(),p&&p(),r.cancelToken&&r.cancelToken.unsubscribe(l),r.signal&&r.signal.removeEventListener(`abort`,l)}let h=new XMLHttpRequest;h.open(r.method.toUpperCase(),r.url,!0),h.timeout=r.timeout;function g(){if(!h)return;let r=lr.from(`getAllResponseHeaders`in h&&h.getAllResponseHeaders());pr(function(e){t(e),m()},function(e){n(e),m()},{data:!o||o===`text`||o===`json`?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:r,config:e,request:h}),h=null}`onloadend`in h?h.onloadend=g:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(`file:`)===0)||setTimeout(g)},h.onabort=function(){h&&=(n(new P(`Request aborted`,P.ECONNABORTED,e,h)),null)},h.onerror=function(t){let r=new P(t&&t.message?t.message:`Network Error`,P.ERR_NETWORK,e,h);r.event=t||null,n(r),h=null},h.ontimeout=function(){let t=r.timeout?`timeout of `+r.timeout+`ms exceeded`:`timeout exceeded`,i=r.transitional||Rn;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new P(t,i.clarifyTimeoutError?P.ETIMEDOUT:P.ECONNABORTED,e,h)),h=null},i===void 0&&a.setContentType(null),`setRequestHeader`in h&&N.forEach(a.toJSON(),function(e,t){h.setRequestHeader(t,e)}),N.isUndefined(r.withCredentials)||(h.withCredentials=!!r.withCredentials),o&&o!==`json`&&(h.responseType=r.responseType),c&&([d,p]=_r(c,!0),h.addEventListener(`progress`,d)),s&&h.upload&&([u,f]=_r(s),h.upload.addEventListener(`progress`,u),h.upload.addEventListener(`loadend`,f)),(r.cancelToken||r.signal)&&(l=t=>{h&&=(n(!t||t.type?new fr(null,e,h):t),h.abort(),null)},r.cancelToken&&r.cancelToken.subscribe(l),r.signal&&(r.signal.aborted?l():r.signal.addEventListener(`abort`,l)));let _=mr(r.url);if(_&&Kn.protocols.indexOf(_)===-1){n(new P(`Unsupported protocol `+_+`:`,P.ERR_BAD_REQUEST,e));return}h.send(i||null)})},kr=(e,t)=>{let{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n=new AbortController,r,i=function(e){if(!r){r=!0,o();let t=e instanceof Error?e:this.reason;n.abort(t instanceof P?t:new fr(t instanceof Error?t.message:t))}},a=t&&setTimeout(()=>{a=null,i(new P(`timeout of ${t}ms exceeded`,P.ETIMEDOUT))},t),o=()=>{e&&=(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener(`abort`,i)}),null)};e.forEach(e=>e.addEventListener(`abort`,i));let{signal:s}=n;return s.unsubscribe=()=>N.asap(o),s}},Ar=function*(e,t){let n=e.byteLength;if(!t||n{let i=jr(e,t),a=0,o,s=e=>{o||(o=!0,r&&r(e))};return new ReadableStream({async pull(e){try{let{done:t,value:r}=await i.next();if(t){s(),e.close();return}let o=r.byteLength;n&&n(a+=o),e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel(e){return s(e),i.return()}},{highWaterMark:2})},Pr=64*1024,{isFunction:Fr}=N,Ir=(({Request:e,Response:t})=>({Request:e,Response:t}))(N.global),{ReadableStream:Lr,TextEncoder:Rr}=N.global,zr=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Br=e=>{e=N.merge.call({skipUndefined:!0},Ir,e);let{fetch:t,Request:n,Response:r}=e,i=t?Fr(t):typeof fetch==`function`,a=Fr(n),o=Fr(r);if(!i)return!1;let s=i&&Fr(Lr),c=i&&(typeof Rr==`function`?(e=>t=>e.encode(t))(new Rr):async e=>new Uint8Array(await new n(e).arrayBuffer())),l=a&&s&&zr(()=>{let e=!1,t=new n(Kn.origin,{body:new Lr,method:`POST`,get duplex(){return e=!0,`half`}}).headers.has(`Content-Type`);return e&&!t}),u=o&&s&&zr(()=>N.isReadableStream(new r(``).body)),d={stream:u&&(e=>e.body)};i&&[`text`,`arrayBuffer`,`blob`,`formData`,`stream`].forEach(e=>{!d[e]&&(d[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new P(`Response type '${e}' is not supported`,P.ERR_NOT_SUPPORT,n)})});let f=async e=>{if(e==null)return 0;if(N.isBlob(e))return e.size;if(N.isSpecCompliantForm(e))return(await new n(Kn.origin,{method:`POST`,body:e}).arrayBuffer()).byteLength;if(N.isArrayBufferView(e)||N.isArrayBuffer(e))return e.byteLength;if(N.isURLSearchParams(e)&&(e+=``),N.isString(e))return(await c(e)).byteLength},p=async(e,t)=>N.toFiniteNumber(e.getContentLength())??f(t);return async e=>{let{url:i,method:o,data:s,signal:c,cancelToken:f,timeout:m,onDownloadProgress:h,onUploadProgress:g,responseType:_,headers:v,withCredentials:y=`same-origin`,fetchOptions:b}=Dr(e),x=t||fetch;_=_?(_+``).toLowerCase():`text`;let S=kr([c,f&&f.toAbortSignal()],m),C=null,w=S&&S.unsubscribe&&(()=>{S.unsubscribe()}),ee;try{if(g&&l&&o!==`get`&&o!==`head`&&(ee=await p(v,s))!==0){let e=new n(i,{method:`POST`,body:s,duplex:`half`}),t;if(N.isFormData(s)&&(t=e.headers.get(`content-type`))&&v.setContentType(t),e.body){let[t,n]=vr(ee,_r(yr(g)));s=Nr(e.body,Pr,t,n)}}N.isString(y)||(y=y?`include`:`omit`);let t=a&&`credentials`in n.prototype,c={...b,signal:S,method:o.toUpperCase(),headers:v.normalize().toJSON(),body:s,duplex:`half`,credentials:t?y:void 0};C=a&&new n(i,c);let f=await(a?x(C,b):x(i,c)),m=u&&(_===`stream`||_===`response`);if(u&&(h||m&&w)){let e={};[`status`,`statusText`,`headers`].forEach(t=>{e[t]=f[t]});let t=N.toFiniteNumber(f.headers.get(`content-length`)),[n,i]=h&&vr(t,_r(yr(h),!0))||[];f=new r(Nr(f.body,Pr,n,()=>{i&&i(),w&&w()}),e)}_||=`text`;let te=await d[N.findKey(d,_)||`text`](f,e);return!m&&w&&w(),await new Promise((t,n)=>{pr(t,n,{data:te,headers:lr.from(f.headers),status:f.status,statusText:f.statusText,config:e,request:C})})}catch(t){throw w&&w(),t&&t.name===`TypeError`&&/Load failed|fetch/i.test(t.message)?Object.assign(new P(`Network Error`,P.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t}):P.from(t,t&&t.code,e,C,t&&t.response)}}},Vr=new Map,Hr=e=>{let t=e&&e.env||{},{fetch:n,Request:r,Response:i}=t,a=[r,i,n],o=a.length,s,c,l=Vr;for(;o--;)s=a[o],c=l.get(s),c===void 0&&l.set(s,c=o?new Map:Br(t)),l=c;return c};Hr();var Ur={http:null,xhr:Or,fetch:{get:Hr}};N.forEach(Ur,(e,t)=>{if(e){try{Object.defineProperty(e,`name`,{value:t})}catch{}Object.defineProperty(e,`adapterName`,{value:t})}});var Wr=e=>`- ${e}`,Gr=e=>N.isFunction(e)||e===null||e===!1;function Kr(e,t){e=N.isArray(e)?e:[e];let{length:n}=e,r,i,a={};for(let o=0;o`adapter ${e} `+(t===!1?`is not supported by the environment`:`is not available in the build`));throw new P(`There is no suitable adapter to dispatch the request `+(n?e.length>1?`since : `+e.map(Wr).join(` `):` `+Wr(e[0]):`as no adapter specified`),`ERR_NOT_SUPPORT`)}return i}var qr={getAdapter:Kr,adapters:Ur};function Jr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new fr(null,e)}function Yr(e){return Jr(e),e.headers=lr.from(e.headers),e.data=ur.call(e,e.transformRequest),[`post`,`put`,`patch`].indexOf(e.method)!==-1&&e.headers.setContentType(`application/x-www-form-urlencoded`,!1),qr.getAdapter(e.adapter||Qn.adapter,e)(e).then(function(t){return Jr(e),t.data=ur.call(e,e.transformResponse,t),t.headers=lr.from(t.headers),t},function(t){return dr(t)||(Jr(e),t&&t.response&&(t.response.data=ur.call(e,e.transformResponse,t.response),t.response.headers=lr.from(t.response.headers))),Promise.reject(t)})}var Xr=`1.13.6`,Zr={};[`object`,`boolean`,`number`,`function`,`string`,`symbol`].forEach((e,t)=>{Zr[e]=function(n){return typeof n===e||`a`+(t<1?`n `:` `)+e}});var Qr={};Zr.transitional=function(e,t,n){function r(e,t){return`[Axios v`+Xr+`] Transitional option '`+e+`'`+t+(n?`. `+n:``)}return(n,i,a)=>{if(e===!1)throw new P(r(i,` has been removed`+(t?` in `+t:``)),P.ERR_DEPRECATED);return t&&!Qr[i]&&(Qr[i]=!0,console.warn(r(i,` has been deprecated since v`+t+` and will be removed in the near future`))),e?e(n,i,a):!0}},Zr.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};function $r(e,t,n){if(typeof e!=`object`)throw new P(`options must be an object`,P.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),i=r.length;for(;i-- >0;){let a=r[i],o=t[a];if(o){let t=e[a],n=t===void 0||o(t,a,e);if(n!==!0)throw new P(`option `+a+` must be `+n,P.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new P(`Unknown option `+a,P.ERR_BAD_OPTION)}}var ei={assertOptions:$r,validators:Zr},F=ei.validators,ti=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Ln,response:new Ln}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=Error();let n=t.stack?t.stack.replace(/^.+\n/,``):``;try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,``))&&(e.stack+=` -`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=Er(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ei.assertOptions(n,{silentJSONParsing:F.transitional(F.boolean),forcedJSONParsing:F.transitional(F.boolean),clarifyTimeoutError:F.transitional(F.boolean),legacyInterceptorReqResOrdering:F.transitional(F.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:ei.assertOptions(r,{encode:F.function,serialize:F.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ei.assertOptions(t,{baseUrl:F.spelling(`baseURL`),withXsrfToken:F.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=lr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Rn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Yr.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new fr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function ri(e){return function(t){return e.apply(null,t)}}function ii(e){return N.isObject(e)&&e.isAxiosError===!0}var ai={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ai).forEach(([e,t])=>{ai[t]=e});function oi(e){let t=new ti(e),n=ht(ti.prototype.request,t);return N.extend(n,ti.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return oi(Er(e,t))},n}var I=oi(Qn);I.Axios=ti,I.CanceledError=fr,I.CancelToken=ni,I.isCancel=dr,I.VERSION=Xr,I.toFormData=jn,I.AxiosError=P,I.Cancel=I.CanceledError,I.all=function(e){return Promise.all(e)},I.spread=ri,I.isAxiosError=ii,I.mergeConfig=Er,I.AxiosHeaders=lr,I.formToJSON=e=>Xn(N.isHTMLForm(e)?new FormData(e):e),I.getAdapter=qr.getAdapter,I.HttpStatusCode=ai,I.default=I;var si=l(_()),ci=`order-demo-001`;function li(e,t,n,r,i,a){return{eventId:e,aggregateId:ci,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function ui(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(li(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var di=ui();function fi(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:ci,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var pi=fi(di);function mi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function hi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function gi(e){let t=[],n={};for(let r of e){let e={...n};n=mi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:hi(e,i)})}return t}var _i=gi(di);function vi(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function yi(e){return vi(e)?[ci]:[]}function bi(e){let t=Math.min(Math.max(e,1),500);return[...di].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,t)}function xi(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=di.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:di.slice(i,i+a),totalEvents:r}}function Si(e){return e===`order-demo-001`?_i:[]}function Ci(e){let t=Math.min(Math.max(e,1),500);return pi.slice(0,t)}function wi(){return[...di].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function Ti(){return{status:`UP`,version:`demo`,demo:!0}}function Ei(e=1,t=24){let n=Math.max(e,1)*60*60*1e3,r=[...di].sort((e,t)=>Date.parse(e.timestamp)-Date.parse(t.timestamp)),i=new Map,a=new Map,o=new Map;for(let e of r){let t=new Date(Math.floor(Date.parse(e.timestamp)/n)*n).toISOString();i.set(t,(i.get(t)??0)+1),a.set(e.eventType,(a.get(e.eventType)??0)+1),o.set(e.aggregateType,(o.get(e.aggregateType)??0)+1)}return{totalEvents:di.length,distinctAggregates:1,eventTypes:[...a.entries()].map(([e,t])=>({type:e,count:t})),aggregateTypes:[...o.entries()].map(([e,t])=>({type:e,count:t})),throughput:[...i.entries()].slice(-Math.max(t,1)).map(([e,t])=>({bucket:e,count:t})),available:!0,message:null}}function Di(){return!1}var Oi=I.create({baseURL:`/api`});function ki(e){return new Promise(t=>{setTimeout(t,e)})}function Ai(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var ji=async(e,t=20,n)=>{let r=Ai(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(Di()){await ki(40);let n=yi(e);try{let e=await Oi.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Oi.get(r).then(e=>e.data)},Mi=async(e,t=500,n=0,r,i=`full`)=>{if(Di()&&e===`order-demo-001`)return await ki(50),xi(e,t,n);let a=Ai(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Oi.get(a).then(e=>e.data)},Ni=async(e,t)=>Di()&&e===`order-demo-001`?(await ki(50),Si(e)):Oi.get(Ai(`/aggregates/${e}/transitions`,t)).then(e=>e.data),Pi=async(e=100,t)=>Di()?(await ki(45),Ci(e)):Oi.get(Ai(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),Fi=async(e=50,t)=>Di()?(await ki(35),bi(e)):Oi.get(Ai(`/events/recent?limit=${e}`,t)).then(e=>e.data),L=async(e,t=1,n=24)=>{if(Di())return await ki(30),Ei(t,n);let r=Ai(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Oi.get(r).then(e=>e.data)},R=async()=>Di()?(await ki(20),Ti()):Oi.get(`/health`).then(e=>e.data),Ii=async()=>Di()?(await ki(20),[{id:`demo-primary`,displayName:`Demo Primary`,status:`ready`,healthMessage:`Frontend demo datasource`,capabilities:[`timeline`,`replay`,`statistics`]}]):Oi.get(`/v1/datasources`).then(e=>e.data),Li=async()=>Di()?(await ki(20),[{instanceId:`demo-source`,typeId:`demo`,displayName:`Demo Source Plugin`,pluginType:`EVENT_SOURCE`,lifecycle:`ready`,health:{state:`up`,message:`Frontend demo plugin`},lastHealthCheck:new Date().toISOString(),failureReason:null}]):Oi.get(`/v1/plugins`).then(e=>e.data);function Ri(e,t){let[n,r]=(0,k.useState)(e);return(0,k.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function zi({onSelect:e,source:t,selectedValue:n}){let[r,i]=(0,k.useState)(``),[a,o]=(0,k.useState)(!1),s=(0,k.useRef)(null),c=Ri(r,300),{data:l=[]}=j({queryKey:[`search`,c,t??`default`],queryFn:()=>ji(c,20,t),enabled:c.length>=2,staleTime:5e3});(0,k.useEffect)(()=>{i(n??``)},[n]),(0,k.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let u=(0,k.useRef)(null),d=(0,k.useCallback)(()=>{u.current?.focus(),u.current?.select()},[]);(0,k.useEffect)(()=>{let e=document.getElementById(`aggregate-search`);return e?.addEventListener(`focus`,d),()=>e?.removeEventListener(`focus`,d)},[d]);let f=t=>{i(t),o(!1),e(t)};return(0,A.jsxs)(`div`,{className:`search-wrapper`,ref:s,children:[(0,A.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,A.jsx)(`input`,{id:`aggregate-search`,ref:u,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:r,onChange:e=>{i(e.target.value),o(!0)},onFocus:()=>r.length>=2&&o(!0),onKeyDown:e=>{e.key===`Enter`&&r.trim()&&f(r.trim()),e.key===`Escape`&&o(!1)},autoComplete:`off`,"aria-expanded":a,"aria-controls":`aggregate-search-results`,"aria-autocomplete":`list`}),a&&l.length>0&&(0,A.jsx)(`div`,{className:`search-results`,role:`listbox`,id:`aggregate-search-results`,children:l.map(e=>(0,A.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>f(e),role:`option`,children:[(0,A.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,A.jsxs)(`span`,{className:`search-result-body`,children:[(0,A.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,A.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,A.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Bi(e,t){return j({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Mi(e,500,0,t,`metadata`),enabled:!!e})}function Vi(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}function Hi(e){let t=[],n=0;for(;n=4)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function Gi(e,t){return e===t?null:t}var Ki=[1,6,24,168];function qi(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function Ji(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function Yi(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function Xi(e,t){return t==null?!1:e.kind===`single`?e.event.sequenceNumber===t:e.items.some(e=>e.sequenceNumber===t)}function Zi(e,t,n,r,i){let a=e.event,o=t===a.sequenceNumber,s=n===a.sequenceNumber,c=e.kind===`group-item`?` timeline-step-compact`:``;return(0,A.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${qi(a.eventType)} ${o?`active`:``} ${s?`timeline-step-compare`:``}${c}`,onClick:e=>{e.shiftKey&&i?i(Gi(n,a.sequenceNumber)):r(a.sequenceNumber)},"aria-current":o?`step`:void 0,"aria-selected":o,"aria-label":Yi(e.stepNumber,a),children:[(0,A.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,A.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,a.sequenceNumber]}),(0,A.jsx)(`span`,{className:`timeline-step-type`,children:a.eventType}),(0,A.jsx)(`span`,{className:`timeline-step-seq`,children:Vi(a.timestamp).toLocaleTimeString()})]},e.key)}function Qi({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Bi(e,a),[c,l]=(0,k.useState)(``),[u,d]=(0,k.useState)(``),[f,p]=(0,k.useState)(`all`),[m,h]=(0,k.useState)(null),g=(0,k.useRef)(null),_=o?.events??[],v=o?.totalEvents??0,y=(0,k.useMemo)(()=>{let e=_;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Vi(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Vi(e.timestamp).getTime()>=t)}return e},[_,c,f]),b=(0,k.useMemo)(()=>Hi(y),[y]),x=(0,k.useMemo)(()=>[...new Set(_.map(e=>e.eventType))].sort(),[_]);(0,k.useEffect)(()=>{if(t!=null){for(let e of b)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(Ui(e.startIndex,e.items.length));return}h(null)}},[b,t]);let S=(0,k.useMemo)(()=>Wi(b,m,t),[m,b,t]),C=(0,k.useMemo)(()=>t==null?-1:S.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[S,t]);if((0,k.useEffect)(()=>{let e=e=>{let t=e.detail;if(S.length&&(t<0||t>0)){let e=C>=0?C:0;r(Ji(S[Math.max(0,Math.min(S.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,S,C]),(0,k.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!S.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=S.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,S,t]),(0,k.useEffect)(()=>{if(!g.current||t==null)return;let e=g.current.querySelector(`[aria-current="step"]`);if(!e)return;let n=g.current.getBoundingClientRect(),r=e.getBoundingClientRect(),i=g.current.scrollLeft,a=i+(r.left-n.left),o=a+r.width,s=i,c=i+g.current.clientWidth;ac-24&&g.current.scrollTo({left:o-g.current.clientWidth+24,behavior:`smooth`})},[m,t]),s)return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,A.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!_.length)return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let w=y[0]?.sequenceNumber??0,ee=y[y.length-1]?.sequenceNumber??0;return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,A.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Event Sequence`,(0,A.jsxs)(`span`,{className:`timeline-count-pill`,children:[y.length,` / `,v,` events`]})]}),(0,A.jsx)(`div`,{className:`timeline-jump-group`,children:(0,A.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);y.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,A.jsx)(`p`,{className:`timeline-hint`,children:`Scroll the rail horizontally from left to right. Repeated event runs collapse into grouped cards; click a group to open the full strip below.`}),(0,A.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),x.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,A.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),Ki.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,A.jsx)(`div`,{className:`timeline-rail`,children:(0,A.jsx)(`div`,{ref:g,className:`timeline-stepper`,children:(0,A.jsx)(`div`,{className:`timeline-stepper-track`,children:b.map((e,a)=>{let o=ah(e=>e===s?null:s),"aria-expanded":c,children:[(0,A.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,A.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,A.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:c?`v`:`>`})]}),(0,A.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,A.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]}),o,c&&(0,A.jsxs)(`div`,{className:`timeline-expanded-deck`,children:[(0,A.jsxs)(`div`,{className:`timeline-expanded-head`,children:[(0,A.jsx)(`div`,{className:`timeline-expanded-title`,children:e.eventType}),(0,A.jsxs)(`div`,{className:`timeline-group-range`,children:[`Expanded run of `,e.items.length,` events`]}),(0,A.jsx)(`button`,{type:`button`,className:`timeline-collapse-btn`,onClick:()=>h(null),children:`Collapse`})]}),(0,A.jsx)(`div`,{className:`timeline-stepper-track`,children:e.items.map((a,o)=>{let c={kind:`group-item`,key:`group-item-${a.sequenceNumber}`,event:a,stepNumber:e.startIndex+o+1,parentKey:s};return(0,A.jsxs)(`div`,{className:`timeline-track-item`,children:[Zi(c,t,n,r,i),or(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,A.jsxs)(`div`,{className:`timeline-info`,children:[(0,A.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,w]}),(0,A.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,A.jsxs)(`span`,{className:`timeline-info-muted`,children:[` across `,b.length,` visible segments`]})]})}),(0,A.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ee]})]})]})}function $i(e,t){return j({queryKey:[`transitions`,e,t??`default`],queryFn:()=>Ni(e,t),enabled:!!e})}function ea(e,t,n=!0){let[r,i]=(0,k.useState)([]),[a,o]=(0,k.useState)(0),[s,c]=(0,k.useState)(!1),l=(0,k.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,k.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-DTKMBXSt.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function ta({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,A.jsxs)(`div`,{className:`diff-panel`,children:[(0,A.jsx)(`div`,{className:`diff-toolbar`,children:(0,A.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,A.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,A.jsx)(`div`,{className:`diff-body`,children:(0,A.jsx)(`div`,{className:`diff-scroll`,children:(0,A.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,A.jsxs)(`div`,{className:`diff-split-head`,children:[(0,A.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,A.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,A.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,A.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,A.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,A.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,A.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,A.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,A.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,A.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,A.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function na({open:e,onToggle:t}){return(0,A.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`▼`:`▶`})}function ra({value:e}){return e===null?(0,A.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,A.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,A.jsx)(`span`,{className:`json-number`,children:e}):(0,A.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function ia({value:e,changedKeys:t}){return(0,A.jsx)(`div`,{className:`json-tree json-tree-root`,role:`tree`,children:(0,A.jsx)(aa,{value:e,depth:0,changedKeys:t,keyPath:``})})}function aa({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,k.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(ra,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,A.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,A.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,A.jsx)(na,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,A.jsxs)(A.Fragment,{children:[e.map((e,n)=>(0,A.jsx)(aa,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,A.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,A.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,A.jsx)(na,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,A.jsxs)(A.Fragment,{children:[i.map(([e,n])=>(0,A.jsx)(aa,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var oa=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function sa({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,active:a=!1,onActivate:o,source:s}){let{data:c=[],isLoading:l}=$i(e,s),[u,d]=(0,k.useState)(`changes`),f=r??u,p=e=>{d(e),i?.(e)},m=c.find(e=>e.event.sequenceNumber===t)??null,h=n==null?null:c.find(e=>e.event.sequenceNumber===n)??null,g=m!=null&&h!=null&&m.event.sequenceNumber!==h.event.sequenceNumber,_=g?h.stateAfter:m?.stateBefore,v=m?.stateAfter,{patches:y,loading:b,durationMs:x}=ea(_,v,g&&!!_&&!!v),S=(0,k.useMemo)(()=>g?new Set(y.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(m?.diff??{})),[g,y,m?.diff]);return l?(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`State`}),(0,A.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):m?(0,A.jsxs)(`section`,{className:`card`,role:`region`,"aria-label":`State viewer`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,A.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,m.event.sequenceNumber,(0,A.jsx)(`span`,{className:`diff-count-badge`,children:m.event.eventType}),g&&(0,A.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,h?.event.sequenceNumber]}),g&&!b&&(0,A.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,x.toFixed(1),`ms`]})]}),(0,A.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:oa.map(e=>(0,A.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":f===e.id,className:`state-tab ${f===e.id?`active`:``}`,onClick:()=>p(e.id),children:e.label},e.id))}),(0,A.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[f===`changes`&&(0,A.jsx)(`div`,{children:g?b?(0,A.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,A.jsx)(ta,{patches:y,title:`Structural diff`}):m.diff&&Object.keys(m.diff).length>0?(0,A.jsx)(ta,{diff:m.diff}):(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),f===`before-after`&&(0,A.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,A.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,A.jsx)(`h4`,{children:g?`Event #${h?.event.sequenceNumber}`:`Before`}),(0,A.jsx)(ia,{value:_??{},changedKeys:S})]}),(0,A.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,A.jsx)(`h4`,{children:g?`Event #${m.event.sequenceNumber}`:`After`}),(0,A.jsx)(ia,{value:v??{},changedKeys:S})]})]}),f===`raw`&&(0,A.jsx)(`div`,{style:{marginTop:12},children:(0,A.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(g?{leftEvent:h?.event,rightEvent:m.event,leftState:_,rightState:v}:m.event,null,2)})})]})]}):null}var z=1e3,ca=3e4;function la(e,t,n){let r=n?.enabled??!0,[i,a]=(0,k.useState)(()=>r?`connecting`:`connected`),o=(0,k.useRef)(null),s=(0,k.useRef)(t),c=(0,k.useRef)(z);return s.current=t,(0,k.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=z,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,ca),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var ua=(0,k.createContext)(void 0);function da({children:e}){let[t,n]=(0,k.useState)([]),r=(0,k.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,A.jsxs)(ua.Provider,{value:{notify:r},children:[e,(0,A.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,A.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function fa(){let e=(0,k.useContext)(ua);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function pa(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function ma(e){return pa(e)}var ha=100;function ga(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function _a({source:e,onSelectAggregate:t}){return(0,A.jsx)(ba,{source:e,onSelectAggregate:t})}function va(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function ya(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function ba({source:e,onSelectAggregate:t}){let n=Di(),[r,i]=(0,k.useState)(()=>n?wi():[]),[a,o]=(0,k.useState)(!1),[s,c]=(0,k.useState)(null),l=(0,k.useRef)(null),u=(0,k.useRef)(a);u.current=a;let{notify:d}=fa();(0,k.useEffect)(()=>{c(null),i(n?wi():[])},[e,n]);let f=la(ya(e),e=>{if(va(e)){c(e.source),i([]);return}c(null),!u.current&&i(t=>[...t.slice(-(ha-1)),e])},{enabled:!n}),p=(0,k.useRef)(d);p.current=d;let m=(0,k.useRef)(0);return(0,k.useEffect)(()=>{n||(f===`disconnected`?(m.current++,m.current<=1&&p.current(`Live stream disconnected. Retrying…`)):f===`connected`&&(m.current=0))},[f,n]),(0,k.useEffect)(()=>{!a&&l.current&&(l.current.scrollTop=l.current.scrollHeight)},[r,a]),(0,k.useEffect)(()=>{let e=()=>o(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`live-header`,children:[(0,A.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,A.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,A.jsxs)(`div`,{className:`live-indicator`,children:[(0,A.jsx)(`span`,{className:`dot ${f===`connected`?`dot-green`:f===`connecting`?`dot-yellow`:`dot-red`}`}),(0,A.jsx)(`span`,{style:{color:f===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:f===`connected`?a?`Paused`:`Live`:f})]}),(0,A.jsx)(`button`,{className:`pause-btn`,onClick:()=>o(!a),children:a?`▶ Resume`:`⏸ Pause`})]})]}),(0,A.jsxs)(`div`,{className:`event-stream`,ref:l,children:[s&&(0,A.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:s?` (${s})`:``,`.`]}),r.length===0&&(0,A.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:s?null:n?`Demo stream (static sample events)`:`Waiting for events…`}),r.map(e=>(0,A.jsxs)(`div`,{className:`event-row ${ma(e.eventType)}`,children:[(0,A.jsx)(`span`,{className:`event-icon`,children:ga(e.eventType)}),(0,A.jsx)(`span`,{className:`event-time`,children:Vi(e.timestamp).toLocaleTimeString()}),(0,A.jsx)(`span`,{className:`event-type ${pa(e.eventType)}`,children:e.eventType}),t?(0,A.jsx)(`button`,{type:`button`,className:`event-agg event-agg-button`,onClick:()=>t(e.aggregateId),children:e.aggregateId}):(0,A.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function xa(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Sa(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Ca(){return(0,A.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,A.jsx)(`defs`,{children:(0,A.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,A.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,A.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,A.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,A.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,A.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function wa({color:e}){return(0,A.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,A.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Ta({source:e,onSelectAggregate:t}){let{data:n,isLoading:r}=j({queryKey:[`anomalies`,e??`default`],queryFn:()=>Pi(100,e),refetchInterval:3e4}),i=n&&n.length>0;return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,A.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!r&&i&&(0,A.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${n.length} anomalies`,children:n.length})]}),r&&(0,A.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!r&&!i&&(0,A.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,A.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,A.jsx)(`div`,{className:`shield-icon`,children:(0,A.jsx)(Ca,{})}),(0,A.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,A.jsxs)(`div`,{className:`gauge-row`,children:[(0,A.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,A.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,A.jsx)(wa,{color:`green`})]}),(0,A.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,A.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,A.jsx)(wa,{color:`cyan`})]}),(0,A.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,A.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,A.jsx)(wa,{color:`green`})]})]})]}),!r&&i&&(0,A.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,A.jsx)(`div`,{className:`anomaly-list-inner`,children:n.map((e,n)=>(0,A.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,A.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,A.jsx)(`span`,{className:`anomaly-severity-badge ${xa(e.severity)}`,children:Sa(e.severity)}),(0,A.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,A.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,A.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),t?(0,A.jsx)(`button`,{type:`button`,className:`anomaly-aggregate-link`,onClick:()=>t(e.aggregateId),children:(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})}):(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,A.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,A.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,A.jsx)(`span`,{className:`anomaly-meta-value`,children:Vi(e.timestamp).toLocaleString()})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${n}`))})})]})}var Ea=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Da(){let[e,t]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,A.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,A.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[Ea.map(e=>(0,A.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,A.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,A.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,A.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}var Oa=[2,3,5,10];function ka({transitions:e,selectedSequence:t,compareSequence:n,onSelectSequence:r,onClearCompare:i,active:a=!1,onActivate:o}){let[s,c]=(0,k.useState)(null),[l,u]=(0,k.useState)(3),[d,f]=(0,k.useState)(!1);if((0,k.useEffect)(()=>{n==null&&s!=null&&(s.type===`autoplay`&&f(!0),r(s.sequence),c(null))},[n,r,s]),!e.length)return null;let p=e.find(e=>e.event.sequenceNumber===t)??e[0],m=e.findIndex(e=>e.event.sequenceNumber===p.event.sequenceNumber),h=n!=null&&n!==p.event.sequenceNumber,g=m>=e.length-1,_=m<=0;(0,k.useEffect)(()=>{h&&d&&f(!1)},[h,d]),(0,k.useEffect)(()=>{if(!d||g){g&&d&&f(!1);return}let t=window.setInterval(()=>{let t=e[Math.min(m+1,e.length-1)];if(!t||t.event.sequenceNumber===p.event.sequenceNumber){f(!1);return}r(t.event.sequenceNumber)},l*1e3);return()=>window.clearInterval(t)},[g,l,p.event.sequenceNumber,m,d,r,e]);let v=e=>{if(e!==p.event.sequenceNumber){if(h&&i){c({type:`select`,sequence:e});return}f(!1),r(e)}},y=()=>{if(d){f(!1);return}if(g)return;let t=e[Math.min(m+1,e.length-1)].event.sequenceNumber;if(h&&i){c({type:`autoplay`,sequence:t});return}f(!0)};return(0,A.jsxs)(`section`,{className:`card replay-debugger`,tabIndex:0,role:`region`,"aria-label":`Replay debugger`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,A.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(e[Math.max(m-1,0)].event.sequenceNumber),title:`Step backward`,"aria-label":`Replay previous event`,disabled:_,children:`Previous`}),(0,A.jsxs)(`div`,{className:`replay-controls-center`,children:[(0,A.jsxs)(`div`,{className:`replay-position`,children:[`Event `,m+1,` of `,e.length]}),(0,A.jsxs)(`div`,{className:`replay-auto-controls`,children:[(0,A.jsx)(`button`,{type:`button`,className:`replay-auto-toggle ${d?`active`:``}`,onClick:y,disabled:g,"aria-pressed":d,children:d?`Pause Auto Replay`:`Start Auto Replay`}),(0,A.jsxs)(`label`,{className:`replay-interval-picker`,children:[(0,A.jsx)(`span`,{children:`Speed`}),(0,A.jsx)(`select`,{value:l,onChange:e=>u(Number(e.target.value)),disabled:d,"aria-label":`Auto replay interval`,children:Oa.map(e=>(0,A.jsxs)(`option`,{value:e,children:[e,`s / event`]},e))})]})]})]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(e[Math.min(m+1,e.length-1)].event.sequenceNumber),title:`Step forward`,"aria-label":`Replay next event`,disabled:g,children:`Next`})]}),h&&(0,A.jsxs)(`div`,{className:`replay-compare-warning`,role:`alert`,"aria-live":`polite`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`strong`,{children:`Compare mode is active.`}),` Replay stepping or auto replay will replace the comparison and continue from the selected event.`]}),s==null?(0,A.jsx)(`div`,{className:`replay-warning-hint`,children:`Use Previous, Next, the slider, or auto replay. We’ll ask before clearing compare mode.`}):(0,A.jsxs)(`div`,{className:`replay-compare-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`replay-warning-btn replay-warning-btn--primary`,onClick:()=>i?.(),children:s.type===`autoplay`?`Start replay and replace compare`:`Continue and replace compare`}),(0,A.jsx)(`button`,{type:`button`,className:`replay-warning-btn`,onClick:()=>c(null),children:`Keep compare`})]})]}),(0,A.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:m,onChange:t=>v(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,A.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,A.jsx)(`h4`,{children:`Current State`}),(0,A.jsx)(ia,{value:p.stateAfter,changedKeys:new Set(Object.keys(p.diff))})]})]})}function Aa(e,t=1,n=24){return j({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>L(e,t,n),staleTime:3e4})}function ja({source:e,onBack:t}){let[n,r]=(0,k.useState)(24),{data:i,isLoading:a}=Aa(e,1,n);return(0,A.jsxs)(`section`,{className:`card statistics-panel`,role:`region`,"aria-label":`Statistics panel`,"aria-busy":a,children:[(0,A.jsxs)(`div`,{className:`statistics-panel-header`,children:[(0,A.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,A.jsx)(`button`,{type:`button`,className:`statistics-back-btn`,onClick:t,children:`Back to workspace`})]}),(0,A.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${n===e?`active`:``}`,onClick:()=>r(e),children:e===72?`3d`:`${e}h`},e))}),a&&(0,A.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!a&&i&&!i.available&&(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`},children:i.message??`Statistics not available.`}),!a&&i?.available&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`stats-kpis`,children:[(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.totalEvents}),(0,A.jsx)(`span`,{children:`Total events`})]}),(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.distinctAggregates}),(0,A.jsx)(`span`,{children:`Aggregates`})]}),(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.eventTypes.length}),(0,A.jsx)(`span`,{children:`Event types`})]})]}),(0,A.jsx)(`div`,{className:`stats-chart`,children:i.throughput.map(e=>(0,A.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,A.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,A.jsx)(`div`,{className:`stats-bar-track`,children:(0,A.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...i.throughput.map(e=>e.count),1)*100)}%`}})}),(0,A.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,A.jsxs)(`div`,{className:`stats-distribution`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h4`,{children:`Event Types`}),i.eventTypes.map(e=>(0,A.jsxs)(`div`,{className:`stats-list-row`,children:[(0,A.jsx)(`span`,{children:e.type}),(0,A.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h4`,{children:`Aggregate Types`}),i.aggregateTypes.map(e=>(0,A.jsxs)(`div`,{className:`stats-list-row`,children:[(0,A.jsx)(`span`,{children:e.type}),(0,A.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Ma({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenHome:i,onOpenStats:a}){let[o,s]=(0,k.useState)(``),[c,l]=(0,k.useState)(0),[u,d]=(0,k.useState)(null),{data:f=[]}=j({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>ji(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,k.useEffect)(()=>{e?(l(0),d(document.activeElement instanceof HTMLElement?document.activeElement:null)):(s(``),u?.focus())},[e,u]);let p=(0,k.useMemo)(()=>{let e=[{id:`home`,label:`Go to main page`,action:i},{id:`stats`,label:`Go to statistics panel`,action:a}],t=f.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&f.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[f,i,a,r,o]);return(0,k.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(p.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),p[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[p,n,e,c]),e?(0,A.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,A.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,"aria-describedby":`command-palette-help`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`p`,{id:`command-palette-help`,className:`sr-only`,children:`Search aggregates, return to the main page, or open statistics. Use arrow keys to move and Enter to confirm.`}),(0,A.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,A.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,"aria-label":`Command results`,children:[p.map((e,t)=>(0,A.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),p.length===0&&(0,A.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function Na({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,k.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Pa(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Fa(e){return e.toLowerCase()===`ready`}function Ia(){let e=[6,12,8,16,10,14,7,11,15,9];return(0,A.jsx)(`div`,{className:`mini-wave`,"aria-hidden":!0,children:e.map((e,t)=>(0,A.jsx)(`div`,{className:`mini-wave-bar`,style:{height:e,animationDelay:`${t*.1}s`}},t))})}function La({isUp:e,selectedSource:t,fallbackCount:n}){let[r,i]=(0,k.useState)(0),[a,o]=(0,k.useState)(n),s=(0,k.useRef)(null);(0,k.useEffect)(()=>{let e=Date.now();return s.current=setInterval(()=>{i(Math.floor((Date.now()-e)/1e3))},1e3),()=>{s.current&&clearInterval(s.current)}},[]),(0,k.useEffect)(()=>{o(n)},[n]),(0,k.useEffect)(()=>{let e=!1,r=()=>{Fi(500,t||null).then(t=>{e||o(t.length)}).catch(()=>{!e&&n!=null&&o(n)})};r();let i=setInterval(r,15e3);return()=>{e=!0,clearInterval(i)}},[n,t]);let c=e=>{let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t}h ${n}m`:n>0?`${n}m ${r}s`:`${r}s`};return(0,A.jsxs)(`div`,{className:`conn-stats`,"aria-label":`Connection metrics`,children:[(0,A.jsx)(Ia,{}),(0,A.jsxs)(`div`,{className:`conn-stat`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`API`}),(0,A.jsx)(`span`,{className:`conn-stat-value ${e?`green`:`amber`}`,children:e?`Healthy`:`Down`})]}),(0,A.jsxs)(`div`,{className:`conn-stat conn-stat--metric`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`Events`}),(0,A.jsx)(`span`,{className:`conn-stat-value`,children:a??`...`})]}),(0,A.jsxs)(`div`,{className:`conn-stat`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`Uptime`}),(0,A.jsx)(`span`,{className:`conn-stat-value green conn-stat-value--uptime`,children:c(r)})]})]})}function Ra(){let[e,t]=(0,k.useState)(`state`),[n,r]=(0,k.useState)(null),[i,a]=(0,k.useState)(null),[o,s]=(0,k.useState)(null),[c,l]=(0,k.useState)(`changes`),[u,d]=(0,k.useState)(``),[f,p]=(0,k.useState)(window.location.hash||``),[m,h]=(0,k.useState)(!1),[g,_]=(0,k.useState)(!1);(0,k.useEffect)(()=>{let e=()=>p(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,k.useEffect)(()=>{f===`#/plugins`&&(window.location.hash=`#/timeline`)},[f]),(0,k.useEffect)(()=>{let e=e=>{let t=e.detail;t&&l(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,k.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`panel`),f=e.get(`source`);n&&r(n),i&&a(Number(i)),o&&s(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&l(c),(u===`replay`||u===`state`)&&t(u),f&&d(f)},[]),(0,k.useEffect)(()=>{let t=new URLSearchParams(window.location.search);n?t.set(`aggregateId`,n):t.delete(`aggregateId`),i==null?t.delete(`seq`):t.set(`seq`,String(i)),o==null?t.delete(`compare`):t.set(`compare`,String(o)),t.set(`tab`,c),t.set(`panel`,e),u?t.set(`source`,u):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[e,c,o,n,i,u]);let{data:v}=j({queryKey:[`health`],queryFn:R,refetchInterval:3e4}),{data:y=[]}=j({queryKey:[`datasources`],queryFn:Ii,staleTime:1e4}),{data:b=[]}=j({queryKey:[`plugins`],queryFn:Li,staleTime:1e4}),{data:x=[]}=$i(n??``,u||null),{data:S}=j({queryKey:[`timeline-summary`,n,u||`default`],queryFn:()=>Mi(n,500,0,u||null,`metadata`),enabled:!!n,staleTime:3e4}),C=v?.status===`UP`,w=f===`#/stats`,ee=y.filter(e=>Pa(e.status)).length,te=b.filter(e=>Pa(e.lifecycle)).length,ne=y.length-ee+(b.length-te),T=e=>{r(e),a(null),s(null),t(`state`),window.location.hash=`#/timeline`},re=()=>{window.location.hash=`#/timeline`};return(0,A.jsxs)(`div`,{className:`app`,children:[(0,A.jsx)(Na,{paletteOpen:g,onOpenPalette:()=>_(!0),onClosePalette:()=>_(!1)}),(0,A.jsx)(Ma,{open:g,selectedSource:u||null,onClose:()=>_(!1),onSelectAggregate:T,onOpenHome:re,onOpenStats:()=>{window.location.hash=`#/stats`}}),(0,A.jsxs)(`header`,{className:`app-header`,children:[(0,A.jsx)(`div`,{className:`brand`,children:(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,A.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,A.jsxs)(`div`,{className:`header-center`,children:[Di()&&(0,A.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,A.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,A.jsxs)(`div`,{className:`header-actions`,children:[(0,A.jsx)(La,{isUp:C,selectedSource:u,fallbackCount:S?.totalEvents??null}),(0,A.jsxs)(`div`,{className:`header-status`,children:[(0,A.jsx)(`span`,{className:`dot ${C?`dot-green`:`dot-red`}`}),(0,A.jsx)(`span`,{className:`status-text ${C?``:`offline`}`,children:C?`Connected`:v?.status??`Connecting`})]})]})]}),(0,A.jsxs)(`aside`,{className:`workspace-dock${m?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,A.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!m,children:[(0,A.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,A.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,A.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,A.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:u,onChange:e=>{d(e.target.value),a(null),s(null)},children:[(0,A.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),y.map(e=>(0,A.jsxs)(`option`,{value:e.id,disabled:!Fa(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,A.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Datasources Healthy`}),(0,A.jsxs)(`strong`,{children:[ee,`/`,y.length||0]})]}),(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Plugins Healthy`}),(0,A.jsxs)(`strong`,{children:[te,`/`,b.length||0]})]}),(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Issues`}),(0,A.jsx)(`strong`,{children:ne})]})]})]}),(0,A.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>h(e=>!e),"aria-expanded":m,"aria-controls":`workspace-dock-panel`,children:(0,A.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:m?`>`:`<`})})]}),(0,A.jsx)(`main`,{className:`app-main`,role:`main`,"aria-label":`EventLens workspace`,children:(0,A.jsxs)(`div`,{className:`workspace-content`,children:[!w&&(0,A.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,A.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,A.jsx)(zi,{onSelect:T,source:u||null,selectedValue:n}),n&&(0,A.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,A.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:n}),u?(0,A.jsxs)(`span`,{children:[` on `,u]}):(0,A.jsx)(`span`,{children:` on primary datasource`}),o!=null&&(0,A.jsxs)(`span`,{children:[` comparing with seq #`,o]}),(0,A.jsxs)(`span`,{className:`sr-only`,"aria-live":`polite`,children:[`Current panel `,e]}),(0,A.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{r(null),a(null),s(null)},children:`× clear`})]})]}),w?(0,A.jsx)(ja,{source:u||null,onBack:re}):(0,A.jsxs)(A.Fragment,{children:[n&&(0,A.jsx)(Qi,{aggregateId:n,selectedSequence:i,compareSequence:o,onSelectEvent:e=>{a(e),t(`state`)},onSelectCompare:s,source:u||null}),n&&i!==null&&(0,A.jsx)(sa,{aggregateId:n,sequence:i,compareSequence:o,activeTab:c,onTabChange:e=>{l(e),t(`state`)},active:e===`state`,onActivate:()=>t(`state`),source:u||null}),n&&x.length>0&&(0,A.jsx)(ka,{transitions:x,selectedSequence:i,compareSequence:o,onSelectSequence:e=>{a(e),t(`replay`)},onClearCompare:()=>s(null),active:e===`replay`,onActivate:()=>t(`replay`)}),(0,A.jsxs)(`div`,{className:`bottom-grid`,children:[(0,A.jsx)(_a,{source:u||null,onSelectAggregate:T}),(0,A.jsx)(Ta,{source:u||null,onSelectAggregate:T})]}),n&&S&&(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,A.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[S.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,A.jsx)(Da,{})]})}var za=class extends k.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,A.jsx)(`div`,{className:`app`,children:(0,A.jsx)(`main`,{className:`app-main`,children:(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Ba=new Xe({defaultOptions:{queries:{staleTime:3e4,retry:2}}});si.createRoot(document.getElementById(`root`)).render((0,A.jsx)(k.StrictMode,{children:(0,A.jsx)(tt,{client:Ba,children:(0,A.jsx)(da,{children:(0,A.jsx)(za,{children:(0,A.jsx)(Ra,{})})})})})); \ No newline at end of file +`+n):e.stack=n}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=Er(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&ei.assertOptions(n,{silentJSONParsing:F.transitional(F.boolean),forcedJSONParsing:F.transitional(F.boolean),clarifyTimeoutError:F.transitional(F.boolean),legacyInterceptorReqResOrdering:F.transitional(F.boolean)},!1),r!=null&&(N.isFunction(r)?t.paramsSerializer={serialize:r}:ei.assertOptions(r,{encode:F.function,serialize:F.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),ei.assertOptions(t,{baseUrl:F.spelling(`baseURL`),withXsrfToken:F.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&N.merge(i.common,i[t.method]);i&&N.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=lr.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||Rn;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Yr.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new fr(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function ri(e){return function(t){return e.apply(null,t)}}function ii(e){return N.isObject(e)&&e.isAxiosError===!0}var ai={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ai).forEach(([e,t])=>{ai[t]=e});function oi(e){let t=new ti(e),n=ht(ti.prototype.request,t);return N.extend(n,ti.prototype,t,{allOwnKeys:!0}),N.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return oi(Er(e,t))},n}var I=oi(Qn);I.Axios=ti,I.CanceledError=fr,I.CancelToken=ni,I.isCancel=dr,I.VERSION=Xr,I.toFormData=jn,I.AxiosError=P,I.Cancel=I.CanceledError,I.all=function(e){return Promise.all(e)},I.spread=ri,I.isAxiosError=ii,I.mergeConfig=Er,I.AxiosHeaders=lr,I.formToJSON=e=>Xn(N.isHTMLForm(e)?new FormData(e):e),I.getAdapter=qr.getAdapter,I.HttpStatusCode=ai,I.default=I;var si=l(_()),ci=`order-demo-001`;function li(e,t,n,r,i,a){return{eventId:e,aggregateId:ci,aggregateType:`ORDER`,sequenceNumber:t,eventType:n,payload:a,metadata:JSON.stringify({source:`demo`,correlationId:`corr-demo-${t}`}),timestamp:r,globalPosition:i}}function ui(){let e=[],t=Date.parse(`2025-01-15T08:00:00.000Z`);for(let n=1;n<=100;n++){let r=new Date(t+n*45e3).toISOString(),i=5e4+n,a,o;if(n===1)a=`ORDER_PLACED`,o={customerId:`cust-77`,channel:`web`,status:`PENDING`,totalCents:0,itemCount:0};else if(n>=2&&n<=48){a=`LINE_ITEM_ADDED`;let e=350+n*73%1200;o={sku:`SKU-${String(1e4+n*17).slice(-4)}`,qty:n%4+1,lineTotalCents:e,lineIndex:n-1}}else if(n>=49&&n<=58)a=`PAYMENT_PROGRESS`,o={paymentId:`pay-chunk-${n}`,amountCents:1500+n*120,balanceCents:Math.max(0,48e3-n*700)};else if(n>=59&&n<=72){let e=[`inventory`,`fraud_check`,`address_verify`,`manual_review`,`carrier_delay`];a=`FULFILLMENT_BLOCKED`,o={reason:e[n%e.length],caseId:`CASE-${n}`,retryAfterMinutes:15+n%45}}else n>=73&&n<=88?(a=`SHIPMENT_EVENT`,o={leg:n-72,carrier:n%3==0?`FAST`:n%3==1?`ECONOMY`:`OVERNIGHT`,status:`IN_TRANSIT`,trackingToken:`trk-${n}${(n*7919).toString(36)}`}):n>=89&&n<=99?(a=`NOTE_APPENDED`,o={author:`agent-${n%6+1}`,noteId:`n-${n}`,preview:`Ops note #${n}: SLA watch / customer ping`}):(a=`REFUND_ISSUED`,o={refundCents:88e3,balanceCents:-12500,reason:`bulk_settlement_adjustment`});e.push(li(`evt-demo-${n}`,n,a,r,i,JSON.stringify(o)))}return e}var di=ui();function fi(e){return[{code:`NEGATIVE_BALANCE`,severity:`HIGH`,description:`Ledger balance dropped below zero after refund batch`},{code:`REFUND_EXCEEDS_CAPTURE`,severity:`CRITICAL`,description:`Cumulative refunds exceed captured payments for this aggregate`},{code:`DUPLICATE_PAYMENT_CHUNK`,severity:`MEDIUM`,description:`Two payment chunks share the same window and amount fingerprint`},{code:`LINE_ITEM_PRICE_OUTLIER`,severity:`LOW`,description:`Line total deviates >3σ from cohort for this SKU family`},{code:`FULFILLMENT_STALL`,severity:`HIGH`,description:`Order blocked in fulfillment longer than SLA for channel`},{code:`CARRIER_MISMATCH`,severity:`MEDIUM`,description:`Shipment leg carrier differs from preferred routing profile`},{code:`MANUAL_REVIEW_BACKLOG`,severity:`LOW`,description:`Case reopened multiple times without resolution`},{code:`VELOCITY_SPIKE`,severity:`HIGH`,description:`Event rate on this aggregate exceeded rolling baseline`},{code:`ADDRESS_VERIFY_LOOP`,severity:`MEDIUM`,description:`Address verification failed three times with same payload hash`},{code:`INVENTORY_HOLD`,severity:`MEDIUM`,description:`Inventory hold exceeded expected release window`},{code:`FRAUD_SCORE_EDGE`,severity:`LOW`,description:`Fraud score landed in manual-review gray band`},{code:`DISCOUNT_STACK`,severity:`LOW`,description:`Multiple discount signals present without explicit approval event`},{code:`SHIPMENT_GAP`,severity:`HIGH`,description:`Missing scan between expected hub handoffs`},{code:`NOTE_SPAM`,severity:`LOW`,description:`Unusually high operator notes density in short interval`},{code:`PAYMENT_PARTIAL_CLUSTER`,severity:`MEDIUM`,description:`Several partial captures without closing settlement event`},{code:`SKU_QUANTITY_ANOMALY`,severity:`MEDIUM`,description:`Quantity pattern inconsistent with historical order curve`},{code:`CASE_ESCALATION`,severity:`HIGH`,description:`Support case escalated without prior tier-1 closure`},{code:`TRACKING_TOKEN_REUSE`,severity:`CRITICAL`,description:`Tracking token collision across two concurrent legs`},{code:`SLA_BREACH_RISK`,severity:`HIGH`,description:`Projected delivery crosses committed SLA if delay persists`},{code:`SETTLEMENT_BATCH_DRIFT`,severity:`CRITICAL`,description:`Settlement batch totals diverge from summed payment chunks`}].map((t,n)=>{let r=Math.min(100,5+n*5),i=e.find(e=>e.sequenceNumber===r)??e[e.length-1];return{code:t.code,description:t.description,severity:t.severity,aggregateId:ci,atSequence:r,triggeringEventType:i.eventType,timestamp:i.timestamp,stateAtAnomaly:{demoIndex:n+1,atSequence:r,code:t.code}}})}var pi=fi(di);function mi(e,t){let n={...e},r={};try{r=JSON.parse(t.payload||`{}`)}catch{}n._version=t.sequenceNumber,n._lastEventType=t.eventType,n._lastUpdated=t.timestamp;let i=t.eventType.toLowerCase();return i.includes(`created`)||i.includes(`opened`)||i.includes(`placed`)||i.includes(`submitted`)||(i.includes(`deleted`)||i.includes(`closed`)||i.includes(`cancelled`)||i.includes(`rejected`))&&(n.status=`DELETED`),Object.assign(n,r),n}function hi(e,t){let n={};for(let r of Object.keys(t)){let i=e[r],a=t[r];JSON.stringify(i)!==JSON.stringify(a)&&(n[r]={oldValue:i,newValue:a})}for(let r of Object.keys(e))r in t||(n[r]={oldValue:e[r],newValue:void 0});return n}function gi(e){let t=[],n={};for(let r of e){let e={...n};n=mi(n,r);let i={...n};t.push({event:r,stateBefore:e,stateAfter:i,diff:hi(e,i)})}return t}var _i=gi(di);function vi(e){let t=e.trim().toLowerCase();return t.length<2?!1:t.includes(`demo`)||`order-demo-001`.includes(t)}function yi(e){return vi(e)?[ci]:[]}function bi(e){let t=Math.min(Math.max(e,1),500);return[...di].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,t)}function xi(e,t,n){if(e!==`order-demo-001`)return{events:[],totalEvents:0};let r=di.length,i=Math.max(0,n),a=Math.min(Math.max(t,1),1e3);return i>=r?{events:[],totalEvents:r}:{events:di.slice(i,i+a),totalEvents:r}}function Si(e){return e===`order-demo-001`?_i:[]}function Ci(e){let t=Math.min(Math.max(e,1),500);return pi.slice(0,t)}function wi(){return[...di].sort((e,t)=>t.globalPosition-e.globalPosition).slice(0,40)}function Ti(){return{status:`UP`,version:`demo`,demo:!0}}function Ei(e=1,t=24){let n=Math.max(e,1)*60*60*1e3,r=[...di].sort((e,t)=>Date.parse(e.timestamp)-Date.parse(t.timestamp)),i=new Map,a=new Map,o=new Map;for(let e of r){let t=new Date(Math.floor(Date.parse(e.timestamp)/n)*n).toISOString();i.set(t,(i.get(t)??0)+1),a.set(e.eventType,(a.get(e.eventType)??0)+1),o.set(e.aggregateType,(o.get(e.aggregateType)??0)+1)}return{totalEvents:di.length,distinctAggregates:1,eventTypes:[...a.entries()].map(([e,t])=>({type:e,count:t})),aggregateTypes:[...o.entries()].map(([e,t])=>({type:e,count:t})),throughput:[...i.entries()].slice(-Math.max(t,1)).map(([e,t])=>({bucket:e,count:t})),available:!0,message:null}}function Di(){return!1}var Oi=I.create({baseURL:`/api`});function ki(e){return new Promise(t=>{setTimeout(t,e)})}function Ai(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}source=${encodeURIComponent(t)}`:e}var ji=async(e,t=20,n)=>{let r=Ai(`/aggregates/search?q=${encodeURIComponent(e)}&limit=${t}`,n);if(Di()){await ki(40);let n=yi(e);try{let e=await Oi.get(r);return[...new Set([...n,...e.data])].slice(0,t)}catch{return n}}return Oi.get(r).then(e=>e.data)},Mi=async(e,t=500,n=0,r,i=`full`)=>{if(Di()&&e===`order-demo-001`)return await ki(50),xi(e,t,n);let a=Ai(`/aggregates/${e}/timeline?limit=${t}&offset=${n}&fields=${i}`,r);return Oi.get(a).then(e=>e.data)},Ni=async(e,t)=>Di()&&e===`order-demo-001`?(await ki(50),Si(e)):Oi.get(Ai(`/aggregates/${e}/transitions`,t)).then(e=>e.data),Pi=async(e=100,t)=>Di()?(await ki(45),Ci(e)):Oi.get(Ai(`/anomalies/recent?limit=${e}`,t)).then(e=>e.data),Fi=async(e=50,t)=>Di()?(await ki(35),bi(e)):Oi.get(Ai(`/events/recent?limit=${e}`,t)).then(e=>e.data),L=async(e,t=1,n=24)=>{if(Di())return await ki(30),Ei(t,n);let r=Ai(`/v1/statistics?bucketHours=${t}&maxBuckets=${n}`,e);return Oi.get(r).then(e=>e.data)},R=async()=>Di()?(await ki(20),Ti()):Oi.get(`/health`).then(e=>e.data),Ii=async()=>Di()?(await ki(20),[{id:`demo-primary`,displayName:`Demo Primary`,status:`ready`,healthMessage:`Frontend demo datasource`,capabilities:[`timeline`,`replay`,`statistics`]}]):Oi.get(`/v1/datasources`).then(e=>e.data),Li=async()=>Di()?(await ki(20),[{instanceId:`demo-source`,typeId:`demo`,displayName:`Demo Source Plugin`,pluginType:`EVENT_SOURCE`,lifecycle:`ready`,health:{state:`up`,message:`Frontend demo plugin`},lastHealthCheck:new Date().toISOString(),failureReason:null}]):Oi.get(`/v1/plugins`).then(e=>e.data);function Ri(e,t){let[n,r]=(0,k.useState)(e);return(0,k.useEffect)(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n}function zi({onSelect:e,source:t,selectedValue:n}){let[r,i]=(0,k.useState)(``),[a,o]=(0,k.useState)(!1),s=(0,k.useRef)(null),c=Ri(r,300),{data:l=[]}=j({queryKey:[`search`,c,t??`default`],queryFn:()=>ji(c,20,t),enabled:c.length>=2,staleTime:5e3});(0,k.useEffect)(()=>{i(n??``)},[n]),(0,k.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let u=(0,k.useRef)(null),d=(0,k.useCallback)(()=>{u.current?.focus(),u.current?.select()},[]);(0,k.useEffect)(()=>{let e=document.getElementById(`aggregate-search`);return e?.addEventListener(`focus`,d),()=>e?.removeEventListener(`focus`,d)},[d]);let f=t=>{i(t),o(!1),e(t)};return(0,A.jsxs)(`div`,{className:`search-wrapper`,ref:s,children:[(0,A.jsx)(`span`,{className:`search-icon`,children:`??`}),(0,A.jsx)(`input`,{id:`aggregate-search`,ref:u,type:`text`,className:`search-input`,placeholder:`Search by aggregate ID (e.g. UUID or stream key)`,value:r,onChange:e=>{i(e.target.value),o(!0)},onFocus:()=>r.length>=2&&o(!0),onKeyDown:e=>{e.key===`Enter`&&r.trim()&&f(r.trim()),e.key===`Escape`&&o(!1)},autoComplete:`off`,"aria-controls":`aggregate-search-results`,"aria-autocomplete":`list`}),a&&l.length>0&&(0,A.jsx)(`div`,{className:`search-results`,role:`listbox`,id:`aggregate-search-results`,children:l.map(e=>(0,A.jsxs)(`button`,{type:`button`,className:`search-result-item`,onClick:()=>f(e),role:`option`,children:[(0,A.jsx)(`span`,{className:`search-result-chevron`,"aria-hidden":!0,children:`?`}),(0,A.jsxs)(`span`,{className:`search-result-body`,children:[(0,A.jsx)(`span`,{className:`search-result-label`,children:`ID`}),(0,A.jsx)(`span`,{className:`search-result-colon`,children:`:`}),(0,A.jsx)(`span`,{className:`search-result-value`,children:e})]})]},e))})]})}function Bi(e,t){return j({queryKey:[`timeline`,e,t??`default`,`metadata`],queryFn:()=>Mi(e,500,0,t,`metadata`),enabled:!!e})}function Vi(e){if(typeof e==`number`)return Number.isNaN(e)?new Date:e<0xe8d4a51000?new Date(e*1e3):new Date(e);let t=String(e).trim();if(!t)return new Date;if(t.includes(`T`)||/^\d{4}-\d{2}-\d{2}/.test(t)){let e=Date.parse(t);if(!Number.isNaN(e))return new Date(e)}let n=parseFloat(t);return Number.isNaN(n)?new Date:n<0xe8d4a51000?new Date(n*1e3):new Date(n)}function Hi(e){let t=[],n=0;for(;n=4)t.push({kind:`group`,eventType:r,items:e.slice(n,i),startIndex:n});else for(let r=n;re.sequenceNumber===n),o=t===e;r.push({kind:`group`,key:`group-${e}`,eventType:i.eventType,items:i.items,startIndex:i.startIndex,expanded:o,containsSelection:a}),o&&r.push(...i.items.map((t,n)=>({kind:`group-item`,key:`group-item-${t.sequenceNumber}`,event:t,stepNumber:i.startIndex+n+1,parentKey:e})))}return r}function Gi(e,t){return e===t?null:t}var Ki=[1,6,24,168];function qi(e){let t=e.toLowerCase();return t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`created`:t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`deleted`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`completed`:t.includes(`failed`)||t.includes(`error`)||t.includes(`blocked`)?`failed`:t.includes(`transfer`)?`transfer`:`default`}function Ji(e){switch(e.kind){case`single`:case`group-item`:return e.event.sequenceNumber;case`group`:return e.items[0]?.sequenceNumber??0}}function Yi(e,t){return`Event ${e}, sequence ${t.sequenceNumber}, ${t.eventType}`}function Xi(e,t){return t==null?!1:e.kind===`single`?e.event.sequenceNumber===t:e.items.some(e=>e.sequenceNumber===t)}function Zi(e,t,n,r,i){let a=e.event,o=t===a.sequenceNumber,s=n===a.sequenceNumber,c=e.kind===`group-item`?` timeline-step-compact`:``;return(0,A.jsxs)(`button`,{type:`button`,className:`timeline-step timeline-step-${qi(a.eventType)} ${o?`active`:``} ${s?`timeline-step-compare`:``}${c}`,onClick:e=>{e.shiftKey&&i?i(Gi(n,a.sequenceNumber)):r(a.sequenceNumber)},"aria-current":o?`step`:void 0,"aria-label":Yi(e.stepNumber,a),children:[(0,A.jsxs)(`span`,{className:`timeline-step-badge`,children:[`Event `,e.stepNumber]}),(0,A.jsxs)(`span`,{className:`timeline-step-seq`,children:[`seq #`,a.sequenceNumber]}),(0,A.jsx)(`span`,{className:`timeline-step-type`,children:a.eventType}),(0,A.jsx)(`span`,{className:`timeline-step-seq`,children:Vi(a.timestamp).toLocaleTimeString()})]},e.key)}function Qi({aggregateId:e,selectedSequence:t,compareSequence:n,onSelectEvent:r,onSelectCompare:i,source:a}){let{data:o,isLoading:s}=Bi(e,a),[c,l]=(0,k.useState)(``),[u,d]=(0,k.useState)(``),[f,p]=(0,k.useState)(`all`),[m,h]=(0,k.useState)(null),g=(0,k.useRef)(null),_=o?.events??[],v=o?.totalEvents??0,y=(0,k.useMemo)(()=>{let e=_;if(c&&(e=e.filter(e=>e.eventType===c)),f!==`all`&&e.length>0){let t=Vi(e[e.length-1].timestamp).getTime()-f*60*60*1e3;e=e.filter(e=>Vi(e.timestamp).getTime()>=t)}return e},[_,c,f]),b=(0,k.useMemo)(()=>Hi(y),[y]),x=(0,k.useMemo)(()=>[...new Set(_.map(e=>e.eventType))].sort(),[_]);(0,k.useEffect)(()=>{if(t!=null){for(let e of b)if(e.kind===`group`&&e.items.some(e=>e.sequenceNumber===t)){h(Ui(e.startIndex,e.items.length));return}h(null)}},[b,t]);let S=(0,k.useMemo)(()=>Wi(b,m,t),[m,b,t]),C=(0,k.useMemo)(()=>t==null?-1:S.findIndex(e=>e.kind===`group`?e.items.some(e=>e.sequenceNumber===t):e.event.sequenceNumber===t),[S,t]);if((0,k.useEffect)(()=>{let e=e=>{let t=e.detail;if(S.length&&(t<0||t>0)){let e=C>=0?C:0;r(Ji(S[Math.max(0,Math.min(S.length-1,e+t))]))}};return window.addEventListener(`eventlens:timeline-step`,e),()=>window.removeEventListener(`eventlens:timeline-step`,e)},[r,S,C]),(0,k.useEffect)(()=>{let e=e=>{let n=e.target;if(!(n&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(n.tagName)||!S.length)&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&e.shiftKey){e.preventDefault();let n=e.key===`ArrowLeft`?-1:1,i=S.filter(e=>e.kind===`group`);if(!i.length)return;let a=i.findIndex(e=>t!=null&&e.items.some(e=>e.sequenceNumber===t));r(i[a>=0?Math.max(0,Math.min(i.length-1,a+n)):n>0?0:i.length-1].items[0].sequenceNumber)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,S,t]),(0,k.useEffect)(()=>{if(!g.current||t==null)return;let e=g.current.querySelector(`[aria-current="step"]`);if(!e)return;let n=g.current.getBoundingClientRect(),r=e.getBoundingClientRect(),i=g.current.scrollLeft,a=i+(r.left-n.left),o=a+r.width,s=i,c=i+g.current.clientWidth;ac-24&&g.current.scrollTo({left:o-g.current.clientWidth+24,behavior:`smooth`})},[m,t]),s)return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,A.jsx)(`div`,{className:`skeleton`,style:{height:160}})]});if(!_.length)return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Timeline`}),(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`},children:`No events found.`})]});let w=y[0]?.sequenceNumber??0,ee=y[y.length-1]?.sequenceNumber??0;return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`timeline-header-row`,children:[(0,A.jsxs)(`div`,{className:`card-title`,style:{marginBottom:0},children:[`Event Sequence`,(0,A.jsxs)(`span`,{className:`timeline-count-pill`,children:[y.length,` / `,v,` events`]})]}),(0,A.jsx)(`div`,{className:`timeline-jump-group`,children:(0,A.jsx)(`input`,{className:`timeline-jump-input`,type:`number`,placeholder:`Jump to seq`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{if(e.key===`Enter`){let e=Number(u);y.some(t=>t.sequenceNumber===e)&&(r(e),d(``))}},"aria-label":`Jump to sequence number`})})]}),(0,A.jsx)(`p`,{className:`timeline-hint`,children:`Scroll the rail horizontally from left to right. Repeated event runs collapse into grouped cards; click a group to open the full strip below.`}),(0,A.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Filter by event type`,children:[(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${c?``:`active`}`,onClick:()=>l(``),children:`All`}),x.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${c===e?`active`:``}`,onClick:()=>l(t=>t===e?``:e),children:e},e))]}),(0,A.jsxs)(`div`,{className:`timeline-filter-chips`,role:`group`,"aria-label":`Zoom range`,children:[(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${f===`all`?`active`:``}`,onClick:()=>p(`all`),children:`All`}),Ki.map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${f===e?`active`:``}`,onClick:()=>p(e),children:e>=24?`${e/24}d`:`${e}h`},e))]}),(0,A.jsx)(`div`,{className:`timeline-rail`,children:(0,A.jsx)(`div`,{ref:g,className:`timeline-stepper`,children:(0,A.jsx)(`div`,{className:`timeline-stepper-track`,children:b.map((e,a)=>{let o=ah(e=>e===s?null:s),"aria-expanded":c,children:[(0,A.jsxs)(`span`,{className:`timeline-group-chip-top`,children:[(0,A.jsxs)(`span`,{className:`timeline-group-count`,children:[`x`,e.items.length]}),(0,A.jsx)(`span`,{className:`timeline-group-chevron`,"aria-hidden":!0,children:c?`v`:`>`})]}),(0,A.jsx)(`span`,{className:`timeline-group-type`,children:e.eventType}),(0,A.jsxs)(`span`,{className:`timeline-group-range`,children:[`steps `,e.startIndex+1,`-`,e.startIndex+e.items.length,` seq #`,e.items[0].sequenceNumber,`-#`,e.items[e.items.length-1].sequenceNumber]})]}),o,c&&(0,A.jsxs)(`div`,{className:`timeline-expanded-deck`,children:[(0,A.jsxs)(`div`,{className:`timeline-expanded-head`,children:[(0,A.jsx)(`div`,{className:`timeline-expanded-title`,children:e.eventType}),(0,A.jsxs)(`div`,{className:`timeline-group-range`,children:[`Expanded run of `,e.items.length,` events`]}),(0,A.jsx)(`button`,{type:`button`,className:`timeline-collapse-btn`,onClick:()=>h(null),children:`Collapse`})]}),(0,A.jsx)(`div`,{className:`timeline-stepper-track`,children:e.items.map((a,o)=>{let c={kind:`group-item`,key:`group-item-${a.sequenceNumber}`,event:a,stepNumber:e.startIndex+o+1,parentKey:s};return(0,A.jsxs)(`div`,{className:`timeline-track-item`,children:[Zi(c,t,n,r,i),or(Number(e.target.value)),"aria-label":`Scrub event sequence`}),(0,A.jsxs)(`div`,{className:`timeline-info`,children:[(0,A.jsxs)(`span`,{className:`timeline-info-edge`,children:[`First seq #`,w]}),(0,A.jsx)(`span`,{className:`timeline-info-center`,children:t==null?`Select an event`:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`strong`,{children:[`Selected seq #`,t]}),n!=null&&` compared with #${n}`,(0,A.jsxs)(`span`,{className:`timeline-info-muted`,children:[` across `,b.length,` visible segments`]})]})}),(0,A.jsxs)(`span`,{className:`timeline-info-edge`,children:[`Last seq #`,ee]})]})]})}function $i(e,t){return j({queryKey:[`transitions`,e,t??`default`],queryFn:()=>Ni(e,t),enabled:!!e})}function ea(e,t,n=!0){let[r,i]=(0,k.useState)([]),[a,o]=(0,k.useState)(0),[s,c]=(0,k.useState)(!1),l=(0,k.useMemo)(()=>`${Date.now()}-${Math.random()}`,[e,t]);return(0,k.useEffect)(()=>{if(!n){i([]),o(0),c(!1);return}let r=new Worker(new URL(`/assets/json-diff.worker-DTKMBXSt.js`,``+import.meta.url),{type:`module`});c(!0);let a=e=>{e.data.requestId===l&&(i(e.data.patches),o(e.data.durationMs),c(!1))};return r.addEventListener(`message`,a),r.postMessage({left:e,right:t,requestId:l}),()=>{r.removeEventListener(`message`,a),r.terminate()}},[n,e,t,l]),{patches:r,durationMs:a,loading:s}}function ta({diff:e,patches:t,title:n=`Changes`}){let r=t&&t.length>0?t.map(e=>({field:e.path,oldValue:e.oldValue,newValue:e.newValue,kind:e.type})):Object.entries(e??{}).map(([e,t])=>({field:e,oldValue:t.oldValue,newValue:t.newValue,kind:`changed`}));return r.length?(0,A.jsxs)(`div`,{className:`diff-panel`,children:[(0,A.jsx)(`div`,{className:`diff-toolbar`,children:(0,A.jsxs)(`div`,{className:`diff-toolbar-title`,children:[n,(0,A.jsxs)(`span`,{className:`diff-count-badge`,"aria-live":`polite`,children:[r.length,` `,r.length===1?`change`:`changes`]})]})}),(0,A.jsx)(`div`,{className:`diff-body`,children:(0,A.jsx)(`div`,{className:`diff-scroll`,children:(0,A.jsxs)(`div`,{className:`diff-list diff-list-split`,children:[(0,A.jsxs)(`div`,{className:`diff-split-head`,children:[(0,A.jsx)(`span`,{className:`diff-split-label diff-split-old-label`,children:`Before`}),(0,A.jsx)(`span`,{className:`diff-split-label diff-split-new-label`,children:`After`})]}),r.map((e,t)=>(0,A.jsxs)(`div`,{className:`diff-split-row diff-split-row--${e.kind}`,children:[(0,A.jsx)(`span`,{className:`diff-line-no`,"aria-hidden":!0,children:t+1}),(0,A.jsxs)(`div`,{className:`diff-split-cells`,children:[(0,A.jsxs)(`div`,{className:`diff-split-cell diff-split-old`,children:[(0,A.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,A.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.oldValue)})]}),(0,A.jsxs)(`div`,{className:`diff-split-cell diff-split-new`,children:[(0,A.jsx)(`span`,{className:`diff-field`,children:e.field}),(0,A.jsx)(`span`,{className:`diff-cell-value`,children:JSON.stringify(e.newValue)})]})]})]},`${e.field}-${t}`))]})})})]}):null}function na({open:e,onToggle:t}){return(0,A.jsx)(`button`,{type:`button`,className:`json-tree-toggle`,onClick:e=>{e.stopPropagation(),t()},"aria-expanded":e,"aria-label":e?`Collapse`:`Expand`,children:e?`-`:`+`})}function ra({value:e}){return e===null?(0,A.jsx)(`span`,{className:`json-null`,children:`null`}):typeof e==`boolean`?(0,A.jsx)(`span`,{className:`json-boolean`,children:String(e)}):typeof e==`number`?(0,A.jsx)(`span`,{className:`json-number`,children:e}):(0,A.jsx)(`span`,{className:`json-string`,children:JSON.stringify(e)})}function ia({value:e,changedKeys:t}){return(0,A.jsx)(`div`,{className:`json-tree json-tree-root`,children:(0,A.jsx)(aa,{value:e,depth:0,changedKeys:t,keyPath:``})})}function aa({value:e,depth:t,propertyKey:n,changedKeys:r,keyPath:i=``}){let a=r&&n!==void 0&&r.has(n),o=r&&i&&[...r].some(e=>e.startsWith(i+`.`)),[s,c]=(0,k.useState)(r?t<3||!!a||!!o:t<3),l={paddingLeft:Math.min(t,12)*14},u=a?{background:`rgba(255, 170, 0, 0.12)`,borderRadius:3}:{};if(e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`)return(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(ra,{value:e})]});let d=e=>i?`${i}.${e}`:e;if(Array.isArray(e))return e.length===0?(0,A.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`[]`})]}):(0,A.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,A.jsx)(na,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`[`}),!s&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,e.length,` items `]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`]`})]})]}),s&&(0,A.jsxs)(A.Fragment,{children:[e.map((e,n)=>(0,A.jsx)(aa,{value:e,depth:t+1,changedKeys:r,keyPath:d(String(n))},n)),(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-punct`,children:`]`})})]})]});if(typeof e==`object`){let i=Object.entries(e);return i.length===0?(0,A.jsxs)(`div`,{className:`json-tree-line`,style:l,children:[n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`{}`})]}):(0,A.jsxs)(`div`,{className:`json-tree-branch`,children:[(0,A.jsxs)(`div`,{className:`json-tree-line${a?` json-tree-changed`:``}`,style:{...l,...u},children:[(0,A.jsx)(na,{open:s,onToggle:()=>c(e=>!e)}),n!==void 0&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-key`,children:[`"`,n,`"`]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`: `})]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`{`}),!s&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`span`,{className:`json-ellipsis`,children:[` `,i.length,` keys `]}),(0,A.jsx)(`span`,{className:`json-punct`,children:`}`})]})]}),s&&(0,A.jsxs)(A.Fragment,{children:[i.map(([e,n])=>(0,A.jsx)(aa,{value:n,depth:t+1,propertyKey:e,changedKeys:r,keyPath:d(e)},e)),(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-punct`,children:`}`})})]})]})}return(0,A.jsx)(`div`,{className:`json-tree-line`,style:l,children:(0,A.jsx)(`span`,{className:`json-unknown`,children:String(e)})})}var oa=[{id:`changes`,label:`Changes`},{id:`before-after`,label:`Before / After`},{id:`raw`,label:`Raw JSON`}];function sa({aggregateId:e,sequence:t,compareSequence:n,activeTab:r,onTabChange:i,active:a=!1,onActivate:o,source:s}){let{data:c=[],isLoading:l}=$i(e,s),[u,d]=(0,k.useState)(`changes`),f=r??u,p=e=>{d(e),i?.(e)},m=c.find(e=>e.event.sequenceNumber===t)??null,h=n==null?null:c.find(e=>e.event.sequenceNumber===n)??null,g=m!=null&&h!=null&&m.event.sequenceNumber!==h.event.sequenceNumber,_=g?h.stateAfter:m?.stateBefore,v=m?.stateAfter,{patches:y,loading:b,durationMs:x}=ea(_,v,g&&!!_&&!!v),S=(0,k.useMemo)(()=>g?new Set(y.map(e=>e.path.replace(/^\$\./,``).split(`.`)[0])):new Set(Object.keys(m?.diff??{})),[g,y,m?.diff]);return l?(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`State`}),(0,A.jsx)(`div`,{className:`skeleton`,style:{height:160}})]}):m?(0,A.jsxs)(`section`,{className:`card`,role:`region`,"aria-label":`State viewer`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,A.jsxs)(`div`,{className:`card-title`,children:[`State at Event #`,m.event.sequenceNumber,(0,A.jsx)(`span`,{className:`diff-count-badge`,children:m.event.eventType}),g&&(0,A.jsxs)(`span`,{className:`diff-count-badge`,children:[`Compared with #`,h?.event.sequenceNumber]}),g&&!b&&(0,A.jsxs)(`span`,{className:`diff-count-badge`,children:[`Worker `,x.toFixed(1),`ms`]})]}),(0,A.jsx)(`div`,{className:`state-tabs`,role:`tablist`,children:oa.map(e=>(0,A.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":f===e.id,className:`state-tab ${f===e.id?`active`:``}`,onClick:()=>p(e.id),children:e.label},e.id))}),(0,A.jsxs)(`div`,{className:`state-tab-content`,role:`tabpanel`,children:[f===`changes`&&(0,A.jsx)(`div`,{children:g?b?(0,A.jsx)(`div`,{className:`skeleton`,style:{height:120}}):(0,A.jsx)(ta,{patches:y,title:`Structural diff`}):m.diff&&Object.keys(m.diff).length>0?(0,A.jsx)(ta,{diff:m.diff}):(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`,marginTop:12,fontSize:13},children:`No field changes at this event.`})}),f===`before-after`&&(0,A.jsxs)(`div`,{className:`state-grid`,style:{marginTop:12},children:[(0,A.jsxs)(`div`,{className:`state-panel state-panel-before`,children:[(0,A.jsx)(`h4`,{children:g?`Event #${h?.event.sequenceNumber}`:`Before`}),(0,A.jsx)(ia,{value:_??{},changedKeys:S})]}),(0,A.jsxs)(`div`,{className:`state-panel state-panel-after`,children:[(0,A.jsx)(`h4`,{children:g?`Event #${m.event.sequenceNumber}`:`After`}),(0,A.jsx)(ia,{value:v??{},changedKeys:S})]})]}),f===`raw`&&(0,A.jsx)(`div`,{style:{marginTop:12},children:(0,A.jsx)(`div`,{className:`json-block`,style:{maxHeight:340},children:JSON.stringify(g?{leftEvent:h?.event,rightEvent:m.event,leftState:_,rightState:v}:m.event,null,2)})})]})]}):null}var z=1e3,ca=3e4;function la(e,t,n){let r=n?.enabled??!0,[i,a]=(0,k.useState)(()=>r?`connecting`:`connected`),o=(0,k.useRef)(null),s=(0,k.useRef)(t),c=(0,k.useRef)(z);return s.current=t,(0,k.useEffect)(()=>{if(!r)return a(`connected`),()=>{};let t=!1,n,i=()=>{if(t)return;let r=new WebSocket(`${window.location.protocol===`https:`?`wss`:`ws`}://${window.location.host}${e}`);o.current=r,r.onopen=()=>{c.current=z,a(`connected`)},r.onclose=()=>{if(a(`disconnected`),!t){let e=c.current;n=setTimeout(()=>{c.current=Math.min(e*2,ca),i()},e)}},r.onerror=()=>a(`disconnected`),r.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch{}}};return i(),()=>{t=!0,clearTimeout(n),o.current?.close()}},[e,r]),i}var ua=(0,k.createContext)(void 0);function da({children:e}){let[t,n]=(0,k.useState)([]),r=(0,k.useCallback)(e=>{let t=Date.now();n(n=>[...n,{id:t,message:e}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==t))},4e3)},[]);return(0,A.jsxs)(ua.Provider,{value:{notify:r},children:[e,(0,A.jsx)(`div`,{className:`toast-container`,children:t.map(e=>(0,A.jsx)(`div`,{className:`toast`,children:e.message},e.id))})]})}function fa(){let e=(0,k.useContext)(ua);if(!e)throw Error(`useToast must be used within ToastProvider`);return e}function pa(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`type-deleted`:t.includes(`withdrawn`)||t.includes(`debit`)?`type-withdrawn`:t.includes(`deposited`)||t.includes(`credit`)?`type-deposited`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`type-created`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)||t.includes(`assigned`)?`type-completed`:t.includes(`failed`)||t.includes(`error`)?`type-failed`:t.includes(`transfer`)?`type-transfer`:`type-default`}function ma(e){return pa(e)}var ha=100;function ga(e){let t=e.toLowerCase();return t.includes(`deleted`)||t.includes(`closed`)||t.includes(`cancelled`)||t.includes(`rejected`)?`✖`:t.includes(`withdrawn`)||t.includes(`debit`)?`↩`:t.includes(`deposited`)||t.includes(`credit`)?`↪`:t.includes(`created`)||t.includes(`opened`)||t.includes(`placed`)||t.includes(`submitted`)?`✦`:t.includes(`completed`)||t.includes(`resolved`)||t.includes(`accepted`)||t.includes(`approved`)?`✔`:t.includes(`failed`)||t.includes(`error`)?`⚠`:t.includes(`transfer`)?`⇄`:`◆`}function _a({source:e,onSelectAggregate:t}){return(0,A.jsx)(ba,{source:e,onSelectAggregate:t})}function va(e){return`type`in e&&e.type===`NO_LIVE_STREAM`}function ya(e){return e?`/ws/live?source=${encodeURIComponent(e)}`:`/ws/live`}function ba({source:e,onSelectAggregate:t}){let n=Di(),[r,i]=(0,k.useState)(()=>n?wi():[]),[a,o]=(0,k.useState)(!1),[s,c]=(0,k.useState)(null),l=(0,k.useRef)(null),u=(0,k.useRef)(a);u.current=a;let{notify:d}=fa();(0,k.useEffect)(()=>{c(null),i(n?wi():[])},[e,n]);let f=la(ya(e),e=>{if(va(e)){c(e.source),i([]);return}c(null),!u.current&&i(t=>[...t.slice(-(ha-1)),e])},{enabled:!n}),p=(0,k.useRef)(d);p.current=d;let m=(0,k.useRef)(0);return(0,k.useEffect)(()=>{n||(f===`disconnected`?(m.current++,m.current<=1&&p.current(`Live stream disconnected. Retrying…`)):f===`connected`&&(m.current=0))},[f,n]),(0,k.useEffect)(()=>{!a&&l.current&&(l.current.scrollTop=l.current.scrollHeight)},[r,a]),(0,k.useEffect)(()=>{let e=()=>o(e=>!e);return window.addEventListener(`eventlens:togglestream`,e),()=>window.removeEventListener(`eventlens:togglestream`,e)},[]),(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`live-header`,children:[(0,A.jsx)(`div`,{className:`card-title`,style:{marginBottom:0},children:`📡 Live Event Stream`}),(0,A.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,A.jsxs)(`div`,{className:`live-indicator`,children:[(0,A.jsx)(`span`,{className:`dot ${f===`connected`?`dot-green`:f===`connecting`?`dot-yellow`:`dot-red`}`}),(0,A.jsx)(`span`,{style:{color:f===`connected`?`var(--neon-green)`:`var(--text-muted)`,fontSize:11},children:f===`connected`?a?`Paused`:`Live`:f})]}),(0,A.jsx)(`button`,{className:`pause-btn`,onClick:()=>o(!a),children:a?`▶ Resume`:`⏸ Pause`})]})]}),(0,A.jsxs)(`div`,{className:`event-stream`,ref:l,children:[s&&(0,A.jsxs)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:[`Live stream not available for this source`,e?` (${e})`:s?` (${s})`:``,`.`]}),r.length===0&&(0,A.jsx)(`div`,{style:{color:`var(--text-muted)`,padding:`20px 0`,fontSize:12,fontFamily:`var(--font-mono)`},children:s?null:n?`Demo stream (static sample events)`:`Waiting for events…`}),r.map(e=>(0,A.jsxs)(`div`,{className:`event-row ${ma(e.eventType)}`,children:[(0,A.jsx)(`span`,{className:`event-icon`,children:ga(e.eventType)}),(0,A.jsx)(`span`,{className:`event-time`,children:Vi(e.timestamp).toLocaleTimeString()}),(0,A.jsx)(`span`,{className:`event-type ${pa(e.eventType)}`,children:e.eventType}),t?(0,A.jsx)(`button`,{type:`button`,className:`event-agg event-agg-button`,onClick:()=>t(e.aggregateId),children:e.aggregateId}):(0,A.jsx)(`span`,{className:`event-agg`,children:e.aggregateId})]},e.eventId))]})]})}function xa(e){switch(e){case`CRITICAL`:return`sev-critical`;case`HIGH`:return`sev-high`;case`MEDIUM`:return`sev-medium`;case`LOW`:return`sev-low`;default:return`sev-low`}}function Sa(e){switch(e){case`CRITICAL`:return`Critical`;case`HIGH`:return`High`;case`MEDIUM`:return`Warning`;case`LOW`:return`Info`;default:return e}}function Ca(){return(0,A.jsxs)(`svg`,{viewBox:`0 0 64 64`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,A.jsx)(`defs`,{children:(0,A.jsxs)(`linearGradient`,{id:`shield-grad`,x1:`16`,y1:`8`,x2:`48`,y2:`56`,children:[(0,A.jsx)(`stop`,{offset:`0%`,stopColor:`#00ff88`,stopOpacity:`0.9`}),(0,A.jsx)(`stop`,{offset:`100%`,stopColor:`#00cc66`,stopOpacity:`0.6`})]})}),(0,A.jsx)(`path`,{d:`M32 4 L52 14 L52 32 C52 46 32 58 32 58 C32 58 12 46 12 32 L12 14 Z`,stroke:`url(#shield-grad)`,strokeWidth:`2`,fill:`rgba(0, 255, 136, 0.06)`}),(0,A.jsx)(`path`,{d:`M32 10 L48 18 L48 32 C48 43 32 53 32 53 C32 53 16 43 16 32 L16 18 Z`,stroke:`rgba(0, 255, 136, 0.2)`,strokeWidth:`1`,fill:`none`}),(0,A.jsx)(`polyline`,{points:`22,32 29,40 42,24`,stroke:`#00ff88`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function wa({color:e}){return(0,A.jsx)(`div`,{className:`gauge-wave`,children:Array.from({length:12},(e,t)=>t).map(t=>(0,A.jsx)(`div`,{className:`gauge-wave-bar ${e}`,style:{animationDelay:`${t*.12}s`}},t))})}function Ta({source:e,onSelectAggregate:t}){let{data:n,isLoading:r}=j({queryKey:[`anomalies`,e??`default`],queryFn:()=>Pi(100,e),refetchInterval:3e4}),i=n&&n.length>0;return(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsxs)(`div`,{className:`card-title anomaly-card-title-row`,children:[(0,A.jsx)(`span`,{className:`anomaly-title-text`,children:`⚠️ Anomaly Detection`}),!r&&i&&(0,A.jsx)(`span`,{className:`anomaly-header-count`,"aria-label":`${n.length} anomalies`,children:n.length})]}),r&&(0,A.jsx)(`div`,{className:`skeleton`,style:{height:120}}),!r&&!i&&(0,A.jsxs)(`div`,{className:`anomaly-panel-inner`,children:[(0,A.jsxs)(`div`,{className:`anomaly-shield`,children:[(0,A.jsx)(`div`,{className:`shield-icon`,children:(0,A.jsx)(Ca,{})}),(0,A.jsx)(`div`,{className:`shield-text`,children:`No anomalies detected`})]}),(0,A.jsxs)(`div`,{className:`gauge-row`,children:[(0,A.jsxs)(`div`,{className:`gauge-card optimal`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Data Integrity`}),(0,A.jsx)(`div`,{className:`gauge-value optimal`,children:`OPTIMAL`}),(0,A.jsx)(wa,{color:`green`})]}),(0,A.jsxs)(`div`,{className:`gauge-card baseline`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Pattern Scan`}),(0,A.jsx)(`div`,{className:`gauge-value baseline`,children:`BASELINE`}),(0,A.jsx)(wa,{color:`cyan`})]}),(0,A.jsxs)(`div`,{className:`gauge-card zero`,children:[(0,A.jsx)(`div`,{className:`gauge-label`,children:`Threat Level`}),(0,A.jsx)(`div`,{className:`gauge-value zero`,children:`ZERO`}),(0,A.jsx)(wa,{color:`green`})]})]})]}),!r&&i&&(0,A.jsx)(`div`,{className:`anomaly-scroll-region`,children:(0,A.jsx)(`div`,{className:`anomaly-list-inner`,children:n.map((e,n)=>(0,A.jsxs)(`details`,{className:`anomaly-card ${e.severity}`,children:[(0,A.jsxs)(`summary`,{className:`anomaly-card-summary`,children:[(0,A.jsx)(`span`,{className:`anomaly-severity-badge ${xa(e.severity)}`,children:Sa(e.severity)}),(0,A.jsx)(`span`,{className:`anomaly-card-title`,children:e.description}),(0,A.jsx)(`span`,{className:`anomaly-card-chevron`,"aria-hidden":!0,children:`▼`})]}),(0,A.jsxs)(`div`,{className:`anomaly-card-body`,children:[(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Aggregate`}),t?(0,A.jsx)(`button`,{type:`button`,className:`anomaly-aggregate-link`,onClick:()=>t(e.aggregateId),children:(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})}):(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.aggregateId})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Sequence`}),(0,A.jsxs)(`span`,{className:`anomaly-meta-value`,children:[`#`,e.atSequence]})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Event type`}),(0,A.jsx)(`span`,{className:`anomaly-meta-value`,children:e.triggeringEventType})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`When`}),(0,A.jsx)(`span`,{className:`anomaly-meta-value`,children:Vi(e.timestamp).toLocaleString()})]}),(0,A.jsxs)(`p`,{className:`anomaly-card-meta`,children:[(0,A.jsx)(`span`,{className:`anomaly-meta-label`,children:`Code`}),(0,A.jsx)(`code`,{className:`anomaly-meta-value`,children:e.code})]})]})]},`${e.aggregateId}-${e.atSequence}-${n}`))})})]})}var Ea=[{keys:`j / k`,desc:`Move selection through the timeline`},{keys:`Shift+Click`,desc:`Pick a compare event for diff mode`},{keys:`1 - 3`,desc:`Switch state tabs`},{keys:`Ctrl/Cmd+K`,desc:`Open command palette`},{keys:`/`,desc:`Focus aggregate search`},{keys:`Space`,desc:`Pause or resume live stream`},{keys:`?`,desc:`Toggle shortcut help`}];function Da(){let[e,t]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let e=e=>{e.target.tagName!==`INPUT`&&e.key===`?`&&(e.preventDefault(),t(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,A.jsx)(`div`,{className:`keyboard-hints ${e?`keyboard-hints--expanded`:``}`,"aria-label":`Keyboard shortcuts`,children:e?(0,A.jsxs)(`div`,{className:`keyboard-hints-grid`,children:[Ea.map(e=>(0,A.jsxs)(`div`,{className:`keyboard-hint-row`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key`,children:e.keys}),(0,A.jsx)(`span`,{className:`keyboard-hint-desc`,children:e.desc})]},e.keys)),(0,A.jsx)(`button`,{type:`button`,className:`keyboard-hints-close`,onClick:()=>t(!1),"aria-label":`Close shortcuts`,children:`Close`})]}):(0,A.jsxs)(`div`,{className:`keyboard-hints-bar`,children:[(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`j/k`}),` Navigate`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Shift+Click`}),` Compare`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`Ctrl/Cmd+K`}),` Palette`]}),(0,A.jsx)(`span`,{className:`keyboard-hints-sep`,children:`·`}),(0,A.jsxs)(`span`,{className:`keyboard-hints-item`,children:[(0,A.jsx)(`kbd`,{className:`keyboard-key-mini`,children:`?`}),` All shortcuts`]})]})})}var Oa=[2,3,5,10];function ka({transitions:e,selectedSequence:t,compareSequence:n,onSelectSequence:r,onClearCompare:i,active:a=!1,onActivate:o}){let[s,c]=(0,k.useState)(null),[l,u]=(0,k.useState)(3),[d,f]=(0,k.useState)(!1);if((0,k.useEffect)(()=>{n==null&&s!=null&&(s.type===`autoplay`&&f(!0),r(s.sequence),c(null))},[n,r,s]),!e.length)return null;let p=e.find(e=>e.event.sequenceNumber===t)??e[0],m=e.findIndex(e=>e.event.sequenceNumber===p.event.sequenceNumber),h=n!=null&&n!==p.event.sequenceNumber,g=m>=e.length-1,_=m<=0;(0,k.useEffect)(()=>{h&&d&&f(!1)},[h,d]),(0,k.useEffect)(()=>{if(!d||g){g&&d&&f(!1);return}let t=window.setInterval(()=>{let t=e[Math.min(m+1,e.length-1)];if(!t||t.event.sequenceNumber===p.event.sequenceNumber){f(!1);return}r(t.event.sequenceNumber)},l*1e3);return()=>window.clearInterval(t)},[g,l,p.event.sequenceNumber,m,d,r,e]);let v=e=>{if(e!==p.event.sequenceNumber){if(h&&i){c({type:`select`,sequence:e});return}f(!1),r(e)}},y=()=>{if(d){f(!1);return}if(g)return;let t=e[Math.min(m+1,e.length-1)].event.sequenceNumber;if(h&&i){c({type:`autoplay`,sequence:t});return}f(!0)};return(0,A.jsxs)(`section`,{className:`card replay-debugger`,tabIndex:0,role:`region`,"aria-label":`Replay debugger`,"aria-current":a?`page`:void 0,onFocus:o,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Replay Debugger`}),(0,A.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(e[Math.max(m-1,0)].event.sequenceNumber),title:`Step backward`,"aria-label":`Replay previous event`,disabled:_,children:`Previous`}),(0,A.jsxs)(`div`,{className:`replay-controls-center`,children:[(0,A.jsxs)(`div`,{className:`replay-position`,children:[`Event `,m+1,` of `,e.length]}),(0,A.jsxs)(`div`,{className:`replay-auto-controls`,children:[(0,A.jsx)(`button`,{type:`button`,className:`replay-auto-toggle ${d?`active`:``}`,onClick:y,disabled:g,"aria-pressed":d,children:d?`Pause Auto Replay`:`Start Auto Replay`}),(0,A.jsxs)(`label`,{className:`replay-interval-picker`,children:[(0,A.jsx)(`span`,{children:`Speed`}),(0,A.jsx)(`select`,{value:l,onChange:e=>u(Number(e.target.value)),disabled:d,"aria-label":`Auto replay interval`,children:Oa.map(e=>(0,A.jsxs)(`option`,{value:e,children:[e,`s / event`]},e))})]})]})]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(e[Math.min(m+1,e.length-1)].event.sequenceNumber),title:`Step forward`,"aria-label":`Replay next event`,disabled:g,children:`Next`})]}),h&&(0,A.jsxs)(`div`,{className:`replay-compare-warning`,role:`alert`,"aria-live":`polite`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`strong`,{children:`Compare mode is active.`}),` Replay stepping or auto replay will replace the comparison and continue from the selected event.`]}),s==null?(0,A.jsx)(`div`,{className:`replay-warning-hint`,children:`Use Previous, Next, the slider, or auto replay. We’ll ask before clearing compare mode.`}):(0,A.jsxs)(`div`,{className:`replay-compare-actions`,children:[(0,A.jsx)(`button`,{type:`button`,className:`replay-warning-btn replay-warning-btn--primary`,onClick:()=>i?.(),children:s.type===`autoplay`?`Start replay and replace compare`:`Continue and replace compare`}),(0,A.jsx)(`button`,{type:`button`,className:`replay-warning-btn`,onClick:()=>c(null),children:`Keep compare`})]})]}),(0,A.jsx)(`input`,{type:`range`,min:0,max:Math.max(e.length-1,0),value:m,onChange:t=>v(e[Number(t.target.value)].event.sequenceNumber),"aria-label":`Replay position`}),(0,A.jsxs)(`div`,{className:`state-panel replay-state`,children:[(0,A.jsx)(`h4`,{children:`Current State`}),(0,A.jsx)(ia,{value:p.stateAfter,changedKeys:new Set(Object.keys(p.diff))})]})]})}function Aa(e,t=1,n=24){return j({queryKey:[`statistics`,e??`default`,t,n],queryFn:()=>L(e,t,n),staleTime:3e4})}function ja({source:e,onBack:t}){let[n,r]=(0,k.useState)(24),{data:i,isLoading:a}=Aa(e,1,n);return(0,A.jsxs)(`section`,{className:`card statistics-panel`,role:`region`,"aria-label":`Statistics panel`,"aria-busy":a,children:[(0,A.jsxs)(`div`,{className:`statistics-panel-header`,children:[(0,A.jsxs)(`div`,{className:`card-title`,children:[`Statistics `,e?`- ${e}`:``]}),(0,A.jsx)(`button`,{type:`button`,className:`statistics-back-btn`,onClick:t,children:`Back to workspace`})]}),(0,A.jsx)(`div`,{className:`statistics-toolbar`,children:[6,24,72].map(e=>(0,A.jsx)(`button`,{type:`button`,className:`filter-chip ${n===e?`active`:``}`,onClick:()=>r(e),children:e===72?`3d`:`${e}h`},e))}),a&&(0,A.jsx)(`div`,{className:`skeleton`,style:{height:140}}),!a&&i&&!i.available&&(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`},children:i.message??`Statistics not available.`}),!a&&i?.available&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`div`,{className:`stats-kpis`,children:[(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.totalEvents}),(0,A.jsx)(`span`,{children:`Total events`})]}),(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.distinctAggregates}),(0,A.jsx)(`span`,{children:`Aggregates`})]}),(0,A.jsxs)(`div`,{className:`stat-card`,children:[(0,A.jsx)(`strong`,{children:i.eventTypes.length}),(0,A.jsx)(`span`,{children:`Event types`})]})]}),(0,A.jsx)(`div`,{className:`stats-chart`,children:i.throughput.map(e=>(0,A.jsxs)(`div`,{className:`stats-bar-row`,children:[(0,A.jsx)(`span`,{children:e.bucket.slice(11,16)}),(0,A.jsx)(`div`,{className:`stats-bar-track`,children:(0,A.jsx)(`div`,{className:`stats-bar-fill`,style:{width:`${Math.max(8,e.count/Math.max(...i.throughput.map(e=>e.count),1)*100)}%`}})}),(0,A.jsx)(`strong`,{children:e.count})]},e.bucket))}),(0,A.jsxs)(`div`,{className:`stats-distribution`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h4`,{children:`Event Types`}),i.eventTypes.map(e=>(0,A.jsxs)(`div`,{className:`stats-list-row`,children:[(0,A.jsx)(`span`,{children:e.type}),(0,A.jsx)(`strong`,{children:e.count})]},e.type))]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h4`,{children:`Aggregate Types`}),i.aggregateTypes.map(e=>(0,A.jsxs)(`div`,{className:`stats-list-row`,children:[(0,A.jsx)(`span`,{children:e.type}),(0,A.jsx)(`strong`,{children:e.count})]},e.type))]})]})]})]})}function Ma({open:e,selectedSource:t,onClose:n,onSelectAggregate:r,onOpenHome:i,onOpenStats:a}){let[o,s]=(0,k.useState)(``),[c,l]=(0,k.useState)(0),[u,d]=(0,k.useState)(null),{data:f=[]}=j({queryKey:[`palette-search`,o,t??`default`],queryFn:()=>ji(o,8,t),enabled:e&&o.trim().length>=2,staleTime:5e3});(0,k.useEffect)(()=>{e?(l(0),d(document.activeElement instanceof HTMLElement?document.activeElement:null)):(s(``),u?.focus())},[e,u]);let p=(0,k.useMemo)(()=>{let e=[{id:`home`,label:`Go to main page`,action:i},{id:`stats`,label:`Go to statistics panel`,action:a}],t=f.map(e=>({id:`agg-${e}`,label:`Open aggregate ${e}`,action:()=>r(e)}));return o.trim()&&f.length===0&&e.unshift({id:`direct`,label:`Open aggregate ${o.trim()}`,action:()=>r(o.trim())}),[...t,...e]},[f,i,a,r,o]);return(0,k.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,Math.max(p.length-1,0)))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),p[c]?.action(),n())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[p,n,e,c]),e?(0,A.jsx)(`div`,{className:`command-palette-backdrop`,onClick:n,children:(0,A.jsxs)(`div`,{className:`command-palette`,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,"aria-describedby":`command-palette-help`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)(`p`,{id:`command-palette-help`,className:`sr-only`,children:`Search aggregates, return to the main page, or open statistics. Use arrow keys to move and Enter to confirm.`}),(0,A.jsx)(`input`,{autoFocus:!0,className:`command-palette-input`,placeholder:`Search aggregates or jump to a panel`,value:o,onChange:e=>s(e.target.value),"aria-label":`Command palette search`}),(0,A.jsxs)(`ul`,{className:`command-palette-list`,role:`listbox`,"aria-label":`Command results`,children:[p.map((e,t)=>(0,A.jsx)(`li`,{className:`command-palette-item ${t===c?`active`:``}`,role:`option`,"aria-selected":t===c,onMouseEnter:()=>l(t),onClick:()=>{e.action(),n()},children:e.label},e.id)),p.length===0&&(0,A.jsx)(`li`,{className:`command-palette-item muted`,children:`Type at least two characters to search.`})]})]})}):null}function Na({paletteOpen:e,onOpenPalette:t,onClosePalette:n}){return(0,k.useEffect)(()=>{let r=r=>{let i=r.target,a=i&&[`INPUT`,`TEXTAREA`,`SELECT`].includes(i.tagName);if((r.metaKey||r.ctrlKey)&&r.key.toLowerCase()===`k`){r.preventDefault(),t();return}if(r.key===`/`&&!a){r.preventDefault(),document.getElementById(`aggregate-search`)?.focus();return}if(r.key===`Escape`&&e){r.preventDefault(),n();return}!a&&(r.key===`j`||r.key===`k`)&&window.dispatchEvent(new CustomEvent(`eventlens:timeline-step`,{detail:r.key===`j`?1:-1}))};return window.addEventListener(`keydown`,r),()=>window.removeEventListener(`keydown`,r)},[e,n,t]),null}function Pa(e){let t=e.toLowerCase();return t===`ready`||t===`up`}function Fa(e){return e.toLowerCase()===`ready`}function Ia(){let e=[6,12,8,16,10,14,7,11,15,9];return(0,A.jsx)(`div`,{className:`mini-wave`,"aria-hidden":!0,children:e.map((e,t)=>(0,A.jsx)(`div`,{className:`mini-wave-bar`,style:{height:e,animationDelay:`${t*.1}s`}},t))})}function La({isUp:e,selectedSource:t,fallbackCount:n}){let[r,i]=(0,k.useState)(0),[a,o]=(0,k.useState)(n),s=(0,k.useRef)(null);(0,k.useEffect)(()=>{let e=Date.now();return s.current=setInterval(()=>{i(Math.floor((Date.now()-e)/1e3))},1e3),()=>{s.current&&clearInterval(s.current)}},[]),(0,k.useEffect)(()=>{o(n)},[n]),(0,k.useEffect)(()=>{let e=!1,r=()=>{Fi(500,t||null).then(t=>{e||o(t.length)}).catch(()=>{!e&&n!=null&&o(n)})};r();let i=setInterval(r,15e3);return()=>{e=!0,clearInterval(i)}},[n,t]);let c=e=>{let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t}h ${n}m`:n>0?`${n}m ${r}s`:`${r}s`};return(0,A.jsxs)(`div`,{className:`conn-stats`,"aria-label":`Connection metrics`,children:[(0,A.jsx)(Ia,{}),(0,A.jsxs)(`div`,{className:`conn-stat`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`API`}),(0,A.jsx)(`span`,{className:`conn-stat-value ${e?`green`:`amber`}`,children:e?`Healthy`:`Down`})]}),(0,A.jsxs)(`div`,{className:`conn-stat conn-stat--metric`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`Events`}),(0,A.jsx)(`span`,{className:`conn-stat-value`,children:a??`...`})]}),(0,A.jsxs)(`div`,{className:`conn-stat`,children:[(0,A.jsx)(`span`,{className:`conn-stat-label`,children:`Uptime`}),(0,A.jsx)(`span`,{className:`conn-stat-value green conn-stat-value--uptime`,children:c(r)})]})]})}function Ra(){let[e,t]=(0,k.useState)(`state`),[n,r]=(0,k.useState)(null),[i,a]=(0,k.useState)(null),[o,s]=(0,k.useState)(null),[c,l]=(0,k.useState)(`changes`),[u,d]=(0,k.useState)(``),[f,p]=(0,k.useState)(window.location.hash||``),[m,h]=(0,k.useState)(!1),[g,_]=(0,k.useState)(!1);(0,k.useEffect)(()=>{let e=()=>p(window.location.hash||``);return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,k.useEffect)(()=>{f===`#/plugins`&&(window.location.hash=`#/timeline`)},[f]),(0,k.useEffect)(()=>{let e=e=>{let t=e.detail;t&&l(t)};return window.addEventListener(`eventlens:switchtab`,e),()=>window.removeEventListener(`eventlens:switchtab`,e)},[]),(0,k.useEffect)(()=>{let e=new URLSearchParams(window.location.search),n=e.get(`aggregateId`),i=e.get(`seq`),o=e.get(`compare`),c=e.get(`tab`),u=e.get(`panel`),f=e.get(`source`);n&&r(n),i&&a(Number(i)),o&&s(Number(o)),c&&[`changes`,`before-after`,`raw`].includes(c)&&l(c),(u===`replay`||u===`state`)&&t(u),f&&d(f)},[]),(0,k.useEffect)(()=>{let t=new URLSearchParams(window.location.search);n?t.set(`aggregateId`,n):t.delete(`aggregateId`),i==null?t.delete(`seq`):t.set(`seq`,String(i)),o==null?t.delete(`compare`):t.set(`compare`,String(o)),t.set(`tab`,c),t.set(`panel`,e),u?t.set(`source`,u):t.delete(`source`);let r=t.toString(),a=`${window.location.pathname}${r?`?${r}`:``}${window.location.hash}`;window.history.replaceState(null,``,a)},[e,c,o,n,i,u]);let{data:v}=j({queryKey:[`health`],queryFn:R,refetchInterval:3e4}),{data:y=[]}=j({queryKey:[`datasources`],queryFn:Ii,staleTime:1e4}),{data:b=[]}=j({queryKey:[`plugins`],queryFn:Li,staleTime:1e4}),{data:x=[]}=$i(n??``,u||null),{data:S}=j({queryKey:[`timeline-summary`,n,u||`default`],queryFn:()=>Mi(n,500,0,u||null,`metadata`),enabled:!!n,staleTime:3e4}),C=v?.status===`UP`,w=f===`#/stats`,ee=y.filter(e=>Pa(e.status)).length,te=b.filter(e=>Pa(e.lifecycle)).length,ne=y.length-ee+(b.length-te),T=e=>{r(e),a(null),s(null),t(`state`),window.location.hash=`#/timeline`},re=()=>{window.location.hash=`#/timeline`};return(0,A.jsxs)(`div`,{className:`app`,children:[(0,A.jsx)(Na,{paletteOpen:g,onOpenPalette:()=>_(!0),onClosePalette:()=>_(!1)}),(0,A.jsx)(Ma,{open:g,selectedSource:u||null,onClose:()=>_(!1),onSelectAggregate:T,onOpenHome:re,onOpenStats:()=>{window.location.hash=`#/stats`}}),(0,A.jsxs)(`header`,{className:`app-header`,children:[(0,A.jsx)(`div`,{className:`brand`,children:(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`brand-name`,children:`EventLens`}),(0,A.jsx)(`div`,{className:`brand-sub`,children:`Event Store Visual Debugger`})]})}),(0,A.jsxs)(`div`,{className:`header-center`,children:[Di()&&(0,A.jsx)(`div`,{className:`header-demo-pill`,role:`status`,children:`Demo mode`}),(0,A.jsx)(`div`,{className:`header-title`,children:`EventLens`})]}),(0,A.jsxs)(`div`,{className:`header-actions`,children:[(0,A.jsx)(La,{isUp:C,selectedSource:u,fallbackCount:S?.totalEvents??null}),(0,A.jsxs)(`div`,{className:`header-status`,children:[(0,A.jsx)(`span`,{className:`dot ${C?`dot-green`:`dot-red`}`}),(0,A.jsx)(`span`,{className:`status-text ${C?``:`offline`}`,children:C?`Connected`:v?.status??`Connecting`})]})]})]}),(0,A.jsxs)(`aside`,{className:`workspace-dock${m?` workspace-dock--open`:``}`,"aria-label":`Workspace`,children:[(0,A.jsxs)(`div`,{className:`workspace-dock-panel`,id:`workspace-dock-panel`,hidden:!m,children:[(0,A.jsx)(`div`,{className:`workspace-dock-title`,children:`Workspace`}),(0,A.jsxs)(`label`,{className:`workspace-datasource`,children:[(0,A.jsx)(`span`,{className:`workspace-datasource-label`,children:`Datasource`}),(0,A.jsxs)(`select`,{id:`workspace-datasource-select`,className:`workspace-datasource-select`,value:u,onChange:e=>{d(e.target.value),a(null),s(null)},children:[(0,A.jsx)(`option`,{value:``,children:`Auto (primary datasource)`}),y.map(e=>(0,A.jsxs)(`option`,{value:e.id,disabled:!Fa(e.status),children:[e.id,` [`,e.status,`]`]},e.id))]})]}),(0,A.jsxs)(`div`,{className:`workspace-sidebar-kpis`,children:[(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Datasources Healthy`}),(0,A.jsxs)(`strong`,{children:[ee,`/`,y.length||0]})]}),(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Plugins Healthy`}),(0,A.jsxs)(`strong`,{children:[te,`/`,b.length||0]})]}),(0,A.jsxs)(`div`,{className:`workspace-kpi-row`,children:[(0,A.jsx)(`span`,{children:`Issues`}),(0,A.jsx)(`strong`,{children:ne})]})]})]}),(0,A.jsx)(`button`,{type:`button`,className:`workspace-dock-handle`,onClick:()=>h(e=>!e),"aria-expanded":m,"aria-controls":`workspace-dock-panel`,"aria-label":m?`Collapse workspace panel`:`Expand workspace panel`,children:(0,A.jsx)(`span`,{className:`workspace-dock-chevron`,"aria-hidden":!0,children:m?`>`:`<`})})]}),(0,A.jsx)(`main`,{className:`app-main`,role:`main`,"aria-label":`EventLens workspace`,children:(0,A.jsxs)(`div`,{className:`workspace-content`,children:[!w&&(0,A.jsxs)(`div`,{className:`card search-panel card--dropdown-host`,children:[(0,A.jsx)(`label`,{className:`control-field-label`,htmlFor:`aggregate-search`,children:`Search Aggregates`}),(0,A.jsx)(zi,{onSelect:T,source:u||null,selectedValue:n}),n&&(0,A.jsxs)(`div`,{className:`selection-summary`,children:[`Viewing: `,(0,A.jsx)(`span`,{style:{color:`var(--neon-cyan)`},children:n}),u?(0,A.jsxs)(`span`,{children:[` on `,u]}):(0,A.jsx)(`span`,{children:` on primary datasource`}),o!=null&&(0,A.jsxs)(`span`,{children:[` comparing with seq #`,o]}),(0,A.jsxs)(`span`,{className:`sr-only`,"aria-live":`polite`,children:[`Current panel `,e]}),(0,A.jsx)(`button`,{className:`selection-clear-btn`,onClick:()=>{r(null),a(null),s(null)},children:`× clear`})]})]}),w?(0,A.jsx)(ja,{source:u||null,onBack:re}):(0,A.jsxs)(A.Fragment,{children:[n&&(0,A.jsx)(Qi,{aggregateId:n,selectedSequence:i,compareSequence:o,onSelectEvent:e=>{a(e),t(`state`)},onSelectCompare:s,source:u||null}),n&&i!==null&&(0,A.jsx)(sa,{aggregateId:n,sequence:i,compareSequence:o,activeTab:c,onTabChange:e=>{l(e),t(`state`)},active:e===`state`,onActivate:()=>t(`state`),source:u||null}),n&&x.length>0&&(0,A.jsx)(ka,{transitions:x,selectedSequence:i,compareSequence:o,onSelectSequence:e=>{a(e),t(`replay`)},onClearCompare:()=>s(null),active:e===`replay`,onActivate:()=>t(`replay`)}),(0,A.jsxs)(`div`,{className:`bottom-grid`,children:[(0,A.jsx)(_a,{source:u||null,onSelectAggregate:T}),(0,A.jsx)(Ta,{source:u||null,onSelectAggregate:T})]}),n&&S&&(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Selection Summary`}),(0,A.jsxs)(`p`,{style:{color:`var(--text-secondary)`},children:[S.totalEvents,` events available for this aggregate. Use Shift+Click in the timeline to compare two points in time, or open the command palette with Ctrl/Cmd+K.`]})]})]})]})}),(0,A.jsx)(Da,{})]})}var za=class extends k.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){console.error(`UI error boundary caught:`,e,t)}render(){return this.state.hasError?(0,A.jsx)(`div`,{className:`app`,children:(0,A.jsx)(`main`,{className:`app-main`,children:(0,A.jsxs)(`div`,{className:`card`,children:[(0,A.jsx)(`div`,{className:`card-title`,children:`Something went wrong`}),(0,A.jsx)(`p`,{style:{color:`var(--text-muted)`,fontSize:13},children:`The UI hit an unexpected error. Try refreshing the page. If the problem persists, check the browser console and server logs.`})]})})}):this.props.children}},Ba=new Xe({defaultOptions:{queries:{staleTime:3e4,retry:2}}});si.createRoot(document.getElementById(`root`)).render((0,A.jsx)(k.StrictMode,{children:(0,A.jsx)(tt,{client:Ba,children:(0,A.jsx)(da,{children:(0,A.jsx)(za,{children:(0,A.jsx)(Ra,{})})})})})); \ No newline at end of file diff --git a/eventlens-api/src/main/resources/web/index.html b/eventlens-api/src/main/resources/web/index.html index 59c55fa..92de5ce 100644 --- a/eventlens-api/src/main/resources/web/index.html +++ b/eventlens-api/src/main/resources/web/index.html @@ -9,7 +9,7 @@ - + diff --git a/eventlens-ui/src/App.tsx b/eventlens-ui/src/App.tsx index da70758..1c83fab 100644 --- a/eventlens-ui/src/App.tsx +++ b/eventlens-ui/src/App.tsx @@ -273,7 +273,14 @@ export default function App() {
Issues{issueCount}
- diff --git a/eventlens-ui/src/components/JsonTreeView.tsx b/eventlens-ui/src/components/JsonTreeView.tsx index 0577dc2..e30f561 100644 --- a/eventlens-ui/src/components/JsonTreeView.tsx +++ b/eventlens-ui/src/components/JsonTreeView.tsx @@ -12,7 +12,7 @@ function JsonToggle({ open, onToggle }: { open: boolean; onToggle: () => void }) aria-expanded={open} aria-label={open ? 'Collapse' : 'Expand'} > - {open ? '▼' : '▶'} + {open ? '-' : '+'} ); } @@ -35,13 +35,12 @@ interface NodeProps { depth: number; propertyKey?: string; changedKeys?: Set; - /** full dot-path from root, used to match changedKeys */ keyPath?: string; } export default function JsonTreeView({ value, changedKeys }: { value: unknown; changedKeys?: Set }) { return ( -
+
); @@ -49,10 +48,8 @@ export default function JsonTreeView({ value, changedKeys }: { value: unknown; c function JsonNode({ value, depth, propertyKey, changedKeys, keyPath = '' }: NodeProps) { const isChanged = changedKeys && propertyKey !== undefined && changedKeys.has(propertyKey); - // also match nested paths like "address.city" const isParentChanged = changedKeys && keyPath && [...changedKeys].some(k => k.startsWith(keyPath + '.')); - // Auto-expand changed nodes, but only if changedKeys is provided const autoOpen = changedKeys ? depth < 3 || !!isChanged || !!isParentChanged : depth < 3; diff --git a/eventlens-ui/src/components/SearchBar.tsx b/eventlens-ui/src/components/SearchBar.tsx index 59f0ac6..6e23c75 100644 --- a/eventlens-ui/src/components/SearchBar.tsx +++ b/eventlens-ui/src/components/SearchBar.tsx @@ -80,7 +80,6 @@ export default function SearchBar({ onSelect, source, selectedValue }: Props) { if (e.key === 'Escape') setOpen(false); }} autoComplete="off" - aria-expanded={open} aria-controls="aggregate-search-results" aria-autocomplete="list" /> diff --git a/eventlens-ui/src/components/Timeline.tsx b/eventlens-ui/src/components/Timeline.tsx index f4d2851..b1d635f 100644 --- a/eventlens-ui/src/components/Timeline.tsx +++ b/eventlens-ui/src/components/Timeline.tsx @@ -74,7 +74,6 @@ function renderEventStep( } }} aria-current={selected ? 'step' : undefined} - aria-selected={selected} aria-label={eventRowLabel(row.stepNumber, event)} > Event {row.stepNumber} diff --git a/eventlens-ui/tests/e2e/accessibility.spec.ts b/eventlens-ui/tests/e2e/accessibility.spec.ts index 7cccafb..601fa16 100644 --- a/eventlens-ui/tests/e2e/accessibility.spec.ts +++ b/eventlens-ui/tests/e2e/accessibility.spec.ts @@ -3,6 +3,7 @@ import AxeBuilder from '@axe-core/playwright'; test('main shell has no critical accessibility violations', async ({ page }) => { await page.goto('/'); + await expect(page.getByRole('main', { name: 'EventLens workspace' })).toBeVisible(); const results = await new AxeBuilder({ page }).analyze(); expect(results.violations.filter(v => v.impact === 'critical')).toEqual([]); }); diff --git a/eventlens-ui/tests/e2e/v4-critical-path.spec.ts b/eventlens-ui/tests/e2e/v4-critical-path.spec.ts index 5ac294c..76688e7 100644 --- a/eventlens-ui/tests/e2e/v4-critical-path.spec.ts +++ b/eventlens-ui/tests/e2e/v4-critical-path.spec.ts @@ -3,9 +3,10 @@ import { expect, test } from '@playwright/test'; test('state diff compare mode is shareable by URL', async ({ page }) => { await page.goto('/?aggregateId=order-demo-001&seq=100&compare=89&tab=changes&panel=state'); - await expect(page.getByRole('region', { name: 'State viewer' })).toBeVisible(); - await expect(page.getByText('Compared with #89')).toBeVisible(); - await expect(page.getByText('Structural diff')).toBeVisible(); + const stateViewer = page.getByRole('region', { name: 'State viewer' }); + await expect(stateViewer).toBeVisible(); + await expect(stateViewer.locator('.diff-count-badge').filter({ hasText: 'Compared with #89' })).toBeVisible(); + await expect(stateViewer.getByText('Structural diff', { exact: true })).toBeVisible(); }); test('replay debugger keeps panel and position in URL while stepping', async ({ page }) => { @@ -20,9 +21,11 @@ test('replay debugger keeps panel and position in URL while stepping', async ({ test('statistics panel renders in demo mode', async ({ page }) => { await page.goto('/#/stats'); - await expect(page.getByRole('region', { name: 'Statistics panel' })).toBeVisible(); - await expect(page.getByText('Total events')).toBeVisible(); - await expect(page.getByText('100')).toBeVisible(); + const statisticsPanel = page.getByRole('region', { name: 'Statistics panel' }); + await expect(statisticsPanel).toBeVisible(); + const totalEventsCard = statisticsPanel.locator('.stat-card').filter({ hasText: 'Total events' }); + await expect(totalEventsCard).toBeVisible(); + await expect(totalEventsCard.locator('strong')).toHaveText('100'); }); test('command palette opens aggregate and keyboard navigation advances the selection', async ({ page }) => { @@ -30,8 +33,8 @@ test('command palette opens aggregate and keyboard navigation advances the selec await page.keyboard.press('Control+K'); await expect(page.getByRole('dialog', { name: 'Command palette' })).toBeVisible(); - await page.getByLabel('Command palette search').fill('demo'); - await page.keyboard.press('Enter'); + await page.getByLabel('Command palette search').fill('order-demo-001'); + await page.getByRole('option', { name: 'Open aggregate order-demo-001' }).click(); await expect(page).toHaveURL(/aggregateId=order-demo-001/); await expect(page.getByText('Viewing:')).toBeVisible(); From 9babfef818379980c2812b2ed24803cbf9a7a43a Mon Sep 17 00:00:00 2001 From: Ahmed Date: Thu, 26 Mar 2026 15:46:12 +0200 Subject: [PATCH 10/10] fix(test): resolve remaining e2e regressions --- eventlens-ui/src/components/SearchBar.tsx | 1 - eventlens-ui/tests/e2e/v4-critical-path.spec.ts | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eventlens-ui/src/components/SearchBar.tsx b/eventlens-ui/src/components/SearchBar.tsx index 6e23c75..96d5524 100644 --- a/eventlens-ui/src/components/SearchBar.tsx +++ b/eventlens-ui/src/components/SearchBar.tsx @@ -80,7 +80,6 @@ export default function SearchBar({ onSelect, source, selectedValue }: Props) { if (e.key === 'Escape') setOpen(false); }} autoComplete="off" - aria-controls="aggregate-search-results" aria-autocomplete="list" /> {open && results.length > 0 && ( diff --git a/eventlens-ui/tests/e2e/v4-critical-path.spec.ts b/eventlens-ui/tests/e2e/v4-critical-path.spec.ts index 76688e7..2bb6c68 100644 --- a/eventlens-ui/tests/e2e/v4-critical-path.spec.ts +++ b/eventlens-ui/tests/e2e/v4-critical-path.spec.ts @@ -6,7 +6,8 @@ test('state diff compare mode is shareable by URL', async ({ page }) => { const stateViewer = page.getByRole('region', { name: 'State viewer' }); await expect(stateViewer).toBeVisible(); await expect(stateViewer.locator('.diff-count-badge').filter({ hasText: 'Compared with #89' })).toBeVisible(); - await expect(stateViewer.getByText('Structural diff', { exact: true })).toBeVisible(); + await expect(stateViewer.locator('.diff-panel')).toBeVisible(); + await expect(stateViewer.locator('.diff-toolbar-title')).toContainText('Structural diff'); }); test('replay debugger keeps panel and position in URL while stepping', async ({ page }) => {