diff --git a/.github/workflows/preview.yaml b/.github/workflows/preview.yaml index ae185746..a9c70c2d 100644 --- a/.github/workflows/preview.yaml +++ b/.github/workflows/preview.yaml @@ -36,4 +36,5 @@ jobs: for workspace in ${{ steps.changed.outputs.workspaces }}; do dirs="$dirs ./$workspace" done - npx pkg-pr-new publish $dirs + echo $dirs + npx pkg-pr-new publish --pnpm $dirs diff --git a/.gitignore b/.gitignore index c3b36b59..e2a2550d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,4 @@ dist/ # pnpm config (created by test-matrix runner) .npmrc - +.turbo diff --git a/biome.json b/biome.json index 9bff3d75..00326ba8 100644 --- a/biome.json +++ b/biome.json @@ -9,7 +9,8 @@ "recommended": true, "style": { "noParameterAssign": "off", - "useConst": "off" + "useConst": "off", + "noUselessElse": "off" }, "correctness": { "useYield": "off" diff --git a/inspector/README.md b/inspector/README.md new file mode 100644 index 00000000..33d4d778 --- /dev/null +++ b/inspector/README.md @@ -0,0 +1,3 @@ +# inspector + +Helpers to inspect an effection tree. diff --git a/inspector/examples/example.ts b/inspector/examples/example.ts new file mode 100644 index 00000000..bd7d45af --- /dev/null +++ b/inspector/examples/example.ts @@ -0,0 +1,23 @@ +import { main, sleep, spawn, type Task } from "effection"; + +import { useLabels } from ".././lib/labels.ts"; + +await main(function* () { + let tasks: Task[] = []; + for (let i = 1; i <= 10; i++) { + let task = yield* spawn(function* () { + yield* useLabels({ name: "child", number: i }); + let delay = Math.random() * 1000; + yield* sleep(delay); + return `${i} is done`; + }); + tasks.push(task); + } + + for (let task of tasks) { + yield* sleep(Math.random() * 200); + yield* task.halt(); + } + + console.log("done"); +}); diff --git a/inspector/index.html b/inspector/index.html new file mode 100644 index 00000000..e275a2e7 --- /dev/null +++ b/inspector/index.html @@ -0,0 +1,12 @@ + + + + + + vite + react + starfx + + +
+ + + diff --git a/inspector/lib/attach.ts b/inspector/lib/attach.ts new file mode 100644 index 00000000..b67aea47 --- /dev/null +++ b/inspector/lib/attach.ts @@ -0,0 +1,25 @@ +import { type Operation, type Scope, suspend, withResolvers } from "effection"; +import type { Methods, Inspector, Handle } from "./types.ts"; +import { useLabels } from "./labels.ts"; + +export function* attach( + scope: Scope, + inspector: Inspector, + init: (handle: Handle) => Operation, +): Operation { + let attached = withResolvers(); + + scope.run(function* () { + yield* useLabels({ name: "Inspector" }); + try { + let handle = yield* inspector.attach(scope); + yield* init(handle); + attached.resolve(); + yield* suspend(); + } catch (error) { + attached.reject(error as Error); + } + }); + + return yield* attached.operation; +} diff --git a/inspector/lib/box.ts b/inspector/lib/box.ts new file mode 100644 index 00000000..d41344da --- /dev/null +++ b/inspector/lib/box.ts @@ -0,0 +1,8 @@ +import type { Result } from "effection"; + +export function unbox(result: Result): T { + if (result.ok) { + return result.value; + } + throw result.error; +} diff --git a/inspector/lib/combine.ts b/inspector/lib/combine.ts new file mode 100644 index 00000000..41893056 --- /dev/null +++ b/inspector/lib/combine.ts @@ -0,0 +1,66 @@ +import type { Operation, Scope } from "effection"; +import type { Handle, Inspector, Methods, Protocol } from "./types.ts"; + +export interface Combine { + protocols(...protocols: [Protocol]): Protocol; + protocols( + ...protocols: [Protocol, Protocol] + ): Protocol; + protocols( + ...protocols: [Protocol, Protocol, Protocol] + ): Protocol; + protocols< + A extends Methods, + B extends Methods, + C extends Methods, + D extends Methods, + >( + ...protocols: [Protocol, Protocol, Protocol, Protocol] + ): Protocol; + + inspectors(...inspectors: [Inspector]): Inspector; + inspectors( + ...inspectors: [Inspector, Inspector] + ): Inspector; + inspectors( + ...inspectors: [Inspector, Inspector, Inspector] + ): Inspector; + inspectors< + A extends Methods, + B extends Methods, + C extends Methods, + D extends Methods, + >( + ...inspectors: [Inspector, Inspector, Inspector, Inspector] + ): Inspector; +} + +export const combine: Combine = { + protocols: (...protocols: Protocol[]) => { + return protocols.reduce( + (acc, protocol) => { + Object.assign(acc.methods, protocol.methods); + return acc; + }, + { methods: {} } as Protocol, + ); + }, + inspectors: (...inspectors: Inspector[]) => { + return inspectors.reduce( + (acc: Inspector, inspector: Inspector) => { + let protocol = combine.protocols(acc.protocol, inspector.protocol); + let attach = function* (scope: Scope): Operation> { + let a = yield* acc.attach(scope); + let b = yield* inspector.attach(scope); + let methods = Object.assign({}, a.methods, b.methods); + return { + protocol, + methods, + invoke: ({ name, args }) => methods[name](...args), + }; + }; + return { protocol, attach }; + }, + ); + }, +}; diff --git a/inspector/lib/impl.ts b/inspector/lib/impl.ts new file mode 100644 index 00000000..8160d810 --- /dev/null +++ b/inspector/lib/impl.ts @@ -0,0 +1,26 @@ +import { lift, type Operation, type Stream } from "effection"; + +export function fn( + fn: (...args: TArgs) => TReturn, +): (...args: TArgs) => Stream { + return lift((...args) => ({ + *next() { + return { done: true, value: fn(...args) }; + }, + })); +} + +export function op( + fn: (...args: TArgs) => Operation, +): ( + ...args: TArgs +) => Stream { + return lift((...args) => ({ + *next() { + return { + done: true, + value: yield* fn(...args), + } as IteratorReturnResult; + }, + })); +} diff --git a/inspector/lib/implementation.ts b/inspector/lib/implementation.ts new file mode 100644 index 00000000..e3f586b7 --- /dev/null +++ b/inspector/lib/implementation.ts @@ -0,0 +1,25 @@ +import type { Operation, Scope } from "effection"; +import type { + Handle, + Implementation, + Inspector, + Methods, + Protocol, +} from "./types.ts"; + +export function createImplementation( + protocol: Protocol, + create: Implementation, +): Inspector { + return { + protocol, + *attach(scope: Scope): Operation> { + let methods = yield* create(scope); + return { + protocol, + methods, + invoke: ({ name, args }) => methods[name](...args), + }; + }, + }; +} diff --git a/inspector/lib/labels.ts b/inspector/lib/labels.ts new file mode 100644 index 00000000..cd10ea30 --- /dev/null +++ b/inspector/lib/labels.ts @@ -0,0 +1,28 @@ +import { createContext, type Scope, useScope, type Operation } from "effection"; + +export type Labels = Record; + +export const LabelsContext = createContext( + "@effectionx/inspector.labels", + { name: "anonymous" }, +); + +export function* useLabels(labels: Labels): Operation { + let scope = yield* useScope(); + + if (!scope.hasOwn(LabelsContext)) { + return yield* LabelsContext.set({ + ...LabelsContext.defaultValue, + ...labels, + }); + } + let current = yield* LabelsContext.expect(); + return yield* LabelsContext.set({ ...current, ...labels }); +} + +export function getLabels(scope: Scope) { + if (scope.hasOwn(LabelsContext)) { + return scope.expect(LabelsContext); + } + return LabelsContext.defaultValue as Labels; +} diff --git a/inspector/lib/mod.ts b/inspector/lib/mod.ts new file mode 100644 index 00000000..ceb49dc4 --- /dev/null +++ b/inspector/lib/mod.ts @@ -0,0 +1,5 @@ +export * from "./types.ts"; +export * from "./protocol.ts"; +export * from "./implementation.ts"; +export * from "./combine.ts"; +export * from "./reader.ts"; diff --git a/inspector/lib/protocol.ts b/inspector/lib/protocol.ts new file mode 100644 index 00000000..56d01852 --- /dev/null +++ b/inspector/lib/protocol.ts @@ -0,0 +1,9 @@ +import type { Method, Protocol } from "./types.ts"; + +export function createProtocol< + M extends Record>, +>(methods: M): Protocol { + return { + methods, + }; +} diff --git a/inspector/lib/reader.ts b/inspector/lib/reader.ts new file mode 100644 index 00000000..f892f532 --- /dev/null +++ b/inspector/lib/reader.ts @@ -0,0 +1,7 @@ +export function toJson(value: unknown) { + try { + return JSON.parse(JSON.stringify(value)); + } catch (_error) { + return String(value); + } +} diff --git a/inspector/lib/reduce.ts b/inspector/lib/reduce.ts new file mode 100644 index 00000000..c2bba1e8 --- /dev/null +++ b/inspector/lib/reduce.ts @@ -0,0 +1,47 @@ +import type { Operation, Stream } from "effection"; + +/** + * Transforms a stream by taking each item and applying it to an + * accumulated value to produce a new accumulated value which is then + * passed downstream. + * + * @example + * ```ts + * import { reduce, streamOf } from "@effectionx/stream-helpers"; + * + * const sum = reduce(function*(total: number, item: number) { + * return sum + number; + * }, 0); + * + * sum(streamOf([1,2,3])) //=> yields 1, 3, 6 + * ``` + * + * @param fn - The operation to apply a single item to the accumulated value + * @param initial - The first accumulated value from which all others will descend + * @returns A stream transformer that applies the reduction over the lifetime of the stream + */ +export function reduce( + fn: (current: TSum, item: T) => Operation, + initial: TSum, +): (stream: Stream) => Stream { + return (upstream) => ({ + *[Symbol.iterator]() { + let current = initial; + let subscription = yield* upstream; + + return { + *next() { + let next = yield* subscription.next(); + if (next.done) { + return next; + } + let reduction = yield* fn(current, next.value); + + current = reduction; + + return { done: false, value: current } as const; + }, + }; + }, + }); +} diff --git a/inspector/lib/sse-client.ts b/inspector/lib/sse-client.ts new file mode 100644 index 00000000..43da285d --- /dev/null +++ b/inspector/lib/sse-client.ts @@ -0,0 +1,130 @@ +import { + createChannel, + resource, + spawn, + stream, + until, + useAbortSignal, +} from "effection"; +import { + toJson, + type Handle, + type InvocationArgs, + type InvocationResult, + type Methods, + type Protocol, +} from "../mod.ts"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; +import { type SSEMessage, SseStreamTransform } from "sse-stream-transform"; +import { useLabels } from "../lib/labels.ts"; +import { validateUnsafe } from "../lib/validate.ts"; + +export interface SSEClientOptions { + url?: string; +} + +/** + * Implement a protocol by calling it over SSE. if the protocl has a method `.foo()`, it + * will use the SSE stream at `/foo` + * + * The arguments of the protocl are validated before they are sent, and the returned values are + * validated on the way back. + * + * @param protocol - the protocol to implement + * @returns a handle to a protocol implementation that will invoke its methods over the wire. + */ +export function createSSEClient( + protocol: Protocol, + options: SSEClientOptions = {}, +): Handle { + let handle: Handle = { + protocol, + invoke({ + name, + args, + }: InvocationArgs): InvocationResult { + let methodName = String(name); + + // validate the arguments against the protocol + validateUnsafe( + protocol.methods[name].args, + args, + `arguments ${methodName}()`, + ); + + return resource(function* (provide) { + yield* useLabels({ name: `inspector.${methodName}()` }); + let signal = yield* useAbortSignal(); + + let pathname = `/${methodName}`; + + let url = options.url ? new URL(pathname, options.url) : pathname; + + let response = yield* until( + fetch(url, { + signal, + method: "POST", + headers: { + Accept: "text/event-stream", + }, + body: JSON.stringify(toJson(args)), + }), + ); + if (!response.body) { + throw new TypeError(`${methodName}(): response contained no body`); + } + + type TProgress = StandardSchemaV1.InferInput; + type TReturn = StandardSchemaV1.InferInput; + + let channel = createChannel(); + + // TODO: why is the vite app not recognizing ReadableStream as AsyncIterable?? + let events = stream( + response.body.pipeThrough( + new SseStreamTransform(), + ) as unknown as AsyncIterable, + ); + + yield* spawn(function* () { + let subscription = yield* events; + let next = yield* subscription.next(); + while (!next.done) { + // validate the progress event from the server + let { event, data } = next.value; + let parsed = JSON.parse(data); + if (event === "progress") { + validateUnsafe( + protocol.methods[name].progress, + parsed, + `progress ${methodName}()`, + ); + yield* channel.send(parsed); + next = yield* subscription.next(); + } else if (event === "return") { + next = { done: true, value: parsed }; + } + } + + // validate the return value + validateUnsafe( + protocol.methods[name].returns, + next.value, + `return value ${methodName}`, + ); + yield* channel.close(next.value); + }); + + yield* provide(yield* channel); + }); + }, + methods: Object.fromEntries( + Object.keys(protocol.methods).map((name) => [ + name, + (...args) => handle.invoke({ name, args }), + ]), + ) as Handle["methods"], + }; + + return handle; +} diff --git a/inspector/lib/sse-server.ts b/inspector/lib/sse-server.ts new file mode 100644 index 00000000..93bdfe2a --- /dev/null +++ b/inspector/lib/sse-server.ts @@ -0,0 +1,299 @@ +import { + action, + createSignal, + each, + type Operation, + race, + resource, + scoped, + spawn, + type Stream, + useScope, + withResolvers, +} from "effection"; +import type { Handle, Methods } from "./types.ts"; +import { createServer } from "node:http"; +import { createReadStream, promises as fsPromises } from "node:fs"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; +import type { AddressInfo } from "node:net"; +import type EventEmitter from "node:events"; +import type { Readable } from "node:stream"; +import { validate } from "./validate.ts"; +import { useLabels } from "./labels.ts"; + +export interface SSEServerOptions { + port: number; +} + +export function useSSEServer( + handle: Handle, + options: SSEServerOptions, +): Operation { + let { protocol } = handle; + let methodNames = Object.keys(protocol.methods) as Array; + const base = path.join(path.dirname(fileURLToPath(import.meta.url)), ".."); + const uiDist = path.join( + ...(base.endsWith("dist") + ? [base, "..", "ui", "dist"] + : [base, "..", "ui", "dist"]), + ); + + return resource(function* (provide) { + yield* useLabels({ name: "SSEServer", port: options.port }); + let scope = yield* useScope(); + const server = createServer(async (req, res) => { + if (!req.url) { + return; + } + + let url = req.url.startsWith("http") + ? new URL(req.url) + : new URL(`http://localhost${req.url}`); + + let name = methodNames.find( + (name) => url.pathname === `/${String(name)}`, + ); + + await scope.run(function* () { + yield* useLabels({ + name: "RequestHandler", + url: req.url ?? "UKNOWN", + method: req.method ?? "UKNOWN", + }); + if (!name) { + // Attempt to serve static UI (SPA) from inspector/ui/dist when no RPC method matches. + if (req.method === "GET" || req.method === "HEAD") { + try { + // map "/" to index.html for SPA + let pathname = + url.pathname === "/" + ? "/index.html" + : decodeURIComponent(url.pathname); + // prevent path traversal + let relPath = pathname.replace(/^\/+/, ""); + let filePath = path.join(uiDist, relPath); + + // avoid default file viewing outside of ui/dist + if (!filePath.startsWith(uiDist)) { + res.statusCode = 403; + res.statusMessage = "Forbidden"; + res.end(); + return; + } + + try { + let stat = yield* action( + (resolve, reject) => { + fsPromises.stat(filePath).then(resolve).catch(reject); + return () => {}; + }, + ); + if (stat.isDirectory()) { + filePath = path.join(filePath, "index.html"); + stat = yield* action( + (resolve, reject) => { + fsPromises.stat(filePath).then(resolve).catch(reject); + return () => {}; + }, + ); + } + + // set headers + let ext = path.extname(filePath).toLowerCase(); + let contentType = getContentType(ext); + let headers: Record = { + "Content-Type": contentType, + "Cache-Control": + ext === ".html" ? "no-cache" : "public, max-age=31536000", + }; + + res.writeHead(200, headers); + if (req.method === "HEAD") { + res.end(); + return; + } + createReadStream(filePath).pipe(res); + return; + } catch (err) { + // if file not found and path looks like a SPA route (no extension), + // serve index.html as a fallback so client-side routing works. + if (!path.extname(relPath)) { + let indexPath = path.join(uiDist, "index.html"); + try { + yield* action((resolve, reject) => { + fsPromises + .access(indexPath) + .then(() => resolve()) + .catch(reject); + return () => {}; + }); + res.writeHead(200, { + "Content-Type": "text/html; charset=utf-8", + "Cache-Control": "no-cache", + }); + createReadStream(indexPath).pipe(res); + return; + } catch { + // fall through to 404 + } + } + // fall through to 404 + } + } catch { + // any error -> fall through to 404 + } + } + + res.statusCode = 404; + res.statusMessage = "Not Found"; + res.end(); + return; + } + + try { + yield* scoped(function* () { + yield* useLabels({ name: "Transport" }); + let args = + req.method?.toUpperCase() === "POST" + ? JSON.parse(yield* read(req)) + : []; + let result = validate(protocol.methods[name].args, args); + + if (!result.ok) { + res.statusCode = 400; + res.statusMessage = "Invalid Arguments"; + let { name, message } = result.error; + res.write(JSON.stringify({ name, message }, null, 2)); + return; + } + + res.writeHead(200, { + "Content-Type": "text/event-stream; charset=utf-8", + "Cache-Control": "no-cache", + Connection: "keep-alive", + "X-Accel-Buffering": "no", + }); + + // send headers immediately to establish SSE with client + res.flushHeaders(); + + let subscription = yield* handle.invoke({ name, args }); + let { resolve: resolveDone, operation: done } = + withResolvers(); + + yield* spawn(function* () { + yield* useLabels({ name: "EventPump" }); + let next = yield* subscription.next(); + + while (!next.done) { + res.write("event: progress\n"); + res.write(`data: ${JSON.stringify(next.value)}\n\n`); + next = yield* subscription.next(); + } + res.write("event: return\n"); + res.write(`data: ${JSON.stringify(next.value ?? null)}\n\n`); + + resolveDone(); + }); + + yield* race([onceEmit(res, "close"), done]); + }); + } finally { + yield* action((resolve) => { + res.end(resolve); + return () => {}; + }); + } + }); + }); + + yield* action((resolve) => { + server.listen(options.port, resolve); + return () => {}; + }); + + try { + yield* provide(server.address() as AddressInfo); + } finally { + yield* action((resolve, reject) => { + server.close((err) => { + err ? reject(err) : resolve(); + }); + return () => {}; + }); + } + }); +} + +function onceEmit( + emitter: EventEmitter, + eventName: string, +): Operation { + return action((resolve) => { + let listener = (...args: TArgs) => resolve(args); + emitter.once(eventName, listener); + return () => emitter.off(eventName, listener); + }); +} + +function onEmit( + emitter: EventEmitter, + eventName: string, +): Stream { + return resource(function* (provide) { + let signal = createSignal(); + let listener = (...args: TArgs) => signal.send(args); + + emitter.on(eventName, listener); + + try { + yield* provide(yield* signal); + } finally { + emitter.off(eventName, listener); + } + }); +} + +function read(readable: Readable): Operation { + return scoped(function* () { + let buffer = ""; + yield* spawn(function* () { + for (let chunk of yield* each(onEmit(readable, "data"))) { + buffer += chunk ? String(chunk) : ""; + yield* each.next(); + } + }); + yield* onceEmit(readable, "end"); + return buffer; + }); +} + +function getContentType(ext: string): string { + switch (ext) { + case ".html": + return "text/html; charset=utf-8"; + case ".js": + case ".mjs": + return "application/javascript; charset=utf-8"; + case ".css": + return "text/css; charset=utf-8"; + case ".json": + return "application/json; charset=utf-8"; + case ".png": + return "image/png"; + case ".jpg": + case ".jpeg": + return "image/jpeg"; + case ".svg": + return "image/svg+xml"; + case ".ico": + return "image/x-icon"; + case ".wasm": + return "application/wasm"; + case ".map": + return "application/json; charset=utf-8"; + default: + return "application/octet-stream"; + } +} diff --git a/inspector/lib/types.ts b/inspector/lib/types.ts new file mode 100644 index 00000000..c54d4aab --- /dev/null +++ b/inspector/lib/types.ts @@ -0,0 +1,41 @@ +import type { Operation, Scope, Stream, Yielded } from "effection"; +import type { StandardSchemaV1 } from "@standard-schema/spec"; + +export interface Method { + args: StandardSchemaV1; + progress: StandardSchemaV1; + returns: StandardSchemaV1; +} + +export type Methods = Record>; + +export interface InvocationArgs { + name: N; + args: StandardSchemaV1.InferInput; +} + +export type InvocationResult = Stream< + StandardSchemaV1.InferInput, + StandardSchemaV1.InferInput +>; + +export interface Protocol { + methods: M; +} + +export type Implementation = (scope: Scope) => Operation<{ + [N in keyof M]: ( + ...args: InvocationArgs["args"] + ) => InvocationResult; +}>; + +export type Handle = { + protocol: Protocol; + invoke(args: InvocationArgs): InvocationResult; + methods: Yielded>>; +}; + +export interface Inspector { + protocol: Protocol; + attach(scope: Scope): Operation>; +} diff --git a/inspector/lib/validate.ts b/inspector/lib/validate.ts new file mode 100644 index 00000000..6eead1b6 --- /dev/null +++ b/inspector/lib/validate.ts @@ -0,0 +1,30 @@ +import type { StandardSchemaV1 } from "@standard-schema/spec"; +import { Err, Ok, type Result } from "effection"; +import { unbox } from "./box.ts"; + +export function validateUnsafe( + schema: StandardSchemaV1, + value: unknown, + description?: string, +): StandardSchemaV1.InferInput> { + return unbox(validate(schema, value, description)); +} + +export function validate( + schema: StandardSchemaV1, + value: unknown, + description?: string, +): Result>> { + let validation = schema["~standard"].validate(value); + if (validation instanceof Promise) { + return Err( + new TypeError("invalid protocol: async validations are not allowed"), + ); + } + if (validation.issues) { + let issues = validation.issues.join("\n"); + let message = description ? `${description} ${issues}` : issues; + return Err(new TypeError(message)); + } + return Ok(validation.value); +} diff --git a/inspector/mod.ts b/inspector/mod.ts new file mode 100644 index 00000000..945209dd --- /dev/null +++ b/inspector/mod.ts @@ -0,0 +1 @@ +export * from "./lib/mod.ts"; diff --git a/inspector/node.ts b/inspector/node.ts new file mode 100644 index 00000000..9e782df4 --- /dev/null +++ b/inspector/node.ts @@ -0,0 +1,39 @@ +import { global } from "effection"; +import { api } from "effection/experimental"; +import { combine } from "./mod.ts"; +import { scope } from "./scope/implementation.ts"; +import { player } from "./player/implementation.ts"; +import { attach } from "./lib/attach.ts"; +import { useSSEServer } from "./lib/sse-server.ts"; +import { useLabels } from "./lib/labels.ts"; +import { pause } from "./player/implementation.ts"; +import packageJSON from "./package.json" with { type: "json" }; + +const inspector = combine.inspectors(scope, player); + +global.decorate(api.Main, { + main([body], next) { + return next(function* (args) { + yield* useLabels({ name: "main", args: args.join(" ") }); + + yield* attach(global, inspector, function* (handle) { + let address = yield* useSSEServer(handle, { port: 41000 }); + + let { version } = packageJSON; + console.log( + `effection inspector@${version} running at http://localhost:${address.port}/live`, + ); + }); + + if (args.includes("--suspend")) { + yield* pause(); + } + + yield* body(args); + + if (args.includes("--suspend")) { + yield* pause(); + } + }); + }, +}); diff --git a/inspector/package.json b/inspector/package.json new file mode 100644 index 00000000..93ebe9ab --- /dev/null +++ b/inspector/package.json @@ -0,0 +1,65 @@ +{ + "name": "@effectionx/inspector", + "version": "0.0.1", + "type": "module", + "license": "MIT", + "author": "engineering@frontside.com", + "repository": { + "type": "git", + "url": "git+https://github.com/thefrontside/effectionx.git" + }, + "bugs": { + "url": "https://github.com/thefrontside/effectionx/issues" + }, + "engines": { + "node": ">= 22" + }, + "sideEffects": false, + "files": ["dist", "ui/dist"], + "scripts": { + "start": "vite --host 0.0.0.0", + "build:bundle": "vite build" + }, + "peerDependencies": { + "effection": "^4.x.x" + }, + "dependencies": { + "@ark/util": "^0.56.0", + "@effectionx/stream-helpers": "workspace:*", + "@standard-schema/spec": "^1.0.0", + "arktype": "^2.1.27", + "canvg": "^4.0.3", + "react-d3-tree": "^3.6.6", + "react-router": "^7.13.0", + "remeda": "^2", + "sse-stream-transform": "^1.0.0", + "zod": "^4.1.13" + }, + "devDependencies": { + "@effectionx/bdd": "workspace:*", + "@react-spectrum/s2": "^1.0.0", + "@types/d3": "^7.4.3", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^5.1.2", + "d3": "^7.9.0", + "effection": "https://pkg.pr.new/thefrontside/effection@6a01504", + "lightningcss": "^1.31.1", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-redux": "^9.2.0", + "unplugin-parcel-macros": "^0.1.1", + "vite": "^7.3.1" + }, + "exports": { + ".": { + "development": "./mod.ts", + "default": "./dist/mod.js" + }, + "./node": { + "development": "./node.ts", + "default": "./dist/node.js" + }, + "./package.json": "./package.json" + } +} diff --git a/inspector/player/implementation.ts b/inspector/player/implementation.ts new file mode 100644 index 00000000..0a4f1e41 --- /dev/null +++ b/inspector/player/implementation.ts @@ -0,0 +1,82 @@ +import { + createChannel, + createContext, + lift, + resource, + type Subscription, + withResolvers, + type Operation, +} from "effection"; +import { createImplementation } from "../lib/implementation.ts"; +import { protocol } from "./protocol.ts"; +import { op } from "../lib/impl.ts"; + +export type PlayerStatus = "playing" | "paused"; + +export type PlayerContext = + | { + status: "playing"; + } + | { + status: "paused"; + resume: () => Operation; + }; + +const PlayerContext = createContext<{ ref: PlayerContext }>( + "@effectionx/inspector.player", +); + +const state = createChannel(); + +export const player = createImplementation(protocol, function* (root) { + root.set(PlayerContext, { ref: { status: "playing" } }); + return { + play: op(function* () { + let cxt = yield* getContext(); + if (cxt && cxt.status === "paused") { + yield* setContext({ status: "playing" }); + yield* cxt.resume(); + } + }), + + watchPlayerState: () => + resource(function* (provide) { + let context = yield* getContext(); + let current: IteratorYieldResult = { + done: false, + value: context ? context.status : "playing", + }; + let states = yield* state; + let subscription: Subscription = { + *next() { + subscription.next = states.next; + return current; + }, + }; + yield* provide(subscription); + }), + }; +}); + +export function* pause() { + let resumed = withResolvers(); + yield* setContext({ + status: "paused", + resume: lift(resumed.resolve), + }); + + yield* resumed.operation; +} + +function* setContext(value: PlayerContext): Operation { + let context = yield* PlayerContext.expect(); + + context.ref = value; + + yield* state.send(value.status); +} + +function* getContext(): Operation { + let context = yield* PlayerContext.expect(); + return context.ref; +} diff --git a/inspector/player/mod.ts b/inspector/player/mod.ts new file mode 100644 index 00000000..e69de29b diff --git a/inspector/player/protocol.ts b/inspector/player/protocol.ts new file mode 100644 index 00000000..6476d09d --- /dev/null +++ b/inspector/player/protocol.ts @@ -0,0 +1,15 @@ +import { type } from "arktype"; +import { createProtocol } from "../lib/protocol.ts"; + +export const protocol = createProtocol({ + watchPlayerState: { + args: type("never[]"), + progress: type("'playing' | 'paused'"), + returns: type("never"), + }, + play: { + args: type("never[]"), + progress: type("never"), + returns: type("undefined"), + }, +}); diff --git a/inspector/scope/implementation.ts b/inspector/scope/implementation.ts new file mode 100644 index 00000000..e96b8171 --- /dev/null +++ b/inspector/scope/implementation.ts @@ -0,0 +1,138 @@ +import type { Inspector } from "../lib/mod.ts"; +import { createImplementation, toJson } from "../lib/mod.ts"; +import { op } from "../lib/impl.ts"; +import { createContext, createSignal, type Scope } from "effection"; +import { api } from "effection/experimental"; +import { + protocol, + type ScopeNode, + type ScopeEvent, + type ScopeTree, +} from "./protocol.ts"; +import { pipe } from "remeda"; +import { getLabels, LabelsContext } from "../lib/labels.ts"; +import { createSubject } from "@effectionx/stream-helpers"; + +const Id = createContext("@effectionx/inspector.id", "global"); +const Children = createContext>( + "@effection/scope.children", + new Set(), +); + +export const scope = createImplementation(protocol, function* (root) { + let ids = 0; + let { send, ...stream } = createSignal(); + + root.set(LabelsContext, { name: "Global" }); + + // give every node an id that does not have it. + visit( + root, + (_current, { scope }) => { + scope.set(Id, String(ids++)); + }, + null, + ); + + root.decorate(api.Scope, { + create([parent], next) { + let parentId = parent.expect(Id); + let [scope, destroy] = next(parent); + + let id = scope.set(Id, String(ids++)); + + send({ + type: "created", + id, + parentId, + }); + return [scope, destroy]; + }, + *destroy([scope], next) { + let id = scope.expect(Id); + send({ type: "destroying", id }); + try { + yield* next(scope); + send({ + type: "destroyed", + id, + result: { ok: true }, + }); + } catch (error) { + let { name, message, stack } = error as Error; + send({ + type: "destroyed", + id, + result: { ok: false, error: { name, message, stack } }, + }); + throw error; + } + }, + + set([contexts, context, value], next) { + if (context.name === LabelsContext.name) { + send({ + type: "set", + id: String(contexts[Id.name]), + contextName: context.name, + contextValue: toJson(value), + }); + } + return next(contexts, context, value); + }, + }); + + return { + watchScopes: () => + pipe( + stream, + createSubject({ type: "tree", value: readTree(root) }), + ), + getScopes: op(function* () { + return readTree(root); + }), + }; +}) as Inspector; + +function readTree(root: Scope): ScopeTree { + return visit( + root, + (nodes, { scope, parentId }) => { + nodes.push({ + id: scope.expect(Id), + parentId, + data: { [LabelsContext.name]: getLabels(scope) }, + }); + }, + [] as ScopeNode[], + ); +} + +function visit( + scope: Scope, + visitor: (current: T, node: { parentId?: string; scope: Scope }) => void, + initial: T, +): T { + let sum = initial; + let visit: Array<{ + parentId?: string; + scope: Scope; + }> = [{ scope }]; + + let current = visit.pop(); + while (current) { + let id = current.scope.expect(Id); + let result = visitor(sum, { + scope: current.scope, + parentId: current.parentId, + }); + if (result != null) { + sum = result; + } + + let children = current.scope.expect(Children); + visit.push(...[...children].map((scope) => ({ scope, parentId: id }))); + current = visit.pop(); + } + return sum; +} diff --git a/inspector/scope/mod.ts b/inspector/scope/mod.ts new file mode 100644 index 00000000..c3fef7db --- /dev/null +++ b/inspector/scope/mod.ts @@ -0,0 +1,2 @@ +export * from "./implementation.ts"; +export * from "./protocol.ts"; diff --git a/inspector/scope/protocol.ts b/inspector/scope/protocol.ts new file mode 100644 index 00000000..054cfd1e --- /dev/null +++ b/inspector/scope/protocol.ts @@ -0,0 +1,81 @@ +import { scope } from "arktype"; +import { createProtocol } from "../lib/mod.ts"; + +const $ = scope({ + ScopeNode: { + id: "string", + "parentId?": "string", + data: "Record", + }, + ScopeTree: "ScopeNode[]", + Error: { + name: "string", + message: "string", + stack: "string?", + }, + Result: () => + $.type.or( + { + ok: "true", + }, + { + ok: "false", + error: "Error", + }, + ), + ScopeEvent: () => + $.type.or( + { + type: "'tree'", + value: "ScopeTree", + }, + { + type: "'created'", + id: "string", + parentId: "string", + }, + { + type: "'destroying'", + id: "string", + }, + { + type: "'destroyed'", + id: "string", + result: "Result", + }, + { + type: "'set'", + id: "string", + contextName: "string", + contextValue: "object.json", + }, + { + type: "'delete'", + id: "string", + contextName: "string", + didHave: "boolean", + }, + ), + Never: "never", + None: "never[]", + Undef: "undefined", +}); + +const schema = $.export(); + +export type ScopeEvent = typeof schema.ScopeEvent.infer; +export type ScopeNode = typeof schema.ScopeNode.infer; +export type ScopeTree = typeof schema.ScopeTree.infer; + +export const protocol = createProtocol({ + watchScopes: { + args: schema.None, + progress: schema.ScopeEvent, + returns: schema.Undef, + }, + getScopes: { + args: schema.None, + progress: schema.Never, + returns: schema.ScopeTree, + }, +}); diff --git a/inspector/tests/combine.test.ts b/inspector/tests/combine.test.ts new file mode 100644 index 00000000..ffe24c7e --- /dev/null +++ b/inspector/tests/combine.test.ts @@ -0,0 +1,92 @@ +import { describe, it } from "@effectionx/bdd"; +import { expect } from "expect"; +import { combine, createImplementation, createProtocol } from "../lib/mod.ts"; +import { scope } from "arktype"; +import type { Stream } from "effection"; +import type { Method } from "../lib/types.ts"; + +describe("combine", () => { + it("combines protocols methods", function* () { + type AMethods = { a: Method }; + type BMethods = { b: Method }; + + const schema = scope({ + NoneArr: "never[]", + None: "never", + Str: "string", + }).export(); + + const aMethods: AMethods = { + a: { args: schema.NoneArr, progress: schema.None, returns: schema.Str }, + }; + const bMethods: BMethods = { + b: { args: schema.NoneArr, progress: schema.None, returns: schema.Str }, + }; + + const a = createProtocol(aMethods); + const b = createProtocol(bMethods); + + const combined = combine.protocols(a, b); + expect(Object.keys(combined.methods).sort()).toEqual(["a", "b"]); + }); + + it("combines inspectors and their attach results", function* () { + type AMethods = { a: Method }; + type BMethods = { b: Method }; + + const schema = scope({ + NoneArr: "never[]", + None: "never", + Str: "string", + }).export(); + + const aProtoMethods: AMethods = { + a: { args: schema.NoneArr, progress: schema.None, returns: schema.Str }, + }; + const bProtoMethods: BMethods = { + b: { args: schema.NoneArr, progress: schema.None, returns: schema.Str }, + }; + + const aProto = createProtocol(aProtoMethods); + const bProto = createProtocol(bProtoMethods); + + const aIns = createImplementation(aProto, function* () { + return { + *a(): Stream { + return { + *next() { + return { done: true, value: "A" }; + }, + }; + }, + }; + }); + + const bIns = createImplementation(bProto, function* () { + return { + *b(): Stream { + return { + *next() { + return { done: true, value: "B" }; + }, + }; + }, + }; + }); + + const combined = combine.inspectors(aIns, bIns); + const handle = yield* combined.attach(); + + expect(Object.keys(handle.protocol.methods).sort()).toEqual(["a", "b"]); + + const aStream = handle.invoke({ name: "a", args: [] }); + const aSub = yield* aStream; + const aNext = yield* aSub.next(); + expect(aNext).toEqual({ done: true, value: "A" }); + + const bStream = handle.invoke({ name: "b", args: [] }); + const bSub = yield* bStream; + const bNext = yield* bSub.next(); + expect(bNext).toEqual({ done: true, value: "B" }); + }); +}); diff --git a/inspector/tests/implementation.test.ts b/inspector/tests/implementation.test.ts new file mode 100644 index 00000000..79c12cb5 --- /dev/null +++ b/inspector/tests/implementation.test.ts @@ -0,0 +1,53 @@ +import { describe, it } from "@effectionx/bdd"; +import { expect } from "expect"; +import type { Stream } from "effection"; +import { scope } from "arktype"; +import type { Method } from "../lib/types.ts"; + +import { createImplementation, createProtocol } from "../lib/mod.ts"; + +describe("createImplementation()", () => { + it("attach yields a handle with protocol and methods and invoke calls the method", function* () { + type EchoMethod = { echo: Method }; + + const schema = scope({ + NoneArr: "never[]", + None: "never", + Str: "string", + }).export(); + + const protocolMethods: EchoMethod = { + echo: { + args: schema.NoneArr, + progress: schema.None, + returns: schema.Str, + }, + }; + + const protocol = createProtocol(protocolMethods); + + const inspector = createImplementation(protocol, function* () { + return { + *echo(): Stream { + return { + *next() { + return { done: true, value: "hello" }; + }, + }; + }, + }; + }); + + const handle = yield* inspector.attach(); + + // ensure protocol and methods exist + expect(handle.protocol).toBe(protocol); + expect(typeof handle.methods.echo).toBe("function"); + + // invoke the method and read the stream result + const stream = handle.invoke({ name: "echo", args: [] }); + const sub = yield* stream; + const next = yield* sub.next(); + expect(next).toEqual({ done: true, value: "hello" }); + }); +}); diff --git a/inspector/tests/implementation.types.test.ts b/inspector/tests/implementation.types.test.ts new file mode 100644 index 00000000..427f08d5 --- /dev/null +++ b/inspector/tests/implementation.types.test.ts @@ -0,0 +1,29 @@ +import type { Implementation } from "../lib/types.ts"; +import { scope } from "arktype"; +import type { Method } from "../lib/types.ts"; + +// This file is a compile-time (type-level) test to ensure that +// `createImplementation` enforces the method signatures described by the +// protocol (i.e. the `Implementation` type). If the types below do not +// conform, the TypeScript type-check will fail. + +const _schema = scope({ + Args: "string[]", + Obj: { greeting: "string" }, +}).export(); + +type FooMethods = { greet: Method<[string], never, { greeting: string }> }; + +// This implementation must match `Implementation` exactly. If it +// doesn't, the type-check will fail and indicate a problem in the typings. +const _impl: Implementation = function* () { + return { + *greet(name: string) { + return { + *next() { + return { done: true, value: { greeting: `hello ${name}` } }; + }, + }; + }, + }; +}; diff --git a/inspector/tests/protocol.test.ts b/inspector/tests/protocol.test.ts new file mode 100644 index 00000000..b32d1445 --- /dev/null +++ b/inspector/tests/protocol.test.ts @@ -0,0 +1,19 @@ +import { describe, it } from "@effectionx/bdd"; +import { expect } from "expect"; +import type { Methods } from "../lib/types.ts"; +import { scope } from "arktype"; + +import { createProtocol } from "../lib/mod.ts"; + +describe("createProtocol()", () => { + it("returns a protocol object containing the provided methods", function* () { + const schema = scope({ None: "never[]" }).export(); + + const methods: Methods = { + foo: { args: schema.None, progress: schema.None, returns: schema.None }, + }; + const protocol = createProtocol(methods); + + expect(protocol.methods).toBe(methods); + }); +}); diff --git a/inspector/tsconfig.json b/inspector/tsconfig.json new file mode 100644 index 00000000..27f9ee97 --- /dev/null +++ b/inspector/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["**/*.ts", "package.json"], + "exclude": [ + "ui", + "*.config.ts", + "**/*.test.ts", + "dist", + "example.ts", + "pipeline-test.ts" + ], + "references": [ + { + "path": "../bdd" + } + ] +} diff --git a/inspector/ui/components/DetailsPanel.tsx b/inspector/ui/components/DetailsPanel.tsx new file mode 100644 index 00000000..3339c8c4 --- /dev/null +++ b/inspector/ui/components/DetailsPanel.tsx @@ -0,0 +1,180 @@ +import type { Hierarchy } from "../data/types"; + +import { Divider, Button, Heading, Content } from "@react-spectrum/s2"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; + +import { flattenNodeData } from "../utils/labels"; +import { getNodeLabel } from "../data/labels"; +import { findParent } from "../data/findParent"; +import { EntityRow } from "./EntityRow"; + +export function DetailsPanel(props: { + node?: Hierarchy | undefined; + hierarchy?: Hierarchy | undefined; +}) { + const { node, hierarchy } = props; + + if (!node) { + return ( +
+ Attributes + Nothing selected +
+ ); + } + + const properties: Array<{ k: string; v: string }> = flattenNodeData( + node.data, + ); + + function resolveClass( + c: string | ((props?: Record) => string) | undefined, + ) { + if (!c) return undefined; + return typeof c === "function" ? c() : c; + } + + function copyAllProperties() { + if (!node) return; + const txt = JSON.stringify(node.data ?? {}, null, 2); + if ( + navigator.clipboard && + typeof navigator.clipboard.writeText === "function" + ) { + navigator.clipboard.writeText(txt).catch(() => {}); + } + } + + return ( +
+
+
+
+ {getNodeLabel(node)} +
+
+ {String(node.data?.type ?? "")} +
+
+
+ ● {String(node.data?.status ?? "")} +
+
+ + + +
+
+ Properties +
+ +
+
+ +
+
+ {properties.length === 0 ? ( +
+ No properties +
+ ) : ( + properties.map((p) => ( +
+
+ {p.k} +
+
+ {String(p.v)} +
+
+ )) + )} +
+
+
+ + + +
+ Parent + {(() => { + const providedHierarchy = hierarchy as Hierarchy | undefined; + const realParent = findParent(providedHierarchy, node.id); + + if (!realParent) return
No parent
; + + return ; + })()} +
+ +
+ Children + {node.children?.map((c: Hierarchy) => ( + + ))} +
+
+ ); +} diff --git a/inspector/ui/components/EntityRow.tsx b/inspector/ui/components/EntityRow.tsx new file mode 100644 index 00000000..054e1235 --- /dev/null +++ b/inspector/ui/components/EntityRow.tsx @@ -0,0 +1,32 @@ +import type { Hierarchy } from "../data/types"; +import { getNodeLabel } from "../data/labels"; +import { useNavigate } from "react-router"; +import { childRowStyle, childTypeStyle } from "./entity-row-styles"; + +export function EntityRow(props: { + node: Hierarchy; + onActivate?: (id: string) => void; +}) { + const { node, onActivate } = props; + const navigate = useNavigate(); + + function activate() { + const id = node.id; + onActivate?.(id); + const encoded = encodeURIComponent(id); + const parts = window.location.pathname.split("/").filter(Boolean); + const base = parts[0] ? `/${parts[0]}` : ""; + navigate(`${base}/${encoded}`); + } + + return ( + + ); +} diff --git a/inspector/ui/components/Graphic.tsx b/inspector/ui/components/Graphic.tsx new file mode 100644 index 00000000..6e60ae01 --- /dev/null +++ b/inspector/ui/components/Graphic.tsx @@ -0,0 +1,227 @@ +import { createRef, useLayoutEffect, useState } from "react"; +import type { Hierarchy } from "../data/types.ts"; +import { Tree, type RawNodeDatum } from "react-d3-tree"; +import { type Labels, LabelsContext } from "../../lib/labels.ts"; +import { ActionButton, ToastQueue } from "@react-spectrum/s2"; +import { exportSvgElementToPng, exportSvgElement } from "./exportGraphic"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; + +const _graphicStyleObj = { + selectors: { + "@media (prefers-color-scheme: dark)": { + "& .node__root > circle": { fill: "steelblue", stroke: "lightblue" }, + "& .node__branch > circle": { fill: "slategray", stroke: "grey" }, + "& .node__leaf > circle": { + fill: "green", + stroke: "darkgreen", + opacity: 0.8, + }, + "& path.rd3t-link": { strokeWidth: 2, stroke: "white" }, + "& text.rd3t-label__title": { fill: "ivory" }, + "& text.rd3t-label__attributes": { fill: "lightblue" }, + }, + }, +} as const; + +const graphicStyles = style({ + default: _graphicStyleObj, +} as const); + +function resolveClass( + c: string | ((props?: Record) => string) | undefined, + props?: Record, +) { + if (!c) return undefined; + return typeof c === "function" ? c(props) : c; +} + +// Container style to ensure the graphic fills the available space in the pane +const graphicContainer = style({ + display: "flex", + flex: "1 1 0%", + minHeight: 0, + minWidth: 0, + width: "100%", + height: "100%", + position: "relative", +} as const); + +const controlsStyle = style({ + position: "absolute", + top: 8, + right: 8, + zIndex: 10, + selectors: { + "& .spectrum-ActionButton": { paddingBlock: 6, paddingInline: 10 }, + "& .spectrum-ActionButton + .spectrum-ActionButton": { marginLeft: 8 }, + }, +}); + +// const themeBasedFill = (dark: string, light: string) => +// window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches +// ? dark +// : light; + +export function Graphic({ hierarchy }: { hierarchy?: Hierarchy }) { + const ref = createRef(); + const [dimensions, setDimensions] = useState< + | { + width: number; + height: number; + } + | undefined + >(); + + // biome-ignore lint/correctness/useExhaustiveDependencies: dimensions handled if not defined as a comparator + useLayoutEffect(() => { + const handleResize = () => { + if (ref.current) { + let box = ref.current.getBoundingClientRect(); + // If the wrapper reports a very small width (due to internal layout + // constraints), walk ancestors to find a more representative size + // (e.g., the tab panel inner area) so the tree can render large. + if (box.width < 400) { + let el: HTMLElement | null = ref.current; + while (el && el.parentElement) { + const pRect = el.parentElement.getBoundingClientRect(); + if (pRect.width > box.width) { + box = pRect; + } + el = el.parentElement; + } + } + setDimensions({ + width: Math.max(0, box.width), + height: Math.max(0, box.height), + }); + } + }; + + // Initial size set + handleResize(); + + // Prefer ResizeObserver for element-level resize detection so the tree + // can react to flexbox layout changes (not just window resizes). + let ro: ResizeObserver | undefined; + if (typeof ResizeObserver !== "undefined") { + ro = new ResizeObserver(() => { + handleResize(); + }); + if (ref.current) ro.observe(ref.current); + } else { + window.addEventListener("resize", handleResize); + } + + // Also re-measure on next paint to catch any race where layout finishes + // after initial mount. + const raf = requestAnimationFrame(() => handleResize()); + + return () => { + if (ro && ref.current) ro.unobserve(ref.current); + if (!ro) window.removeEventListener("resize", handleResize); + cancelAnimationFrame(raf); + }; + }, []); + + async function exportToPng() { + if (!ref.current) return; + const svg = ref.current.querySelector("svg"); + if (!svg) return; + + try { + const res = await exportSvgElementToPng( + svg as SVGElement, + "effectionx-graph", + ); + ToastQueue.positive(`Saved ${res.fileName}`, { timeout: 5000 }); + } catch (err: unknown) { + console.error("export failed", err); + const debug = + typeof err === "object" && err !== null && "debugSvg" in err + ? (err as { debugSvg?: string }).debugSvg + : undefined; + ToastQueue.negative("Export failed", { + actionLabel: "Show details", + onAction: () => { + if (debug) { + const b = new Blob([debug], { + type: "image/svg+xml;charset=utf-8", + }); + const url = URL.createObjectURL(b); + const a = document.createElement("a"); + a.href = url; + a.download = `effectionx-graph-debug-${Date.now()}.svg`; + document.body.appendChild(a); + a.click(); + a.remove(); + setTimeout(() => URL.revokeObjectURL(url), 10000); + } else { + // no debug available — do nothing (toast will close) + } + }, + shouldCloseOnAction: true, + }); + } + } + + function exportToSvg() { + if (!ref.current) return; + const svg = ref.current.querySelector("svg"); + if (!svg) return; + + try { + const res = exportSvgElement(svg as SVGElement, "effectionx-graph"); + ToastQueue.positive(`Saved ${res.fileName}`, { timeout: 5000 }); + } catch (err) { + console.error("SVG export failed", err); + ToastQueue.negative("Export SVG failed", { timeout: 5000 }); + } + } + + return hierarchy ? ( +
+
+ + Export PNG + + + Export SVG + +
+ +
+ ) : ( +
+ ); +} + +function transform2D3(hierarchy: Hierarchy): RawNodeDatum { + let { data } = hierarchy; + let { name, ...attributes } = (data[LabelsContext.name] ?? + LabelsContext.defaultValue) as Labels; + return { + name: name as string, + attributes, + // to set as proper leaf nodes when no children + ...(hierarchy.children.length === 0 + ? {} + : { children: hierarchy.children.map(transform2D3) }), + }; +} diff --git a/inspector/ui/components/HierarchyTree.tsx b/inspector/ui/components/HierarchyTree.tsx new file mode 100644 index 00000000..70cbb902 --- /dev/null +++ b/inspector/ui/components/HierarchyTree.tsx @@ -0,0 +1,444 @@ +import { useState, useEffect } from "react"; + +import { + TreeView, + TreeViewItem, + TreeViewItemContent, +} from "@react-spectrum/s2"; +import type { Hierarchy } from "../data/types"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +// import { } from '@react-spectrum/s2/utils' + +const _treeStyleObj = { + paddingY: "8", + paddingX: "12", + height: "100%", + overflow: "auto", + boxSizing: "border-box", + selectors: { + '& [role="gridcell"] > div': { + display: "flex", + alignItems: "center", + gap: "8", + width: "100%", + justifyContent: "flex-start", + gridColumn: "2 / -1", + }, + '& [role="row"]': { alignItems: "center", minHeight: "[40px]" }, + /* Make the expand/collapse button easier to hit and align the svg */ + '& [role="gridcell"] button': { + width: "[36px]", + height: "[36px]", + display: "inline-flex", + alignItems: "center", + justifyContent: "center", + marginInlineEnd: "8", + padding: "0", + background: "transparent", + border: "none", + }, + '& [role="gridcell"] button svg': { + width: "[18px]", + height: "[18px]", + }, + /* visually de-emphasize the native expand/collapse button; keep it in the DOM for keyboard users */ + '& [role="gridcell"] > div > button[aria-label^="Expand"], & [role="gridcell"] > div > button[aria-label^="Collapse"]': + { + opacity: "0", + pointerEvents: "none", + }, + }, +} as const; +const treeStyles = style({ ..._treeStyleObj } as const); + +// Individual scoped styles replacing legacy classnames +const nodeBaseStyle = style({ + display: "flex", + alignItems: "center", + gap: "12", + paddingY: "8", + paddingStart: "8", + paddingEnd: "12", + minHeight: "[44px]", + borderBottomWidth: "1", + borderStyle: "solid", + borderColor: "var(--spectrum-global-color-gray-100)", + selectors: { + "&:hover": { background: "var(--spectrum-global-color-gray-50)" }, + "& svg": { display: "inline-block", verticalAlign: "middle" }, + }, +} as const); + +const nodeSelectedStyle = style({ + background: + "var(--spectrum-alias-background-selected, rgba(0, 120, 212, 0.04))", + borderStartWidth: "2", + borderStyle: "solid", + borderColor: "var(--spectrum-global-color-blue-600)", + paddingStart: "12", + selectors: { + "& span": { color: "var(--spectrum-global-color-gray-950)" }, + }, +} as const); + +const hierarchyNodeNameStyle = style({ + cursor: "pointer", + font: "body", + fontWeight: "bold", + whiteSpace: "nowrap", + overflow: "hidden", + textOverflow: "ellipsis", +}); +const hierarchyNodeTypeStyle = style({ + marginStart: "auto", + color: "var(--spectrum-global-color-gray-600)", + font: "body-sm", + whiteSpace: "nowrap", + alignSelf: "center", + fontWeight: "bold", + selectors: { + "&:before": { content: "''", display: "inline-block", width: "[8px]" }, + }, +} as const); +const hierarchyNoDataStyle = style({ + color: "var(--spectrum-global-color-gray-600)", +} as const); +const statusColorBase = { + // width: "[20px]", + // height: "[20px]", + // flex: "0 0 20px", + // display: "inline-flex", + // alignItems: "center", + // justifyContent: "center", + // backgroundColor: "var(--spectrum-global-color-gray-50)", + // borderRadius: "9999px", + // padding: "2", + // marginEnd: "8", + color: "white", +} as const; + +const statusColor = { + color: { + status: { + default: "var(--spectrum-global-color-gray-600)", + running: "var(--spectrum-global-color-green-600)", + completed: "var(--spectrum-global-color-gray-400)", + error: "var(--spectrum-global-color-red-600)", + pending: "var(--spectrum-global-color-yellow-600)", + }, + }, +} as const; + +const typeBadgeStyle = style({ + default: { + display: "inline-flex", + alignItems: "center", + justifyContent: "center", + width: "[20px]", + height: "[20px]", + marginStart: "8", + marginEnd: "8", + background: "transparent", + borderRadius: "[4px]", + color: "var(--spectrum-global-color-gray-700)", + fontSize: "[12px]", + fontWeight: "bold", + }, +} as const); + +// Left-side toggle button to visually place expand affordance on the left while delegating intent +const leftExpandStyle = style({ + width: "[36px]", + height: "[36px]", + display: "inline-flex", + alignItems: "center", + justifyContent: "center", + marginEnd: "8", + padding: "0", + background: "transparent", + border: "none", + cursor: "pointer", + color: "var(--spectrum-global-color-gray-600)", + selectors: { + "&:hover": { color: "var(--spectrum-global-color-gray-800)" }, + "& svg": { width: "[12px]", height: "[12px]" }, + }, +} as const); + +// Placeholder for leaf nodes so text aligns with toggles +const leftExpandPlaceholder = style({ + width: "[36px]", + height: "[36px]", + display: "inline-flex", + alignItems: "center", + justifyContent: "center", + marginEnd: "8", + padding: "0", + background: "transparent", + border: "none", + visibility: "hidden", +} as const); + +import Checkmark from "@react-spectrum/s2/icons/Checkmark"; +import AlertTriangle from "@react-spectrum/s2/icons/AlertTriangle"; +import Play from "@react-spectrum/s2/icons/Play"; +import ClockPending from "@react-spectrum/s2/icons/ClockPending"; +import Circle from "@react-spectrum/s2/icons/Circle"; + +import { getNodeLabel } from "../data/labels"; +import { useParams, useNavigate } from "react-router"; + +function getOperationKind(_node: Hierarchy) { + return "Operation"; +} + +const statusOptions = ["completed", "error", "running", "pending"] as const; +function getNodeStatus(node: Hierarchy): (typeof statusOptions)[number] { + return String( + node?.data?.status ?? "pending", + ) as (typeof statusOptions)[number]; +} + +const statusIconStyle = style({ + ...statusColorBase, + ...statusColor, +} as const); + +function resolveClass( + c: string | ((props?: Record) => string) | undefined, + props?: Record, +) { + if (!c) return undefined; + return typeof c === "function" ? c(props) : c; +} + +function StatusIcon({ status }: { status: string }) { + const title = status ? `Status: ${status}` : "Status"; + const className = resolveClass(statusIconStyle, { status }); + + return ( + + {status === "completed" ? ( + + ) : status === "error" ? ( + + ) : status === "running" ? ( + + ) : status === "pending" ? ( + + ) : ( + + )} + + ); +} +function ChevronIcon({ direction }: { direction: "down" | "right" }) { + // simple inline chevron icon (keeps dependency surface small) + const transform = direction === "down" ? "rotate(90 12 12)" : undefined; + return ( + + ); +} +function matches(filter: string | undefined, node: Hierarchy): boolean { + if (!filter) return true; + const search = filter.toLowerCase(); + + const nodeLabel = getNodeLabel(node); + const opKind = getOperationKind(node); + const status = getNodeStatus(node); + + if (nodeLabel.toLowerCase().includes(search)) return true; + if (opKind.toLowerCase().includes(search)) return true; + if (status.toLowerCase().includes(search)) return true; + + for (let c of node.children ?? []) { + if (matches(filter, c)) return true; + } + return false; +} + +// TODO not use event emitter +const onSelectionChange: ((id: string) => void) | undefined = undefined; + +export function HierarchyTree(props: { + hierarchy?: Hierarchy; + filter?: string; +}) { + const { hierarchy, filter } = props; + const params = useParams(); + const navigate = useNavigate(); + + function navigateToNode(id: string) { + onSelectionChange?.(id); + const encoded = encodeURIComponent(id); + const parts = window.location.pathname.split("/").filter(Boolean); + const base = parts[0] ? `/${parts[0]}` : ""; + // navigate to absolute base route to avoid appending when we're already on a node path + navigate(`${base}/${encoded}`); + } + + const [expandedKeys, setExpandedKeys] = useState>(() => { + if (!hierarchy) return new Set(); + return new Set([ + hierarchy.id, + ...(hierarchy.children?.map((c) => c.id) ?? []), + ]); + }); + + useEffect(() => { + if (!hierarchy) return; + setExpandedKeys( + new Set([ + hierarchy.id, + ...(hierarchy.children?.map((c) => c.id) ?? []), + ]), + ); + }, [hierarchy]); + + if (!hierarchy) { + return ( +
+ No data +
+ ); + } + + function toggleExpanded(id: string) { + setExpandedKeys((prev) => { + const next = new Set(Array.from(prev)); + if (next.has(id)) next.delete(id); + else next.add(id); + return next; + }); + } + + function renderItem(node: Hierarchy, depth = 1): React.ReactNode { + const isSelected = node.id === params.nodeId; + const nodeLabel = getNodeLabel(node); + const opKind = getOperationKind(node); + const status = getNodeStatus(node); + if (!matches(filter, node)) return null; + + // Predefined indent classes (style macro must be evaluated statically). Support depths 0..6. + const indentClasses = [ + style({ paddingStart: "[0px]" }), + style({ paddingStart: "[12px]" }), + style({ paddingStart: "[24px]" }), + style({ paddingStart: "[36px]" }), + style({ paddingStart: "[48px]" }), + style({ paddingStart: "[60px]" }), + style({ paddingStart: "[72px]" }), + ]; + const indentClass = + indentClasses[Math.min(depth, indentClasses.length - 1)]; + + // derive a simple type from node name / data to choose a compact icon + const nodeNameLower = nodeLabel.toLowerCase(); + function getNodeType(): "server" | "database" | "task" | "operation" { + if ( + nodeNameLower.includes("server") || + nodeNameLower.includes("httpserver") + ) + return "server"; + if (nodeNameLower.includes("database") || nodeNameLower.includes("db")) + return "database"; + if (nodeNameLower.includes("task") || nodeNameLower.includes("scheduled")) + return "task"; + return "operation"; + } + const nodeType = getNodeType(); + + const typeClass = resolveClass(typeBadgeStyle, { variant: nodeType }); + return ( + + +
{ + // if the user clicked an interactive control inside the row (expand button), + // do not treat it as a selection click — keep expand/selection targets separate. + const target = e.target as HTMLElement; + if (target && target.closest && target.closest("button")) return; + // ensure clicking the row selects it and reveals attributes + e.stopPropagation(); + navigateToNode(node.id); + }} + onKeyDown={(e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + e.stopPropagation(); + navigateToNode(node.id); + } + }} + > + {/* Left toggle / placeholder: visual affordance that toggles the controlled expanded state. For leaves we render a placeholder to keep spacing consistent */} + {node.children && node.children.length > 0 ? ( + + ) : ( +
+
+ {node.children?.map((c) => renderItem(c, depth + 1))} +
+ ); + } + + return ( +
+ { + setExpandedKeys(new Set(Array.from(keys).map(String))); + }} + onAction={(key) => { + const id = String(key); + navigateToNode(id); + }} + > + {renderItem(hierarchy)} + +
+ ); +} diff --git a/inspector/ui/components/Inspector.tsx b/inspector/ui/components/Inspector.tsx new file mode 100644 index 00000000..a58c2468 --- /dev/null +++ b/inspector/ui/components/Inspector.tsx @@ -0,0 +1,51 @@ +import { useEffect, useMemo, useState } from "react"; +import LeftPane from "./LeftPane"; +import RightPane from "./RightPane"; +import { useParams } from "react-router"; +import type { Hierarchy } from "../data/types"; +import { findNode } from "../data/findNode"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; + +function resolveClass( + c: string | ((props?: Record) => string) | undefined, + props?: Record, +) { + if (!c) return undefined; + return typeof c === "function" ? c(props) : c; +} + +type InspectorProps = { + hierarchy?: Hierarchy; +}; + +export default function Inspector({ hierarchy }: InspectorProps) { + // which tab is active in the right pane (logical name) + const [activeTab, setActiveTab] = useState<"graph" | "attributes">("graph"); + const params = useParams(); + + useEffect(() => { + if (params.nodeId) { + setActiveTab("attributes"); + } + }, [params.nodeId]); + + const selectedNode = useMemo(() => { + return findNode(hierarchy, params.nodeId as string | undefined); + }, [hierarchy, params.nodeId]); + + return ( +
+ + +
+ ); +} diff --git a/inspector/ui/components/LeftPane.tsx b/inspector/ui/components/LeftPane.tsx new file mode 100644 index 00000000..8ce03646 --- /dev/null +++ b/inspector/ui/components/LeftPane.tsx @@ -0,0 +1,80 @@ +import { SearchField } from "@react-spectrum/s2"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +import { useState } from "react"; +import type { Hierarchy } from "../data/types"; +import { HierarchyTree } from "./HierarchyTree"; + +const leftPaneSearchStyle = style({ + paddingBlock: 6, + flex: 1, + minWidth: 0, + selectors: { + "& input": { + width: "100%", + boxSizing: "border-box", + borderRadius: 18, + height: 40, + paddingInlineStart: 40, + paddingInlineEnd: 12, + paddingBlock: 0, + background: "var(--spectrum-global-color-gray-50)", + border: "1px solid var(--spectrum-global-color-gray-100)", + outline: "none", + fontSize: 14, + }, + "& input::placeholder": { color: "var(--spectrum-global-color-gray-600)" }, + '& [slot="icon"], & svg': { + position: "relative", + left: 8, + zIndex: 2, + width: 20, + height: 20, + pointerEvents: "none", + }, + }, +}); + +interface Props { + hierarchy?: Hierarchy; +} + +export default function LeftPane({ hierarchy }: Props) { + const [filter, setFilter] = useState(""); + + return ( +
+
+
+ setFilter(v)} + value={filter} + /> +
+
+ +
+ +
+
+ ); +} diff --git a/inspector/ui/components/RecordingUpload.tsx b/inspector/ui/components/RecordingUpload.tsx new file mode 100644 index 00000000..9ebdc6ff --- /dev/null +++ b/inspector/ui/components/RecordingUpload.tsx @@ -0,0 +1,85 @@ +import { + DropZone, + IllustratedMessage, + Heading, + Content, + ButtonGroup, + Button, + FileTrigger, +} from "@react-spectrum/s2"; +import type React from "react"; +import { useState } from "react"; +import CloudUpload from "@react-spectrum/s2/illustrations/gradient/generic1/CloudUpload"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; + +const fileTypes = ["text/plain", "application/json"]; + +export function RecordingUpload(props: { setFile: (file: File) => void }) { + // const dispatch = useDispatch(); + let [content, setContent] = useState(null); + return ( + + fileTypes.some((t) => types.has(t)) ? "copy" : "cancel" + } + onDrop={async (event) => { + // Find the first accepted item. + let item = event.items.find( + (item) => + (item.kind === "text" && item.types.has("text/plain")) || + (item.kind === "file" && item.type.startsWith("image/")), + ); + + if (item?.kind === "text") { + let text = await item.getText("text/plain"); + setContent(text); + } else if (item?.kind === "file") { + try { + // Try to extract a File object from the drop item if available + const accessors = item as unknown as { + getFile?: () => Promise; + getAsFile?: () => File | null; + }; + const maybeFile = accessors.getFile + ? await accessors.getFile() + : accessors.getAsFile + ? accessors.getAsFile() + : null; + if (maybeFile) { + setContent(maybeFile.name); + props.setFile(maybeFile); + } else { + console.error(item); + } + } catch (e) { + console.error(e); + } + } + }} + > + {content || ( + + + Drag and drop your file + Or, select a file from your computer + + { + if (!files) return; + const firstFile = files[0]; + props.setFile(firstFile); + }} + > + + + + + )} + + ); +} diff --git a/inspector/ui/components/RightPane.tsx b/inspector/ui/components/RightPane.tsx new file mode 100644 index 00000000..d1c0e717 --- /dev/null +++ b/inspector/ui/components/RightPane.tsx @@ -0,0 +1,123 @@ +import { Tabs, TabList, Tab, TabPanel } from "@react-spectrum/s2"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +import type { Hierarchy } from "../data/types"; +import { Graphic } from "./Graphic"; +import { DetailsPanel } from "./DetailsPanel"; + +interface Props { + hierarchy?: Hierarchy; + node?: Hierarchy | undefined; + activeTab: "graph" | "attributes"; + setActiveTab: (t: "graph" | "attributes") => void; +} + +export default function RightPane({ + hierarchy, + node, + activeTab, + setActiveTab, +}: Props) { + function resolveClass( + c: string | ((props?: Record) => string) | undefined, + ) { + if (!c) return undefined; + return typeof c === "function" ? c() : c; + } + + return ( +
+
+
+ { + if (typeof key === "string") { + if (key === "graph" || key === "attributes") { + setActiveTab(key as "graph" | "attributes"); + } else { + console.warn("Unexpected tab key", key); + } + } + }} + > + + Graph + Attributes + + + +
+
+ +
+
+
+ + +
+
+ +
+
+
+
+
+
+
+ ); +} diff --git a/inspector/ui/components/TopControls.tsx b/inspector/ui/components/TopControls.tsx new file mode 100644 index 00000000..c6c18b9d --- /dev/null +++ b/inspector/ui/components/TopControls.tsx @@ -0,0 +1,116 @@ +import { ActionButton, ActionButtonGroup, Slider } from "@react-spectrum/s2"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +import { + PauseIcon, + RefreshIcon, + PlayIcon, + StepBackIcon, + StepForwardIcon, +} from "./icons"; + +const toolbarIconStyle = style({ + display: "inline-flex", + alignItems: "center", +}); + +interface Props { + playing: boolean; + setPlaying: (v: boolean | ((p: boolean) => boolean)) => void; + offset: number; + setOffset: (v: number | ((n: number) => number)) => void; + maxValue: number; + onRefresh: () => void; +} + +export default function TopControls({ + playing, + setPlaying, + offset, + setOffset, + maxValue, + onRefresh, +}: Props) { + return ( +
+
+
+ +
+ setOffset((n) => Math.max(0, n - 1))} + > + + + + +
+ +
+ setPlaying((p: boolean) => !p)} + > + + {playing ? : } + + +
+ +
+ setOffset((n) => Math.min(maxValue, n + 1))} + > + + + + +
+ +
+ + + + + +
+
+
+
+ +
+
+ setOffset(v)} + formatOptions={{ maximumFractionDigits: 0 }} + /> +
+
+
+ ); +} diff --git a/inspector/ui/components/entity-row-styles.ts b/inspector/ui/components/entity-row-styles.ts new file mode 100644 index 00000000..3c6dcdb7 --- /dev/null +++ b/inspector/ui/components/entity-row-styles.ts @@ -0,0 +1,26 @@ +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; + +export const childRowStyle = style({ + default: { + display: "flex", + justifyContent: "space-between", + paddingBlock: 8, + borderBottom: "1px solid var(--spectrum-global-color-gray-100)", + selectors: { + "&:focus, &:hover": { + background: "rgba(0, 0, 0, 0.03)", + outline: "none", + }, + }, + }, + cursor: { + variant: { + clickable: "pointer", + }, + }, + runtime: true, +} as const); + +export const childTypeStyle = style({ + color: "var(--spectrum-global-color-gray-600)", +}); diff --git a/inspector/ui/components/exportGraphic.ts b/inspector/ui/components/exportGraphic.ts new file mode 100644 index 00000000..e68aabfa --- /dev/null +++ b/inspector/ui/components/exportGraphic.ts @@ -0,0 +1,206 @@ +// Top-level helpers (kept at module scope for easier testing and reuse) +function serializeSvgElement(el: SVGElement) { + let cssText = ""; + for (const sheet of Array.from(document.styleSheets)) { + try { + for (const rule of Array.from((sheet as CSSStyleSheet).cssRules || [])) { + cssText += `${(rule as CSSRule).cssText}\n`; + } + } catch (e) { + // ignore cross-origin stylesheets + } + } + + const serializer = new XMLSerializer(); + let svgString = serializer.serializeToString(el as SVGElement); + + const indexOfSvgTagEnd = svgString.indexOf(">"); + const styleTag = ``; + svgString = + svgString.slice(0, indexOfSvgTagEnd + 1) + + styleTag + + svgString.slice(indexOfSvgTagEnd + 1); + + if (!svgString.match(/^]+xmlns="http:\/\/www.w3.org\/2000\/svg"/)) { + svgString = svgString.replace( + "]+xmlns:xlink="http:\/\/www.w3.org\/1999\/xlink"/) + ) { + svgString = svgString.replace( + "\n${svgString}`; + } + if (!/viewBox=/.test(svgString)) { + svgString = svgString.replace( + "((resolve, reject) => { + img.onload = () => resolve(); + img.onerror = () => reject(new Error("Image load failed (data URL)")); + img.src = imgSrc; + }); + + ctx?.setTransform(scale, 0, 0, scale, 0, 0); + ctx?.drawImage(img, 0, 0); + } + + async function tryBlobRoute(svgStr: string) { + const img = new Image(); + + const blob = new Blob([svgStr], { type: "image/svg+xml;charset=utf-8" }); + const blobUrl = URL.createObjectURL(blob); + try { + await new Promise((resolve, reject) => { + img.onload = () => resolve(); + img.onerror = () => reject(new Error("Image load failed (blob URL)")); + img.src = blobUrl; + }); + + ctx?.setTransform(scale, 0, 0, scale, 0, 0); + ctx?.drawImage(img, 0, 0); + } finally { + URL.revokeObjectURL(blobUrl); + } + } + + async function tryCanvg(svgStr: string) { + // dynamic import so it isn't bundled unless needed + const module: unknown = await import("canvg"); + // v4 API: Canvg.from(ctx, svgStr) + const Canvg = ( + module as { + Canvg?: { + from?: ( + ctx: CanvasRenderingContext2D, + svg: string, + ) => Promise<{ render: () => Promise }>; + }; + } + ).Canvg; + if (!Canvg || typeof Canvg.from !== "function") + throw new Error("canvg not available"); + const v = await Canvg.from(ctx as CanvasRenderingContext2D, svgStr); + await v.render(); + } + + // Serialize first — also get width/height for canvas size + const { svgString, width, height } = serializeSvgElement(svgElement); + + // Create canvas sized to the computed dimensions and device pixel ratio + const canvas = document.createElement("canvas"); + const scale = window.devicePixelRatio || 1; + canvas.width = width * scale; + canvas.height = height * scale; + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; + const ctx = canvas.getContext("2d") as CanvasRenderingContext2D | null; + if (!ctx) throw new Error("Could not acquire canvas context"); + + let lastErr: Error | undefined; + try { + await tryImageRoute(svgString); + } catch (e) { + lastErr = e as Error; + try { + await tryBlobRoute(svgString); + } catch (e2) { + lastErr = e2 as Error; + try { + await tryCanvg(svgString); + } catch (e3) { + lastErr = e3 as Error; + // attach debug svg to the thrown error for upstream handling + type DebugError = Error & { debugSvg?: string; inner?: unknown }; + const err = new Error("All export routes failed") as DebugError; + err.debugSvg = svgString; + err.inner = lastErr; + throw err; + } + } + } + + // export canvas to blob and download + return await new Promise<{ success: boolean; fileName: string }>( + (resolve, reject) => { + canvas.toBlob((blob) => { + if (!blob) return reject(new Error("Failed to create PNG blob")); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + const fileName = `${fileNamePrefix}-${Date.now()}.png`; + a.download = fileName; + document.body.appendChild(a); + a.click(); + a.remove(); + URL.revokeObjectURL(url); + resolve({ success: true, fileName }); + }, "image/png"); + }, + ); +} diff --git a/inspector/ui/components/icons.tsx b/inspector/ui/components/icons.tsx new file mode 100644 index 00000000..60725150 --- /dev/null +++ b/inspector/ui/components/icons.tsx @@ -0,0 +1,91 @@ +export function PauseIcon(props: { size?: number }) { + const s = props.size ?? 16; + return ( + + ); +} + +export function RefreshIcon(props: { size?: number }) { + const s = props.size ?? 16; + return ( + + ); +} + +export function PlayIcon(props: { size?: number }) { + const s = props.size ?? 16; + return ( + + ); +} + +export function StepBackIcon(props: { size?: number }) { + const s = props.size ?? 16; + return ( + + ); +} + +export function StepForwardIcon(props: { size?: number }) { + const s = props.size ?? 16; + return ( + + ); +} diff --git a/inspector/ui/data/box.ts b/inspector/ui/data/box.ts new file mode 100644 index 00000000..a614d015 --- /dev/null +++ b/inspector/ui/data/box.ts @@ -0,0 +1,9 @@ +import { Err, Ok, type Operation, type Result } from "effection"; + +export function* box(op: () => Operation): Operation> { + try { + return Ok(yield* op()); + } catch (error) { + return Err(error as Error); + } +} diff --git a/inspector/ui/data/findNode.ts b/inspector/ui/data/findNode.ts new file mode 100644 index 00000000..1dd74070 --- /dev/null +++ b/inspector/ui/data/findNode.ts @@ -0,0 +1,19 @@ +import type { Hierarchy } from "./types"; + +export function findNode( + root: Hierarchy | undefined, + id: string | undefined, +): Hierarchy | undefined { + if (!root || !id) return undefined; + const stack: Hierarchy[] = [root]; + while (stack.length) { + const popped = stack.pop(); + if (!popped) break; + const current = popped; + if (current.id === id) return current; + for (const c of current.children ?? []) { + stack.push(c); + } + } + return undefined; +} diff --git a/inspector/ui/data/findParent.ts b/inspector/ui/data/findParent.ts new file mode 100644 index 00000000..2ccb0299 --- /dev/null +++ b/inspector/ui/data/findParent.ts @@ -0,0 +1,19 @@ +import type { Hierarchy } from "./types"; + +export function findParent( + root: Hierarchy | undefined, + childId: string | undefined, +): Hierarchy | undefined { + if (!root || !childId) return undefined; + let stack: Hierarchy[] = [root]; + while (stack.length) { + const popped = stack.pop(); + if (!popped) break; + const current = popped; + for (const c of current.children ?? []) { + if (c.id === childId) return current; + stack.push(c); + } + } + return undefined; +} diff --git a/inspector/ui/data/labels.ts b/inspector/ui/data/labels.ts new file mode 100644 index 00000000..ef265006 --- /dev/null +++ b/inspector/ui/data/labels.ts @@ -0,0 +1,11 @@ +import type { Hierarchy } from "./types"; + +export const LABEL_ATTRIBUTE = "@effectionx/inspector.labels"; + +export function getNodeLabel(node: Hierarchy): string { + const inspectorLabels = ( + node?.data && LABEL_ATTRIBUTE in node.data ? node.data[LABEL_ATTRIBUTE] : {} + ) as Record; + const label = String(inspectorLabels?.name ?? node.id); + return label === "anonymous" ? `${label} [${node.id}]` : label; +} diff --git a/inspector/ui/data/recording.ts b/inspector/ui/data/recording.ts new file mode 100644 index 00000000..170e40be --- /dev/null +++ b/inspector/ui/data/recording.ts @@ -0,0 +1,72 @@ +import { + type Stream, + type Operation, + resource, + createSignal, + spawn, +} from "effection"; +import type { NodeMap } from "./types.ts"; +import { createSubject } from "@effectionx/stream-helpers"; +import { pipe } from "remeda"; + +export interface Recording { + length: number; + replayStream(): Stream; + setOffset(offset: number): void; +} + +// 0---1--------2----34------5--------X--------------------6------------------0 + +// export interface Range { +// length: number; +// } + +export interface Cassette { + length: number; + loadOffset(offset: number): Operation; +} + +export interface Tick { + nodemap: NodeMap; +} + +export function* useRecording( + load: () => Operation, +): Operation { + let { length, loadOffset } = yield* load(); + let stream = createSignal(); + + const offsets = pipe(stream, createSubject(0)); + + return { + length, + setOffset: stream.send, + *replayStream() { + let subscription = yield* offsets; + + return { + *next() { + let next = yield* subscription.next(); + let tick = yield* loadOffset(next.value); + return { + done: false, + value: tick.nodemap, + }; + }, + }; + }, + }; +} + +export function arrayLoader(array: NodeMap[]): () => Operation { + return function* () { + return { + length: array.length, + *loadOffset(offset) { + return { + nodemap: array[offset], + }; + }, + }; + }; +} diff --git a/inspector/ui/data/stratify.ts b/inspector/ui/data/stratify.ts new file mode 100644 index 00000000..7605db06 --- /dev/null +++ b/inspector/ui/data/stratify.ts @@ -0,0 +1,54 @@ +import { map } from "@effectionx/stream-helpers"; +import type { Hierarchy, NodeMap, Transform } from "./types.ts"; + +export function stratify(): Transform { + return map(function* (nodes) { + let stratii = new Map(); + + let rootId: string | undefined = undefined; + + for (let [id, node] of Object.entries(nodes)) { + let stratum = stratii.get(id); + if (!stratum) { + const s: Hierarchy = { + id, + parentId: node.parentId, + data: node.data, + children: [], + }; + stratii.set(id, s); + stratum = s; + } else { + // ensure parentId/data are set if this record was created earlier + stratum.parentId = node.parentId; + stratum.data = node.data; + } + if (!node.parentId) { + if (typeof rootId === "string") { + let current = stratii.get(rootId); + throw new TypeError( + `duplicate roots: [${JSON.stringify(current)}, ${JSON.stringify(node)}]`, + ); + } + rootId = node.id; + } else { + let parent = stratii.get(node.parentId); + if (!parent) { + console.warn(`unknown parent id: ${node.parentId}`); + } else { + parent.children.push(stratum); + } + } + } + + if (!rootId) { + throw new TypeError("Hierarchy did not contain a root node"); + } + + const root = stratii.get(rootId as string); + if (!root) { + throw new TypeError("Hierarchy did not contain a root node"); + } + return root; + }); +} diff --git a/inspector/ui/data/types.ts b/inspector/ui/data/types.ts new file mode 100644 index 00000000..d4baf72d --- /dev/null +++ b/inspector/ui/data/types.ts @@ -0,0 +1,23 @@ +import type { Stream } from "effection"; + +export interface Node { + id: string; + parentId?: string; + data: Record; +} + +export type NodeMap = Record; + +export interface Hierarchy { + id: string; + parentId?: string; + data: Record; + children: Hierarchy[]; +} + +/** + * A function that transforms one stream into another + */ +export type Transform = ( + input: Stream, +) => Stream; diff --git a/inspector/ui/data/update-node-map.ts b/inspector/ui/data/update-node-map.ts new file mode 100644 index 00000000..47268a0b --- /dev/null +++ b/inspector/ui/data/update-node-map.ts @@ -0,0 +1,33 @@ +import type { ScopeEvent } from "../../scope/protocol.ts"; +import type { NodeMap, Transform } from "./types.ts"; +import { reduce } from "../../lib/reduce.ts"; + +export function updateNodeMap( + initial: NodeMap, +): Transform { + return reduce(function* (nodemap, item) { + if (item.type === "tree") { + for (let node of item.value) { + nodemap[node.id] = { + id: node.id, + parentId: node.parentId, + data: node.data, + }; + } + } + if (item.type === "created") { + nodemap[item.id] = { + id: item.id, + parentId: item.parentId, + data: {}, + }; + } + if (item.type === "destroyed") { + delete nodemap[item.id]; + } + if (item.type === "set") { + nodemap[item.id].data[item.contextName] = item.contextValue; + } + return nodemap; + }, initial); +} diff --git a/inspector/ui/main.tsx b/inspector/ui/main.tsx new file mode 100644 index 00000000..0e12b6df --- /dev/null +++ b/inspector/ui/main.tsx @@ -0,0 +1,64 @@ +import ReactDOM from "react-dom/client"; +import { + createBrowserRouter, + type NavigateOptions, + Outlet, + useNavigate, + useHref, +} from "react-router"; +import { RouterProvider } from "react-router/dom"; + +import { + Provider as SpectrumProvider, + ToastContainer, +} from "@react-spectrum/s2"; +import "@react-spectrum/s2/page.css"; + +import Home from "./paths/Home.tsx"; +import Demo from "./paths/demo/Demo.tsx"; +import Recording from "./paths/recording/Recording.tsx"; +import Live from "./paths/live/Live.tsx"; + +// Configure the type of the `routerOptions` prop on all React Spectrum components. +declare module "@react-spectrum/s2" { + interface RouterConfig { + routerOptions: NavigateOptions; + } +} + +function Root() { + let navigate = useNavigate(); + + return ( + + + + + ); +} + +const router = createBrowserRouter([ + { + path: "/", + Component: Root, + children: [ + { index: true, Component: Home }, + { + path: "demo/:nodeId?", + Component: Demo, + }, + { + path: "recording/:nodeId?", + Component: Recording, + }, + { + path: "live/:nodeId?", + Component: Live, + }, + ], + }, +]); + +const root = document.getElementById("root") as HTMLElement; + +ReactDOM.createRoot(root).render(); diff --git a/inspector/ui/paths/AppLayout.css b/inspector/ui/paths/AppLayout.css new file mode 100644 index 00000000..0778aaac --- /dev/null +++ b/inspector/ui/paths/AppLayout.css @@ -0,0 +1,343 @@ +/* Make the app fill the viewport so child flex layouts can stretch */ +html, +body, +#root { + height: 100%; +} + +/* ensure any wrapper inserted by the app (styled or provider wrappers) fills the root height + so the real appRoot can stretch to the full viewport */ +#root > * { + height: 100%; +} + +body { + margin: 0; /* remove browser default margin so panes can reach the edge */ +} + +/* appRoot and bodyRoot have been migrated to component-level style() macros. + Keep this file around for remaining layout fragments and for selectors + that target nested internals (e.g., SearchField input and Tabs internals). */ + +/* bodyRoot wraps the header and mainContent; migrated to style() in Live/Inspector */ + +.mainContent { + display: flex; + flex: 1; + min-height: 0; +} + +/* Migrated layout blocks: these are now expressed as component-level style() macros. + Leaving other selectors (e.g., .leftPaneSearch input and the tabs internals) + in place while we incrementally migrate more of the styles. */ + +/* NOTE: .leftPaneSearch input rules and tabs internals remain below and should not be removed + until those pieces are migrated to style() as well. */ + +/* leftPaneSearch rules migrated into `LeftPane.tsx` via style() macros. */ +/* The SearchField input styling is now handled in component code to keep layout scoped and token-friendly. */ + +.toolbarIcon { + display: inline-flex; + line-height: 0; +} + +.controlsGroup { + display: inline-flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border-radius: 10px; + border: 1px solid var(--spectrum-global-color-gray-200); + background: linear-gradient( + 180deg, + #ffffff, + var(--spectrum-global-color-gray-50) + ); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.04); +} + +.controlsGroup .toolbarIcon { + display: inline-flex; + line-height: 0; +} + +/* migrated: detailed controlsGroup child sizing and icon sizes remain in CSS */ + +/* the react-spectrum Tabs internals and tab panel sizing remain in this file */ + +/* make the slider take more room */ +.controlsRight .sliderWrap { + padding: 6px 12px; + flex: 1 1 auto !important; + min-width: 160px; + display: flex; + align-items: center; +} + +/* ensure the slider component fills the available space */ +.controlsRight .sliderWrap > * { + width: 100%; +} + +/* visual grouping for controls (more prominent) */ +.controlsGroup { + display: inline-flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border-radius: 10px; + border: 1px solid var(--spectrum-global-color-gray-200); + background: linear-gradient( + 180deg, + #ffffff, + var(--spectrum-global-color-gray-50) + ); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.04); +} + +.controlsGroup .toolbarIcon { + display: inline-flex; + line-height: 0; +} + +/* emphasized primary button wrapper */ +.controlsGroup .primaryAction { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 40px; + height: 36px; + padding: 6px 10px; + background: var(--spectrum-global-color-blue-600); + color: #fff; + border-radius: 6px; + box-shadow: none; +} + +.controlsGroup .primaryAction .toolbarIcon svg { + width: 18px; + height: 18px; +} + +.controlsGroup .stepAction { + display: inline-flex; + align-items: center; + height: 36px; + padding: 6px 6px; + border-radius: 6px; +} + +.controlsGroup .stepAction.back { + margin-right: 6px; +} +.controlsGroup .stepAction.forward { + margin-left: 6px; +} + +.controlsGroup .stepAction .toolbarIcon svg { + width: 16px; + height: 16px; +} + +.controlsGroup .refreshAction { + display: inline-flex; + align-items: center; + height: 36px; + padding: 6px 8px; + border-radius: 6px; + margin-left: 8px; +} + +.controlsGroup .refreshAction .toolbarIcon svg { + width: 16px; + height: 16px; +} + +.controlsGroup:hover { + box-shadow: 0 4px 14px rgba(0, 0, 0, 0.06); +} + +/* slider contrast and spacing */ +.controlsRight .sliderWrap label { + font-weight: 500; + color: var(--spectrum-global-color-gray-700); + margin-right: 12px; +} + +.controlsRight .sliderWrap output { + color: var(--spectrum-global-color-gray-600); + margin-left: 8px; +} + +.controlsRight .sliderWrap input[type="range"] { + accent-color: var(--spectrum-global-color-blue-600); +} + +.controlsRight .sliderWrap input[type="range"]::-webkit-slider-runnable-track { + height: 6px; + border-radius: 8px; +} + +.controlsRight .sliderWrap input[type="range"]::-webkit-slider-thumb { + height: 18px; + width: 18px; + margin-top: -6px; + border-radius: 50%; +} + +/* mainSplit and duplicate tabsWrap removed as unused */ + +.tabPanelContent { + display: flex; + flex: 1; + overflow: hidden; +} + +.graphWrap { + flex: 1; + overflow: auto; + display: flex; + min-height: 0; +} + +/* ensure the Tabs internals can stretch to fill the right pane */ +.tabsInner { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + /* Fallback: explicitly size the tabs area to the viewport (minus header) so internals can distribute + vertical space reliably across inserted wrappers. */ + height: calc(100vh - 64px) !important; +} + +/* the react-spectrum wrapper inside Tabs often inserts an additional div; make it a column flex + so the tablist and tabpanel inside can share the available height correctly */ +.tabsInner > div { + display: flex; + flex-direction: column; + flex: 1 1 0% !important; + min-height: 0; + min-width: 0 !important; +} + +/* Ensure any direct child wrapper inside the Tabs internals also stretches and does not + collapse to content width (Spectrum may insert wrappers that default to flex: 0 1 auto). */ +.tabsInner > div > div { + flex: 1 1 0% !important; + min-width: 0 !important; +} + +/* Target tabpanel-inserted wrappers to avoid collapsed width; Spectrum sometimes nests another + wrapper between the tabpanel and our content which may default to flex: 0 1 auto. */ +.tabsInner [role="tabpanel"] > div { + display: flex; + flex: 1 1 0% !important; + min-width: 0 !important; +} + +/* keep the tab list from growing and taking up remaining height */ +.tabsInner [role="tablist"] { + flex: 0 0 auto; +} + +/* target tab panels anywhere inside the tabsInner wrapper (react-spectrum nests internals) + and make them grow to fill available vertical space */ +.tabsInner [role="tabpanel"] { + display: flex; + flex: 1 1 auto; + min-height: 0; + overflow: hidden; +} + +.tabsInner [role="tabpanel"] .tabPanelContent { + display: flex; + flex: 1 1 auto; + min-height: 0; + overflow: auto; +} + +/* make the tree wrapper fill the available space */ +#treeWrapper { + width: 100%; + /* Allow the tree wrapper to grow via flex so it fills the available tab panel height */ + flex: 1 1 0%; + min-height: 0; + /* Constrain tree wrapper to the viewport height (minus header area) so it reaches the bottom + without overflowing the page. 64px is a conservative header/tablist offset. */ + height: auto; + max-height: calc(100vh - 64px) !important; + display: flex; + position: relative; + overflow: hidden; +} + +#treeWrapper > div { + flex: 1; + min-height: 0; + height: 100%; + overflow: auto; +} + +#treeWrapper > div { + flex: 1; + min-height: 0; +} + +/* Make the root app wrapper a column flex container so its children (header + main panes) + can distribute vertical space correctly and let the main content stretch to the viewport bottom. */ +#root > * { + display: flex; + flex-direction: column; + height: 100%; + /* Ensure the top-level app wrapper consumes available viewport height and distributes + it to header + main content correctly. */ + flex: 1 1 0% !important; + min-height: 0 !important; +} + +#root > * > div { + flex: 1 1 0%; + min-height: 0; +} + +/* Ensure tab internals and ancestor wrappers stretch vertically to the bottom of viewport. + Spectrum (and our style() wrappers) sometimes insert nested wrappers with default + flex values that can collapse vertical space; force the chain that contains + the tabs and tab panels to be full-height so the Graph fills the viewport. */ +.tabsInner, +.tabsInner > div, +.tabsInner > div > div, +.tabsInner [role="tabpanel"], +.tabsInner [role="tabpanel"] > div, +.tabsInner [role="tabpanel"] .tabPanelContent { + display: flex; + flex-direction: column; + flex: 1 1 0% !important; + min-height: 0 !important; + min-width: 0 !important; + height: 100%; +} + +/* Scoped fallback: ensure the nearest container that contains the tabs area expands to + the viewport so nested internals (header + tabpanel) can distribute vertical space. + Keep this scoped so we don't change the layout direction (avoid stacking left/right). */ +#root div:has(.tabsInner) { + /* avoid overriding layout direction; only hint at sizing so the tab internals can grow */ + flex: 1 1 0% !important; + min-height: 0 !important; + height: calc(100vh - 64px) !important; +} + +.detailsWrap { + /* attribute panel uses full width when in the Attributes tab */ + padding: 12px; + overflow: auto; +} + +.fullWidthPane { + width: 360px; + border-right: 1px solid var(--spectrum-global-color-gray-100); + padding: 12px; +} diff --git a/inspector/ui/paths/Home.tsx b/inspector/ui/paths/Home.tsx new file mode 100644 index 00000000..f0895448 --- /dev/null +++ b/inspector/ui/paths/Home.tsx @@ -0,0 +1,424 @@ +import { useNavigate } from "react-router"; +import { RecordingUpload } from "../components/RecordingUpload.tsx"; +import { + Button, + Badge, + Card, + TableView, + TableHeader, + Column, + TableBody, + Row, + Cell, +} from "@react-spectrum/s2"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; + +type HomeProps = { + onStart?: () => void; + onLoadFile?: (file: File) => void; + onLaunchDemo?: () => void; +}; + +const pageStyle = style({ + paddingInline: "16px", + paddingBlock: "12px", + marginInline: "auto", +} as const); +const headerStyle = style({ + paddingBlock: "8px", + display: "flex", + alignItems: "center", +} as const); +const brandStyle = style({ + display: "flex", + alignItems: "center", + gap: "12", +} as const); +const logoStyle = style({ + width: "[40px]", + height: "[40px]", + borderRadius: "[6px]", + backgroundColor: "var(--spectrum-global-color-gray-200)", + display: "flex", + alignItems: "center", + justifyContent: "center", + fontWeight: "bold", +} as const); +const strongStyle = style({ + fontWeight: "medium", + marginLeft: "8", +} as const); +const titleWrapStyle = style({ + marginTop: "16", + marginBottom: "12", +} as const); +const titleStyle = style({ font: "heading-xl", margin: 0 } as const); +const subtitleStyle = style({ + font: "body", + color: "var(--spectrum-global-color-gray-600)", + marginTop: "8", +} as const); +const gridStyle = style({ + display: "grid", + gridTemplateColumns: "repeat(3, minmax(0, 1fr))", + gap: "12", + marginTop: "16", +} as const); +const cardBase = style({ + paddingBlock: "12", + paddingInline: "12", + borderRadius: "[6px]", + display: "flex", + flexDirection: "column", + justifyContent: "space-between", + minHeight: "[140px]", +} as const); +const cardHeadStyle = style({ + display: "flex", + gap: "12", + alignItems: "center", +} as const); +const iconWrapStyle = style({ + width: "[40px]", + height: "[40px]", + display: "flex", + alignItems: "center", + justifyContent: "center", + borderRadius: "[6px]", + backgroundColor: "var(--spectrum-global-color-gray-100)", +} as const); +const cardTitleStyle = style({ font: "body", margin: 0 } as const); +const cardTextStyle = style({ + font: "body-sm", + color: "var(--spectrum-global-color-gray-600)", + marginTop: "8", +} as const); +const footerStyle = style({ + marginTop: "12", + display: "flex", + gap: "12", + alignItems: "center", + justifyContent: "space-between", +} as const); +const metaStyle = style({ + font: "body-sm", + color: "var(--spectrum-global-color-gray-600)", +} as const); +const badgeStyle = style({ marginLeft: "auto" } as const); +const clearHistoryStyle = style({ marginLeft: "auto" } as const); +const recentSectionStyle = style({ marginTop: "20" } as const); +const recentHeaderStyle = style({ + display: "flex", + alignItems: "center", + justifyContent: "space-between", +} as const); + +function resolveClass( + c: string | ((props?: Record) => string) | undefined, + props?: Record, +) { + if (!c) return undefined; + return typeof c === "function" ? c(props) : c; +} + +function WifiIcon() { + return ( + + ); +} + +function LoadIcon() { + return ( + + ); +} + +function PlayIcon() { + return ( + + ); +} + +export default function Home({ onStart, onLoadFile, onLaunchDemo }: HomeProps) { + const navigate = useNavigate(); + + const handleUpload = (file: File) => { + if (onLoadFile) onLoadFile(file); + navigate("/recording", { state: { file } }); + }; + + return ( +
+
+
+
Ei
+
Effection Inspector
+
+
+ +
+
+

+ What would you like to inspect? +

+
+ Choose your inspection method to get started +
+
+ +
+ +
+
+
+
+ +
+
+

+ Connect to Live Process +

+
+ Inspect a running Effection process in real-time via + WebSocket connection +
+
+
+
+ +
+ +
+ WebSocket URL required +
+
+
+
+ + +
+
+
+
+ +
+
+

+ Load Recording +

+
+ Analyze a previously recorded session with time-travel + controls and playback +
+
+
+
+ +
+ handleUpload(file)} /> +
+ .json, .effection files +
+
+
+
+ + +
+
+
+
+ +
+
+

Try Demo

+
+ Explore the inspector with a sample process—no setup or + configuration required +
+
+
+ + Recommended + +
+
+
+ +
+ +
+ Perfect for first-time users +
+
+
+
+
+ +
+
+

+ Recent Sessions +

+
+ +
+
+ + + + + Name + + Type + Last accessed + Actions + + + + {(item) => ( + + {item.name} + + {item.kind === "live" ? ( + Live + ) : ( + Recording + )} + + {item.last} + + + + + )} + + +
+
+
+ ); +} diff --git a/inspector/ui/paths/demo/Demo.tsx b/inspector/ui/paths/demo/Demo.tsx new file mode 100644 index 00000000..9e40c08f --- /dev/null +++ b/inspector/ui/paths/demo/Demo.tsx @@ -0,0 +1,154 @@ +import TopControls from "../../components/TopControls.tsx"; + +import { useEffect, useMemo, useState } from "react"; +import { call, createSignal, each, run } from "effection"; +import { stratify } from "../../data/stratify.ts"; +import { pipe } from "remeda"; +import { + arrayLoader, + type Recording, + useRecording, +} from "../../data/recording.ts"; +import { box } from "../../data/box.ts"; +import type { Hierarchy, NodeMap } from "../../data/types.ts"; + +import pipeline from "./pipeline.json" with { type: "json" }; +import "../AppLayout.css"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +import Inspector from "../../components/Inspector.tsx"; +import { useNavigate } from "react-router"; + +function useDemoStream() { + const navigate = useNavigate(); + const [hierarchy, setHierarchy] = useState(); + const [recording, setRecording] = useState(); + + const files = useMemo(() => { + return createSignal(); + }, []); + + useEffect(() => { + if (!recording) return; + const task = run(function* () { + const result = yield* box(function* () { + console.log({ recording }); + const hierarchies = pipe(recording.replayStream(), stratify()); + for (let item of yield* each(hierarchies)) { + console.dir(item, { depth: 20 }); + setHierarchy(item); + yield* call(() => navigate(`/demo/${item.id}`, { replace: true })); + yield* each.next(); + } + }); + if (!result.ok) { + console.error("Error processing file:", result.error); + } + }); + return () => { + task.halt().catch((e) => console.error(e)); + }; + }, [recording, navigate]); + + useEffect(() => { + // Load the demo pipeline fixture when no file was uploaded + const task = run(function* () { + const result = yield* box(function* () { + const r = yield* useRecording( + arrayLoader(pipeline as unknown as NodeMap[]), + ); + setRecording(r); + }); + if (!result.ok) { + console.error("Error loading pipeline fixture:", result.error); + } + }); + return () => { + task.halt().catch((e) => console.error(e)); + }; + }, []); + + return { + setFile: files.send, + hierarchy, + recording, + }; +} + +function App() { + const { hierarchy, recording } = useDemoStream(); + + // playback state + const [playing, setPlaying] = useState(false); + const [offset, setOffset] = useState(0); + const tickIntervalMs = 250; + + // keep offset and recording in sync + useEffect(() => { + if (!recording) return; + // initialize offset to 0 when a recording loads + setOffset(0); + recording.setOffset(0); + }, [recording]); + + // when offset changes by user or timer, update the recording + useEffect(() => { + if (!recording) return; + recording.setOffset(offset); + }, [offset, recording]); + + // playback auto-advance + useEffect(() => { + if (!playing || !recording) return; + const id = setInterval(() => { + setOffset((prev) => { + const next = prev + 1; + if (recording && next >= recording.length) { + // stop at end + setPlaying(false); + return recording.length - 1; + } + return next; + }); + }, tickIntervalMs); + return () => clearInterval(id); + }, [playing, recording]); + + if (!recording) return null; + + return ( +
+
+ { + if (!recording) return; + setOffset(0); + recording.setOffset(0); + setPlaying(false); + console.log("refresh"); + }} + /> + +
+
+ ); +} + +export default App; diff --git a/inspector/ui/paths/demo/pipeline.json b/inspector/ui/paths/demo/pipeline.json new file mode 100644 index 00000000..d9225706 --- /dev/null +++ b/inspector/ui/paths/demo/pipeline.json @@ -0,0 +1,13661 @@ +[ + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": {} + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": {} + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": {} + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": {} + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": {} + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": {} + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": {} + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": {} + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "44": { + "id": "44", + "parentId": "43", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "46": { + "id": "46", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + }, + "58": { + "id": "58", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + }, + "58": { + "id": "58", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + }, + "58": { + "id": "58", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + }, + "58": { + "id": "58", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + }, + "58": { + "id": "58", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + }, + "58": { + "id": "58", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "45": { + "id": "45", + "parentId": "43", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + }, + "57": { + "id": "57", + "parentId": "43", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "43": { + "id": "43", + "parentId": "42", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "42": { + "id": "42", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/play", + "method": "GET" + } + } + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "47": { + "id": "47", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 1 + } + } + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "48": { + "id": "48", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 2 + } + } + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "54": { + "id": "54", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 8 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "52": { + "id": "52", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 6 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "49": { + "id": "49", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 3 + } + } + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "50": { + "id": "50", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 4 + } + } + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "53": { + "id": "53", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 7 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "55": { + "id": "55", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 9 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "51": { + "id": "51", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 5 + } + } + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + }, + "56": { + "id": "56", + "parentId": "3", + "data": { + "@effectionx/inspector.labels": { + "name": "child", + "number": 10 + } + } + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "3": { + "id": "3", + "parentId": "2", + "data": { + "@effectionx/inspector.labels": { + "name": "main", + "args": ["--break"] + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "2": { + "id": "2", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "anonymous" + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + }, + { + "0": { + "id": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Global" + } + } + }, + "1": { + "id": "1", + "parentId": "0", + "data": { + "@effectionx/inspector.labels": { + "name": "Inspector" + } + } + }, + "4": { + "id": "4", + "parentId": "1", + "data": { + "@effectionx/inspector.labels": { + "name": "SSEServer", + "port": 41000 + } + } + }, + "31": { + "id": "31", + "parentId": "4", + "data": { + "@effectionx/inspector.labels": { + "name": "RequestHandler", + "url": "/watchScopes", + "method": "POST" + } + } + }, + "32": { + "id": "32", + "parentId": "31", + "data": { + "@effectionx/inspector.labels": { + "name": "Transport" + } + } + }, + "39": { + "id": "39", + "parentId": "32", + "data": { + "@effectionx/inspector.labels": { + "name": "streamEvents" + } + } + }, + "40": { + "id": "40", + "parentId": "32", + "data": {} + }, + "41": { + "id": "41", + "parentId": "32", + "data": {} + } + } +] diff --git a/inspector/ui/paths/live/Live.tsx b/inspector/ui/paths/live/Live.tsx new file mode 100644 index 00000000..f80921e1 --- /dev/null +++ b/inspector/ui/paths/live/Live.tsx @@ -0,0 +1,102 @@ +import { useEffect, useMemo, useState } from "react"; +import { run, type Stream } from "effection"; +import { createSSEClient } from "../../../lib/sse-client.ts"; +import { stratify } from "../../data/stratify.ts"; +import { pipe } from "remeda"; +import { protocol } from "../../../scope/protocol.ts"; + +import "../AppLayout.css"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +import Inspector from "../../components/Inspector.tsx"; +import { updateNodeMap } from "../../data/update-node-map.ts"; + +function Live() { + let stream = useMemo(() => { + let client = createSSEClient(protocol); + + return pipe(client.methods.watchScopes(), updateNodeMap({}), stratify()); + }, []); + + let next = useEach(stream); + if (!next.ok) { + if (next.pending) { + return
connecting...
; + } else { + return ( +
+          {String(next.error)}\n{(next.error as Error).stack}
+        
+ ); + } + } else if (next.value.done) { + return
connection closed
; + } + + let hierarchy = next.value.value; + + return ( +
+
+ +
+
+ ); +} + +export type AsyncResult = + | { + pending: true; + ok: false; + } + | { + pending: false; + ok: true; + value: T; + } + | { + pending: false; + ok: false; + error: unknown; + }; + +export function useEach(stream: Stream) { + let [next, setNext] = useState>>({ + pending: true, + ok: false, + }); + + useEffect(() => { + let task = run(function* () { + let subscription = yield* stream; + let current = yield* subscription.next(); + console.log({ current }); + while (!current.done) { + setNext({ pending: false, ok: true, value: current }); + current = yield* subscription.next(); + console.log({ current }); + } + setNext({ pending: false, ok: true, value: current }); + }); + task.catch((error) => setNext({ pending: false, ok: false, error })); + return () => { + task.halt().catch((error) => console.error(error)); + }; + }, [stream]); + + return next; +} + +export default Live; diff --git a/inspector/ui/paths/recording/Recording.tsx b/inspector/ui/paths/recording/Recording.tsx new file mode 100644 index 00000000..a9074d76 --- /dev/null +++ b/inspector/ui/paths/recording/Recording.tsx @@ -0,0 +1,171 @@ +import { useEffect, useMemo, useState } from "react"; +import { useLocation, useNavigate } from "react-router"; +import { call, createSignal, each, run, until } from "effection"; +import { stratify } from "../../data/stratify.ts"; +import { pipe } from "remeda"; +import { + arrayLoader, + type Recording, + useRecording, +} from "../../data/recording.ts"; +import { box } from "../../data/box.ts"; +import type { Hierarchy } from "../../data/types.ts"; +import TopControls from "../../components/TopControls.tsx"; + +import "../AppLayout.css"; +import { style } from "@react-spectrum/s2/style" with { type: "macro" }; +import Inspector from "../../components/Inspector.tsx"; +import { RecordingUpload } from "../../components/RecordingUpload.tsx"; + +function useRecordingStream() { + const location = useLocation(); + const navigate = useNavigate(); + const [hierarchy, setHierarchy] = useState(); + const [recording, setRecording] = useState(); + + const files = useMemo(() => { + return createSignal(); + }, []); + + useEffect(() => { + if (!recording) return; + const task = run(function* () { + const result = yield* box(function* () { + console.log({ recording }); + const hierarchies = pipe(recording.replayStream(), stratify()); + for (let item of yield* each(hierarchies)) { + console.dir(item, { depth: 20 }); + yield* call(() => navigate(`/recording/${item?.id}`)); + setHierarchy(item); + yield* each.next(); + } + }); + if (!result.ok) { + console.error("Error processing file:", result.error); + } + }); + return () => { + task.halt().catch((e) => console.error(e)); + }; + }, [recording, navigate]); + + useEffect(() => { + const task = run(function* () { + const result = yield* box(function* () { + for (let file of yield* each(files)) { + const text = yield* until(file.text()); + const json = JSON.parse(text); + + const recording = yield* useRecording(arrayLoader(json)); + setRecording(recording); + + yield* each.next(); + } + }); + if (!result.ok) { + console.error("Error processing file:", result.error); + } + }); + return () => { + task.halt().catch((e) => console.error(e)); + }; + }, [files, files.send]); + + useEffect(() => { + const maybeState = location.state as { file?: File } | undefined; + const file = maybeState?.file; + if (file) { + files.send(file); + } + }, [location.state, files.send]); + + return { + setFile: files.send, + hierarchy, + recording, + }; +} + +function App() { + const { hierarchy, recording, setFile } = useRecordingStream(); + + // playback state + const [playing, setPlaying] = useState(false); + const [offset, setOffset] = useState(0); + const tickIntervalMs = 250; + + // keep offset and recording in sync + useEffect(() => { + if (!recording) return; + // initialize offset to 0 when a recording loads + setOffset(0); + recording.setOffset(0); + }, [recording]); + + // when offset changes by user or timer, update the recording + useEffect(() => { + if (!recording) return; + recording.setOffset(offset); + }, [offset, recording]); + + // playback auto-advance + useEffect(() => { + if (!playing || !recording) return; + const id = setInterval(() => { + setOffset((prev) => { + const next = prev + 1; + if (recording && next >= recording.length) { + // stop at end + setPlaying(false); + return recording.length - 1; + } + return next; + }); + }, tickIntervalMs); + return () => clearInterval(id); + }, [playing, recording]); + + return ( +
+ {!recording ? ( +
+ +
+ ) : ( +
+ { + if (!recording) return; + setOffset(0); + recording.setOffset(0); + setPlaying(false); + console.log("refresh"); + }} + /> + + +
+ )} +
+ ); +} + +export default App; diff --git a/inspector/ui/tsconfig.json b/inspector/ui/tsconfig.json new file mode 100644 index 00000000..6387121b --- /dev/null +++ b/inspector/ui/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["**/*.ts", "**/*.json", "**/*.tsx"] +} diff --git a/inspector/ui/utils/labels.test.ts b/inspector/ui/utils/labels.test.ts new file mode 100644 index 00000000..6f78ee16 --- /dev/null +++ b/inspector/ui/utils/labels.test.ts @@ -0,0 +1,38 @@ +import { describe, it, expect } from "vitest"; +import { flattenNodeData } from "./labels"; + +describe("flattenNodeData", () => { + it("flattens single top-level labels object and stringifies values", () => { + const data = { + "@effectionx/inspector.labels": { + name: "Global", + port: 41000, + meta: { a: 1 }, + args: ["--break"], + }, + }; + + const props = flattenNodeData(data); + const map = Object.fromEntries(props.map((p) => [p.k, p.v])); + + expect(map.name).toBe("Global"); + expect(map.port).toBe("41000"); + expect(map.meta).toBe(JSON.stringify({ a: 1 })); + expect(map.args).toBe(JSON.stringify(["--break"])); + }); + + it("prefixes keys when there are multiple top-level objects", () => { + const data = { + foo: { a: 1 }, + bar: { b: true }, + baz: "simple", + }; + + const props = flattenNodeData(data); + const map = Object.fromEntries(props.map((p) => [p.k, p.v])); + + expect(map["foo.a"]).toBe(JSON.stringify({ a: 1 })); + expect(map["bar.b"]).toBe(JSON.stringify({ b: true })); + expect(map.baz).toBe("simple"); + }); +}); diff --git a/inspector/ui/utils/labels.ts b/inspector/ui/utils/labels.ts new file mode 100644 index 00000000..2a6d89da --- /dev/null +++ b/inspector/ui/utils/labels.ts @@ -0,0 +1,35 @@ +export function valueToString(v: unknown): string { + if (v === null || v === undefined) return ""; + if (typeof v === "object") { + try { + return JSON.stringify(v); + } catch (_err) { + return String(v); + } + } + return String(v); +} + +export function flattenNodeData( + data: Record | undefined, +): Array<{ k: string; v: string }> { + const top = data ?? {}; + const topLevelKeys = Object.keys(top); + + return Object.entries(top).flatMap(([k, v]) => { + if (v && typeof v === "object" && !Array.isArray(v)) { + const entries = Object.entries(v as Record); + if (topLevelKeys.length === 1) { + return entries.map(([subk, subv]) => ({ + k: subk, + v: valueToString(subv), + })); + } + return entries.map(([subk, subv]) => ({ + k: `${k}.${subk}`, + v: valueToString(subv), + })); + } + return [{ k, v: valueToString(v) }]; + }); +} diff --git a/inspector/ui/utils/resolveClass.ts b/inspector/ui/utils/resolveClass.ts new file mode 100644 index 00000000..2e3d580a --- /dev/null +++ b/inspector/ui/utils/resolveClass.ts @@ -0,0 +1,7 @@ +export function resolveClass( + c: string | ((props?: Record) => string) | undefined, + props?: Record, +): string | undefined { + if (!c) return undefined; + return typeof c === "function" ? c(props) : c; +} diff --git a/inspector/vite.config.ts b/inspector/vite.config.ts new file mode 100644 index 00000000..d07b206f --- /dev/null +++ b/inspector/vite.config.ts @@ -0,0 +1,38 @@ +import { defineConfig } from "vite"; +import macros from "unplugin-parcel-macros"; +import react from "@vitejs/plugin-react"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + macros.vite(), // Must be first! + react(), + ], + server: { + proxy: { + "/watchScopes": "http://localhost:41000", + "/play": "http://localhost:41000", + }, + }, + build: { + outDir: "ui/dist", + target: ["es2022"], + // Lightning CSS produces a much smaller CSS bundle than the default minifier. + cssMinify: "lightningcss", + rollupOptions: { + output: { + // Bundle all S2 and style-macro generated CSS into a single bundle instead of code splitting. + // Because atomic CSS has so much overlap between components, loading all CSS up front results in + // smaller bundles instead of producing duplication between pages. + manualChunks(id) { + if ( + /macro-(.*)\.css$/.test(id) || + /@react-spectrum\/s2\/.*\.css$/.test(id) + ) { + return "s2-styles"; + } + }, + }, + }, + }, +}); diff --git a/package.json b/package.json index 69f5361e..37bb5023 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,9 @@ "peerDependencyRules": { "ignoreMissing": [], "allowAny": [] + }, + "overrides": { + "effection": "https://pkg.pr.new/thefrontside/effection@5010883" } }, "volta": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e05fde44..a8195f41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + effection: https://pkg.pr.new/thefrontside/effection@5010883 + importers: .: @@ -18,8 +21,8 @@ importers: specifier: ^7 version: 7.7.1 effection: - specifier: ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 expect: specifier: ^29 version: 29.7.0 @@ -48,8 +51,8 @@ importers: specifier: workspace:* version: link:../tinyexec effection: - specifier: ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 generatorics: specifier: ^1 version: 1.1.0 @@ -69,14 +72,14 @@ importers: specifier: workspace:* version: link:../test-adapter effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 chain: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -85,8 +88,8 @@ importers: context-api: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -98,8 +101,8 @@ importers: specifier: workspace:* version: link:../timebox effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -108,21 +111,21 @@ importers: effect-ts: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* version: link:../bdd effect: specifier: ^3 - version: 3.19.14 + version: 3.19.15 fs: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -131,18 +134,94 @@ importers: fx: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 + devDependencies: + '@effectionx/bdd': + specifier: workspace:* + version: link:../bdd + + inspector: + dependencies: + '@ark/util': + specifier: ^0.56.0 + version: 0.56.0 + '@effectionx/stream-helpers': + specifier: workspace:* + version: link:../stream-helpers + '@standard-schema/spec': + specifier: ^1.0.0 + version: 1.1.0 + arktype: + specifier: ^2.1.27 + version: 2.1.29 + canvg: + specifier: ^4.0.3 + version: 4.0.3 + react-d3-tree: + specifier: ^3.6.6 + version: 3.6.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-router: + specifier: ^7.13.0 + version: 7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + remeda: + specifier: ^2 + version: 2.33.4 + sse-stream-transform: + specifier: ^1.0.0 + version: 1.0.0 + zod: + specifier: ^4.1.13 + version: 4.3.5 devDependencies: '@effectionx/bdd': specifier: workspace:* version: link:../bdd + '@react-spectrum/s2': + specifier: ^1.0.0 + version: 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@types/d3': + specifier: ^7.4.3 + version: 7.4.3 + '@types/react': + specifier: ^19.1.8 + version: 19.2.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.2.3(@types/react@19.2.8) + '@vitejs/plugin-react': + specifier: ^5.1.2 + version: 5.1.2(vite@7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2)) + d3: + specifier: ^7.9.0 + version: 7.9.0 + effection: + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 + lightningcss: + specifier: ^1.31.1 + version: 1.31.1 + react: + specifier: ^19.1.0 + version: 19.2.3 + react-dom: + specifier: ^19.1.0 + version: 19.2.3(react@19.2.3) + react-redux: + specifier: ^9.2.0 + version: 9.2.0(@types/react@19.2.8)(react@19.2.3) + unplugin-parcel-macros: + specifier: ^0.1.1 + version: 0.1.1(@swc/helpers@0.5.18) + vite: + specifier: ^7.3.1 + version: 7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) jsonl-store: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -151,8 +230,8 @@ importers: node: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -170,8 +249,8 @@ importers: specifier: ^2 version: 2.2.0 effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 shellwords-ts: specifier: ^3.0.1 version: 3.0.1 @@ -189,8 +268,8 @@ importers: raf: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -202,8 +281,8 @@ importers: signals: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 immutable: specifier: ^5 version: 5.1.4 @@ -221,8 +300,8 @@ importers: specifier: workspace:* version: link:../timebox effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 immutable: specifier: ^5 version: 5.1.4 @@ -237,8 +316,8 @@ importers: stream-yaml: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 yaml: specifier: ^2 version: 2.8.2 @@ -253,8 +332,8 @@ importers: task-buffer: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -269,14 +348,14 @@ importers: test-adapter: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 timebox: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -285,8 +364,8 @@ importers: tinyexec: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 tinyexec: specifier: ^0.3.2 version: 0.3.2 @@ -297,8 +376,8 @@ importers: specifier: workspace:* version: link:../test-adapter effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -308,7 +387,7 @@ importers: version: link:../process vitest: specifier: ^3 - version: 3.2.4(@types/node@22.19.7)(yaml@2.8.2) + version: 3.2.4(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) watch: dependencies: @@ -322,8 +401,8 @@ importers: specifier: ^4 version: 4.0.3 effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 ignore: specifier: ^7 version: 7.0.5 @@ -350,8 +429,8 @@ importers: websocket: dependencies: effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 devDependencies: '@effectionx/bdd': specifier: workspace:* @@ -369,8 +448,8 @@ importers: specifier: workspace:* version: link:../signals effection: - specifier: ^3 || ^4 - version: 4.0.0 + specifier: https://pkg.pr.new/thefrontside/effection@5010883 + version: https://pkg.pr.new/thefrontside/effection@5010883 web-worker: specifier: ^1 version: 1.5.0 @@ -384,14 +463,99 @@ importers: packages: + '@ark/schema@0.56.0': + resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} + + '@ark/util@0.56.0': + resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==} + '@babel/code-frame@7.28.6': resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.28.6': + resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.6': + resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.6': + resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.6': + resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.6': + resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.6': + resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -445,6 +609,12 @@ packages: cpu: [x64] os: [win32] + '@bkrem/react-transition-group@1.3.5': + resolution: {integrity: sha512-lbBYhC42sxAeFEopxzd9oWdkkV0zirO5E9WyeOBxOrpXsf7m30Aj8vnbayZxFOwD9pvUQ2Pheb1gO79s0Qap3Q==} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -604,6 +774,33 @@ packages: '@essentials/raf@1.2.0': resolution: {integrity: sha512-AWJvpprE2o7ATMb7HBYMVUVmPJBCt2wZp2rY7d+rAcNSMvzLbDepy9KFeqqrPZh+s9aIpbw1LgmuAW7kuRFgrQ==} + '@formatjs/ecma402-abstract@2.3.6': + resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} + + '@formatjs/fast-memoize@2.2.7': + resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} + + '@formatjs/icu-messageformat-parser@2.11.4': + resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} + + '@formatjs/icu-skeleton-parser@1.8.16': + resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} + + '@formatjs/intl-localematcher@0.6.2': + resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + + '@internationalized/date@3.10.1': + resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==} + + '@internationalized/message@3.1.8': + resolution: {integrity: sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==} + + '@internationalized/number@3.6.5': + resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} + + '@internationalized/string@3.2.7': + resolution: {integrity: sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==} + '@jest/expect-utils@29.7.0': resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -616,927 +813,4413 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} - cpu: [arm] - os: [android] + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} - cpu: [arm64] - os: [android] + '@lezer/common@1.5.0': + resolution: {integrity: sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==} - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + '@lezer/lr@1.4.7': + resolution: {integrity: sha512-wNIFWdSUfX9Jc6ePMzxSPVgTVB4EOfDIwLQLWASyiUdHKaMsiilj9bYiGkGQCKVodd0x6bgQCV207PILGFCF9Q==} + + '@lmdb/lmdb-darwin-arm64@2.8.5': + resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + '@lmdb/lmdb-darwin-x64@2.8.5': + resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + '@lmdb/lmdb-linux-arm64@2.8.5': + resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==} cpu: [arm64] - os: [freebsd] + os: [linux] + + '@lmdb/lmdb-linux-arm@2.8.5': + resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==} + cpu: [arm] + os: [linux] - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + '@lmdb/lmdb-linux-x64@2.8.5': + resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==} cpu: [x64] - os: [freebsd] + os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} - cpu: [arm] + '@lmdb/lmdb-win32-x64@2.8.5': + resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==} + cpu: [x64] + os: [win32] + + '@mischnic/json-sourcemap@0.1.1': + resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} + engines: {node: '>=12.0.0'} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} - cpu: [arm64] + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@parcel/cache@2.16.3': + resolution: {integrity: sha512-iWlbdTk9h7yTG1fxpGvftUD7rVbXVQn1+U21BGqFyYxfrd+wgdN624daIG6+eqI6yBuaBTEwH+cb3kaI9sH1ng==} + engines: {node: '>= 16.0.0'} + peerDependencies: + '@parcel/core': ^2.16.3 + + '@parcel/codeframe@2.16.3': + resolution: {integrity: sha512-oXZx8PUqExnXnAHCLhxulTDeFvTBqPAwJU4AVZwnYFToaQ6nltXWWYaDGUu2f/V3Z17LObWiOROHT7HYXAe62Q==} + engines: {node: '>= 16.0.0'} + + '@parcel/core@2.16.3': + resolution: {integrity: sha512-b9ll4jaFYfXSv6NZAOJ2P0uuyT/Doel7ho2AHLSUz2thtcL6HEb2+qdV2f9wriVvbEoPAj9VuSOgNc0t0f5iMw==} + engines: {node: '>= 16.0.0'} + + '@parcel/diagnostic@2.16.3': + resolution: {integrity: sha512-NBoGGFMqOmbs8i0zGVwTeU0alQ0BkEZe894zAb5jEBQqsRBPmdqogwmARsT4Ix2bN1QBco4o0gn9kBtalFC6IQ==} + engines: {node: '>= 16.0.0'} + + '@parcel/events@2.16.3': + resolution: {integrity: sha512-rAh/yXwtHYcKWmi9Tjjf5t95UdBVhhlyJkIYN25/PYKdSRBcQ9c1rd8/fvOeZKy1/fSiOcEXqm6dK7bhLSCaww==} + engines: {node: '>= 16.0.0'} + + '@parcel/feature-flags@2.16.3': + resolution: {integrity: sha512-D15/cM/mAO8yv0NQ9kFBxXZ7C3A+jAq+9tVfrjYegofMk18pQoXJz6X/po2Kq1PzO7pjydn7PqYMB/O9p/+zbQ==} + engines: {node: '>= 16.0.0'} + + '@parcel/fs@2.16.3': + resolution: {integrity: sha512-InMXHVIfDUSimjBoGJcdNlNjoIsDQ8MUDN8UJG4jnjJQ6DDor+W+yg4sw/40tToUqIyi99lVhQlpkBA+nHLpOQ==} + engines: {node: '>= 16.0.0'} + peerDependencies: + '@parcel/core': ^2.16.3 + + '@parcel/graph@3.6.3': + resolution: {integrity: sha512-3qV99HCHrPR1CnMOHkwwpmPBimVMd3d/GcEcgOHUKi+2mS0KZ4TwMs/THaIWtJx7q5jrhqEht+IyQ1Smupo49g==} + engines: {node: '>= 16.0.0'} + + '@parcel/logger@2.16.3': + resolution: {integrity: sha512-dHUJk8dvo2wOg3dIqSjNGqlVqsRn4hTZVbgTShaImaLTWdueaKfMojxo79P7T3em49y0dQb0m+xl2SunDhtwsA==} + engines: {node: '>= 16.0.0'} + + '@parcel/macros@2.16.3': + resolution: {integrity: sha512-Yu+aQMlU8AOOby7lat0XTuPnLGe1swbHnvi87dkS1PufIolxsISExiHYWxt12rf0A+six8VfCnOPkWc/Z1x3ew==} + engines: {node: '>= 16.0.0', parcel: ^2.16.3} + + '@parcel/markdown-ansi@2.16.3': + resolution: {integrity: sha512-r0QQpS44jNueY8lcZcSoUua3kJfI5kDZrJvFgi1jrkyxwDUfq3L0xWQjxHrXzv8K6uFAeU+teoq8JcWLVLXa1w==} + engines: {node: '>= 16.0.0'} + + '@parcel/node-resolver-core@3.7.3': + resolution: {integrity: sha512-0xdXyhGcGwtYmfWwEwzdVVGnTaADdTScx1S8IXiK0Nh3S1b4ilGqnKzw8fVsJCsBMvQA5e251EDFeG3qTnUsnw==} + engines: {node: '>= 16.0.0'} + + '@parcel/package-manager@2.16.3': + resolution: {integrity: sha512-TySTY93SyGfu8E5YWiekumw6sm/2+LBHcpv1JWWAfNd+1b/x3WB5QcRyEk6mpnOo7ChQOfqykzUaBcrmLBGaSw==} + engines: {node: '>= 16.0.0'} + peerDependencies: + '@parcel/core': ^2.16.3 + + '@parcel/plugin@2.16.3': + resolution: {integrity: sha512-w4adN/E2MBbNzUwuGWcUkilrf7B6eQThPRdgiw2awIY0/t0C1gN/hhBfUeWt7vt0WcvWlXcyR/OGzU/r0nPteA==} + engines: {node: '>= 16.0.0'} + + '@parcel/profiler@2.16.3': + resolution: {integrity: sha512-/4cVsLfv36fdphm+JiReeXXT3RD6258L79C2kjpD06i84sxyNPQVbFldgWRppbHW2KBR/D6XhIzHcwoDUYtTbw==} + engines: {node: '>= 16.0.0'} + + '@parcel/rust-darwin-arm64@2.16.3': + resolution: {integrity: sha512-9JG19DDNjIpvlI1b8VYIjvCaulftd6/J09/Rj2A8KgREv6EtCDkus8jCsNw7Jacj2HIWg23kxJY3XKcJ9pkiug==} + engines: {node: '>= 10'} cpu: [arm64] + os: [darwin] + + '@parcel/rust-darwin-x64@2.16.3': + resolution: {integrity: sha512-9mG6M6SGYiCO9IfD85Bixg5udXoy2IQHCRdBoQmpNej5+FrDW1a3FeDwDzqOFtl9b7axpzPEVb7zp+WK36Rn4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@parcel/rust-linux-arm-gnueabihf@2.16.3': + resolution: {integrity: sha512-zSA1Dz5JWS28DkEMjEQNmf8qk55dR6rcKtwrw5CMg3Ndt30ugrGtRechsqEpXSYYxcDY1kmZ779LwiTUdkdCrQ==} + engines: {node: '>= 10'} + cpu: [arm] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} - cpu: [loong64] + '@parcel/rust-linux-arm64-gnu@2.16.3': + resolution: {integrity: sha512-PvjO0U6qM0JjRCH2eKi3JNKgBVWDBP3VrMEUXJJM8K37ylfLTozK0f7oK2M03voCS1WjKrduRGjJNk8EZrBPow==} + engines: {node: '>= 10'} + cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} - cpu: [loong64] + '@parcel/rust-linux-arm64-musl@2.16.3': + resolution: {integrity: sha512-a4TZB9/Y/y8DQ55XZXh9bNb5yIC9CAoK2YK8g3OytauC8OrHGtIIVlF+E1UCn/FPBFr2dobYOeih/InvLKITpQ==} + engines: {node: '>= 10'} + cpu: [arm64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} - cpu: [ppc64] + '@parcel/rust-linux-x64-gnu@2.16.3': + resolution: {integrity: sha512-6/a/5jDcVwE0xpLSLGI9T2pclgnad0jVFRH/4Gm9yQ5fl2gpYghjg3fcCNeSjJ/aBNFKlOeKLlp/oBSlTtlkoQ==} + engines: {node: '>= 10'} + cpu: [x64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} - cpu: [ppc64] + '@parcel/rust-linux-x64-musl@2.16.3': + resolution: {integrity: sha512-gTUlFvJBLR3UxNjGs076wVuFZyx+X6G6opJzBFaSG9XqLhLo+VrpqHpjCx+SCwSufDLTVq8rWJbwpvbe2EhRJg==} + engines: {node: '>= 10'} + cpu: [x64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} - cpu: [riscv64] + '@parcel/rust-win32-x64-msvc@2.16.3': + resolution: {integrity: sha512-/kyr5CL4XFJpMj9CvW8K1NNNqkzyOhxc7ibXhykiPyPiGOwO/ZbqnfDhqVx3JMSjOASeW1e6UlGNjnfTPvFkGQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@parcel/rust@2.16.3': + resolution: {integrity: sha512-pUsgURnDdlHA9AqvEcm124/9+DB7GM7Mk0qQ9XDNiznl09n8XZ67lf/IIvaMW7y0vQ7FpTzRIrRzAJhGyMRbMw==} + engines: {node: '>= 16.0.0'} + peerDependencies: + napi-wasm: ^1.1.2 + peerDependenciesMeta: + napi-wasm: + optional: true + + '@parcel/source-map@2.1.1': + resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} + engines: {node: ^12.18.3 || >=14} + + '@parcel/types-internal@2.16.3': + resolution: {integrity: sha512-zi2GKdJHpNeW9sspTBfM68A9lekEztTWU8Dxs1ouPk90lfA0tfrMznAvkD5iJdKsM6usbgcqjjI8s+Ow8OrsBg==} + + '@parcel/types@2.16.3': + resolution: {integrity: sha512-aIJJFMif/A7u86UEt3sJPZ/F7suQW56ugiCp2Y2mYTPHpTJbI2Knk9yO4fkWHNO1BrH6a/VUWh7bWIOsQtzL1Q==} + + '@parcel/utils@2.16.3': + resolution: {integrity: sha512-g/yqVWSdZqPvTiS96dEK9MEl7q6w31u+luD5VGt6f9w6PQCpuVajhhDNuXf9uzDU/dL4sSZPKUhLteVZDqryHA==} + engines: {node: '>= 16.0.0'} + + '@parcel/watcher-android-arm64@2.5.4': + resolution: {integrity: sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.4': + resolution: {integrity: sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.4': + resolution: {integrity: sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.4': + resolution: {integrity: sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.4': + resolution: {integrity: sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==} + engines: {node: '>= 10.0.0'} + cpu: [arm] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} - cpu: [riscv64] + '@parcel/watcher-linux-arm-musl@2.5.4': + resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} - cpu: [s390x] + '@parcel/watcher-linux-arm64-glibc@2.5.4': + resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} - cpu: [x64] + '@parcel/watcher-linux-arm64-musl@2.5.4': + resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + '@parcel/watcher-linux-x64-glibc@2.5.4': + resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + '@parcel/watcher-linux-x64-musl@2.5.4': + resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} + engines: {node: '>= 10.0.0'} cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} - cpu: [arm64] - os: [openharmony] + os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + '@parcel/watcher-win32-arm64@2.5.4': + resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + '@parcel/watcher-win32-ia32@2.5.4': + resolution: {integrity: sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==} + engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + '@parcel/watcher-win32-x64@2.5.4': + resolution: {integrity: sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} - cpu: [x64] - os: [win32] + '@parcel/watcher@2.5.4': + resolution: {integrity: sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==} + engines: {node: '>= 10.0.0'} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@parcel/workers@2.16.3': + resolution: {integrity: sha512-SxIXRnrlQFhw377wxWC5WIl1FL1Y9IedhUtuc7j3uac3tlbCQJJ+3rFr5/BDUknJbTktvVsPakE98fH7TIJyyw==} + engines: {node: '>= 16.0.0'} + peerDependencies: + '@parcel/core': ^2.16.3 - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + '@react-aria/autocomplete@3.0.0-rc.4': + resolution: {integrity: sha512-4bMMVNaCuYDZX9HM4ZNSAImZMcL/orwhLLe818+lyzmSrvGmW9h433PZxTolb0d+FnJVfn1MDY0zEWLiyI86GA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@sinonjs/fake-timers@14.0.0': - resolution: {integrity: sha512-QfoXRaUTjMVVn/ZbnD4LS3TPtqOkOdKIYCKldIVPnuClcwRKat6LI2mRZ2s5qiBfO6Fy03An35dSls/2/FEc0Q==} + '@react-aria/breadcrumbs@3.5.30': + resolution: {integrity: sha512-DZymglA70SwvDJA7GB147sUexvdDy6vWcriGrlEHhMMzBLhGB30I5J96R4pPzURLxXISrWFH56KC5rRgIqsqqg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@react-aria/button@3.14.3': + resolution: {integrity: sha512-iJTuEECs9im7TwrCRZ0dvuwp8Gao0+I1IuYs1LQvJQgKLpgRH2/6jAiqb2bdAcoAjdbaMs7Xe0xUwURpVNkEyA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@react-aria/calendar@3.9.3': + resolution: {integrity: sha512-F12UQ4zd8GIxpJxs9GAHzDD9Lby2hESHm0LF5tjsYBIOBJc5K7ICeeE5UqLMBPzgnEP5nfh1CKS8KhCB0mS7PA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/cross-spawn@6.0.6': - resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + '@react-aria/checkbox@3.16.3': + resolution: {integrity: sha512-2p1haCUtERo5XavBAWNaX//dryNVnOOWfSKyzLs4UiCZR/NL0ttN+Nu/i445q0ipjLqZ6bBJtx0g0NNrubbU7Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@react-aria/collections@3.0.1': + resolution: {integrity: sha512-C8KBQGXzVefR4I+hQmkb10t09Jt1Ivl12qgQKshmT0hV2yBESXEYWMZUxV4ggOgWDreAgCtr+Ho3X+7MzBQT8Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@react-aria/color@3.1.3': + resolution: {integrity: sha512-EHzsFbqzFrO1/3irEa8E8wawlQg7hRd4/Jscvl9zhplAcrWFd6L5TWl8463Z6h0J6zN1eH9T2QDEn6rivDLkkg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + '@react-aria/combobox@3.14.1': + resolution: {integrity: sha512-wuP/4UQrGsYXLw1Gk8G/FcnUlHuoViA9G6w3LhtUgu5Q3E5DvASJalxej3NtyYU+4w4epD1gJidzosAL0rf8Ug==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + '@react-aria/datepicker@3.15.3': + resolution: {integrity: sha512-0KkLYeLs+IubHXb879n8dzzKU/NWcxC9DXtv7M/ofL7vAvMSTmaceYJcMW+2gGYhJVpyYz8B6bk0W7kTxgB3jg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@react-aria/dialog@3.5.32': + resolution: {integrity: sha512-2puMjsJS2FtB8LiFuQDAdBSU4dt3lqdJn4FWt/8GL6l91RZBqp2Dnm5Obuee6rV2duNJZcSAUWsQZ/S1iW8Y2g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/node@22.19.7': - resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} + '@react-aria/disclosure@3.1.1': + resolution: {integrity: sha512-4k8Y3CZEl+Qhou0fH7Sj7BbzvwAfi1JDL+hG7U20ZL5+MJ/VbDYuYX2gYK2KqdlbeuuzGcov3ZFQbyIVHMY+/A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/semver@7.7.1': - resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@react-aria/dnd@3.11.4': + resolution: {integrity: sha512-dBrnM33Kmk76F+Pknh2WfSLIX4dsYwFzWJUIABJCPmPc80hTG0so7mfqH45ba759/6ERMfXXoodZPLtypOjYPg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/sinonjs__fake-timers@8.1.5': - resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + '@react-aria/focus@3.21.3': + resolution: {integrity: sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@react-aria/form@3.1.3': + resolution: {integrity: sha512-HAKnPjMiqTxoGLVbfZyGYcZQ1uu6aSeCi9ODmtZuKM5DWZZnTUjDmM1i2L6IXvF+d1kjyApyJC7VTbKZ8AI77g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@react-aria/grid@3.14.6': + resolution: {integrity: sha512-xagBKHNPu4Ovt/I5He7T/oIEq82MDMSrRi5Sw3oxSCwwtZpv+7eyKRSrFz9vrNUzNgWCcx5VHLE660bLdeVNDQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + '@react-aria/gridlist@3.14.2': + resolution: {integrity: sha512-c51ip0bc/lKppfrPNFHbWu1n/r0NHd9Xl114904cDxuRcElJ3H/V/3e3U9HyDy+4xioiXZIdZ75CNxtEoTmrxw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@react-aria/i18n@3.12.14': + resolution: {integrity: sha512-zYvs1FlLamFD49uneX3i5mPHrAsB3OjVpSWApTcPw8ydxOaphQDp/Q1aqrbcxlrQCcxZdXWHuvLlbkNR4+8jzw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@react-aria/interactions@3.26.0': + resolution: {integrity: sha512-AAEcHiltjfbmP1i9iaVw34Mb7kbkiHpYdqieWufldh4aplWgsF11YQZOfaCJW4QoR2ML4Zzoa9nfFwLXA52R7Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@react-aria/label@3.7.23': + resolution: {integrity: sha512-dRkuCJfsyBHPTq3WOJVHNRvNyQL4cRRLELmjYfUX9/jQKIsUW2l71YnUHZTRCSn2ZjhdAcdwq96fNcQo0hncBQ==} peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@react-aria/landmark@3.0.8': + resolution: {integrity: sha512-xuY8kYxCrF9C0h0Pj2lZHoxCidNfQ/SrkYWXuiN+LuBTJGCmPVif93gt7TklQ0rKJ+pKJsUgh8AC0pgwI3QP7A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@react-aria/link@3.8.7': + resolution: {integrity: sha512-TOC6Hf/x3N0P8SLR1KD/dGiJ9PmwAq8H57RiwbFbdINnG/HIvIQr5MxGTjwBvOOWcJu9brgWL5HkQaZK7Q/4Yw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@react-aria/listbox@3.15.1': + resolution: {integrity: sha512-81iDLFhmPXvLOtkI0SKzgrngfzwfR2o9oFDAYRfpYCOxgT7jjh8SaB4wCteJXRiMwymRGmgyTvD4yxWTluEeXA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@react-aria/live-announcer@3.4.4': + resolution: {integrity: sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@react-aria/menu@3.19.4': + resolution: {integrity: sha512-0A0DUEkEvZynmaD3zktHavM+EmgZSR/ht+g1ExS2jXe73CegA+dbSRfPl9eIKcHxaRrWOV96qMj2pTf0yWTBDg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + '@react-aria/meter@3.4.28': + resolution: {integrity: sha512-elACITUBOf4Dp+BQ2aIgHIe58fjWYjspxhVcE5BMiqePktOfRkpb9ESj8nWcNXO8eqCYwrFJpElHvXkjYLWemw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} + '@react-aria/numberfield@3.12.3': + resolution: {integrity: sha512-70LRXWPEuj2X8mbQXUx6l6We+RGs49Kb+2eUiSSLArHK4RvTWJWEfSjHL5IHHJ+j2AkbORdryD7SR3gcXSX+5w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} + '@react-aria/overlays@3.31.0': + resolution: {integrity: sha512-Vq41X1s8XheGIhGbbuqRJslJEX08qmMVX//dwuBaFX9T18mMR04tumKOMxp8Lz+vqwdGLvjNUYDMcgolL+AMjw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + '@react-aria/progress@3.4.28': + resolution: {integrity: sha512-3NUUAu+rwf1M7pau9WFkrxe/PlBPiqCl/1maGU7iufVveHnz+SVVqXdNkjYx+WkPE0ViwG86Zx6OU4AYJ1pjNw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + '@react-aria/radio@3.12.3': + resolution: {integrity: sha512-noucVX++9J3VYWg7dB+r09NVX8UZSR1TWUMCbT/MffzhltOsmiLJVvgJ0uEeeVRuu3+ZM63jOshrzG89anX4TQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} - engines: {node: '>=18'} + '@react-aria/searchfield@3.8.10': + resolution: {integrity: sha512-1wMoSjXoekcETC4ZP5AUcWoaK96FssVuF9MgqQNqE5VnauQDjZBpPCfz6GSZwRHTGwoqb7CI4iEi7433kd50xg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + '@react-aria/select@3.17.1': + resolution: {integrity: sha512-jPMuaSp+4SbdE9G5UrrTer2CPbbUnUSLd8I2wgRgGcyk3wFw9DtnUNfms+UBA/2SrVnAEJ6KCQAI0oiMK2m+tQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} + '@react-aria/selection@3.27.0': + resolution: {integrity: sha512-4zgreuCu4QM4t2U7aF3mbMvIKCEkTEo6h6nGJvbyZALZ/eFtLTvUiV8/5CGDJRLGvgMvi3XxUeF9PZbpk5nMJg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + '@react-aria/separator@3.4.14': + resolution: {integrity: sha512-a32OB5HMAmXEdExyDvsadsnlmNcVxxpx3tt+Jxxl6H9CHsLO+Ak077KGFJteGVg4bTfhWGAgczOsnvIioR88xw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} + '@react-aria/slider@3.8.3': + resolution: {integrity: sha512-tOZVH+wLt3ik0C3wyuXqHL9fvnQ5S+/tHMYB7z8aZV5cEe36Gt4efBILphlA7ChkL/RvpHGK2AGpEGxvuEQIuQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + '@react-aria/spinbutton@3.7.0': + resolution: {integrity: sha512-FOyH94BZp+jNhUJuZqXSubQZDNQEJyW/J19/gwCxQvQvxAP79dhDFshh1UtrL4EjbjIflmaOes+sH/XEHUnJVA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + '@react-aria/ssr@3.9.10': + resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + '@react-aria/switch@3.7.9': + resolution: {integrity: sha512-RZtuFRXews0PBx8Fc2R/kqaIARD5YIM5uYtmwnWfY7y5bEsBGONxp0d+m2vDyY7yk+VNpVFBdwewY9GbZmH1CA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - ctrlc-windows@2.2.0: - resolution: {integrity: sha512-t9y568r+T8FUuBaqKK60YGFJdj3b3ktdJW9WXIT3CuBdQhAOYdSZu75jFUN0Ay4Yz5HHicVQqAYCwcnqhOn23g==} + '@react-aria/table@3.17.9': + resolution: {integrity: sha512-Jby561E1YfzoRgtp+RQuhDz4vnxlcqol9RTgQQ7FWXC2IcN9Pny1COU34LkA1cL9VeB9LJ0+qfMhGw4aAwaUmw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + '@react-aria/tabs@3.10.9': + resolution: {integrity: sha512-2+FNd7Ohr3hrEgYrKdZW0FWbgybzTVZft6tw95oQ2+9PnjdDVdtzHliI+8HY8jzb4hTf4bU7O8n+s/HBlCBSIw==} peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} + '@react-aria/tag@3.7.3': + resolution: {integrity: sha512-fonqGFxhpnlIDOz3u38y4+MG5wyAef9+oDybsCKaJ57K+D4BTvSmpGBemN/mcaxdabnYfyhasCm0H91Q9XRcCA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-aria/textfield@3.18.3': + resolution: {integrity: sha512-ehiSHOKuKCwPdxFe7wGE0QJlSeeJR4iJuH+OdsYVlZzYbl9J/uAdGbpsj/zPhNtBo1g/Td76U8TtTlYRZ8lUZw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - effect@3.19.14: - resolution: {integrity: sha512-3vwdq0zlvQOxXzXNKRIPKTqZNMyGCdaFUBfMPqpsyzZDre67kgC1EEHDV4EoQTovJ4w5fmJW756f86kkuz7WFA==} + '@react-aria/toast@3.0.9': + resolution: {integrity: sha512-2sRitczXl5VEwyq97o8TVvq3bIqLA7EfA7dhDPkYlHGa4T1vzKkhNqgkskKd9+Tw7gqeFRFjnokh+es9jkM11g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - effection@4.0.0: - resolution: {integrity: sha512-eW2yqhyBdey4k8lkp7hpiev2FSHvJvQqvaIebI3EGikHZvfUWvNy7SmkwOnJa6WcsUtSh7VHUwdjHTbV++8M9w==} - engines: {node: '>= 16'} + '@react-aria/toggle@3.12.3': + resolution: {integrity: sha512-mciUbeVP99fRObnH5qLFrkKXX+5VKeV6BhFJlmz1eo3ltR/0xZKnUcycA2CGzmqtB70w09CAhr8NMEnpNH8dwQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + '@react-aria/toolbar@3.0.0-beta.22': + resolution: {integrity: sha512-Q1gOj6N4vzvpGrIoNAxpUudEQP82UgQACENH/bcH8FnEMbSP7DHvVfDhj7GTU6ldMXO2cjqLhiidoUK53gkCiA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} - hasBin: true + '@react-aria/tooltip@3.9.0': + resolution: {integrity: sha512-2O1DXEV8/+DeUq9dIlAfaNa7lSG+7FCZDuF+sNiPYnZM6tgFOrsId26uMF5EuwpVfOvXSSGnq0+6Ma2On7mZPg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + '@react-aria/tree@3.1.5': + resolution: {integrity: sha512-FAq7pAhRVrWU0U/8QbQIJfBqHuoCD+F9rR9ruoM3oL0vVIZxVN57ak/dhyge3EGlraTl9vzFi6IRceXiMuk5kg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + '@react-aria/utils@3.32.0': + resolution: {integrity: sha512-/7Rud06+HVBIlTwmwmJa2W8xVtgxgzm0+kLbuFooZRzKDON6hhozS1dOMR/YLMxyJOaYOTpImcP4vRR9gL1hEg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} + '@react-aria/virtualizer@4.1.11': + resolution: {integrity: sha512-eYL//bX11Aox4Eh1BSZFX4I/4EdyVVWLjmpW+Y5qy4WajNrowjiuJJM7Fp1rQBlOAVuz0KbaDmFhiU3Z3rWjsw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-aria/visually-hidden@3.8.29': + resolution: {integrity: sha512-1joCP+MHBLd+YA6Gb08nMFfDBhOF0Kh1gR1SA8zoxEB5RMfQEEkufIB8k0GGwvHGSCK3gFyO8UAVsD0+rRYEyg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - fast-check@3.23.2: - resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} - engines: {node: '>=8.0.0'} + '@react-spectrum/s2@1.0.0': + resolution: {integrity: sha512-51b5K+izQ4sozoejU/nXEZKRnWOIuO8s09dzWGX8BqkV1Rtx8qPbQpZXPcb/sww/Nx1ZT/l7MhW6SbcbKkymWw==} + peerDependencies: + react: ^19.0.0-rc.1 + react-dom: ^19.0.0-rc.1 - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} + '@react-spectrum/utils@3.12.10': + resolution: {integrity: sha512-VmK53ve+lLf/aMT2eApo8J6ElqHG+SEQMYvEWDWupxldOq595trCZikxe9HhR4U1vbDNbrz9oLcA/o0n+G419g==} peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + '@react-stately/autocomplete@3.0.0-beta.4': + resolution: {integrity: sha512-K2Uy7XEdseFvgwRQ8CyrYEHMupjVKEszddOapP8deNz4hntYvT1aRm0m+sKa5Kl/4kvg9c/3NZpQcrky/vRZIg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + '@react-stately/calendar@3.9.1': + resolution: {integrity: sha512-q0Q8fivpQa1rcLg5daUVxwVj1smCp1VnpX9A5Q5PkI9lH9x+xdS0Y6eOqb8Ih3TKBDkx9/oEZonOX7RYNIzSig==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - generatorics@1.1.0: - resolution: {integrity: sha512-LuYDCS1DbKQsvChP1xHmAzHnGdd0z0K1XMebmbNbFzGZI62KODnV2CXA7zOqebiDzlK2sxXrPGfwlDzSm9aP4g==} - engines: {node: '>=6.0.0'} + '@react-stately/checkbox@3.7.3': + resolution: {integrity: sha512-ve2K+uWT+NRM1JMn+tkWJDP2iBAaWvbZ0TbSXs371IUcTWaNW61HygZ+UFOB/frAZGloazEKGqAsX5XjFpgB9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + '@react-stately/collections@3.12.8': + resolution: {integrity: sha512-AceJYLLXt1Y2XIcOPi6LEJSs4G/ubeYW3LqOCQbhfIgMaNqKfQMIfagDnPeJX9FVmPFSlgoCBxb1pTJW2vjCAQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + '@react-stately/color@3.9.3': + resolution: {integrity: sha512-H5lQgl07upsI7+cxTwYo639ziDDG1DFgOtq5pmC4Nxi8uNl8sR/8YeLaYuxyJiVkj2VLHBYRQ3+JcxrdduFvPQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} + '@react-stately/combobox@3.12.1': + resolution: {integrity: sha512-RwfTTYgKJ9raIY+7grZ5DbfVRSO5pDjo/ur2VN/28LZzM0eOQrLFQ00vpBmY7/R64sHRpcXLDxpz5cqpKCdvTw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + '@react-stately/data@3.15.0': + resolution: {integrity: sha512-ocP39NQQkrbtHVCPsqltNncpEHaONyYX/8s2UK9xeLRc+55NtDI2RZDKTUf/mi6H2SHxzEwLMQH8hWtEwC55mQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + '@react-stately/datepicker@3.15.3': + resolution: {integrity: sha512-RDYoz1R/EkCyxHYewb58T7DngU3gl6CnQL7xiWiDlayPnstGaanoQ3yCZGJaIQwR8PrKdNbQwXF9NlSmj8iCOw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + '@react-stately/disclosure@3.0.9': + resolution: {integrity: sha512-M3HKsXqdzYKQf1TpnQRLZ6+/b8E3Nba3oOuY0OW5NnM5dZWSnXuj8foBQJT118FdLgMjpfBdPIkUvnaGiDCs5w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-stately/dnd@3.7.2': + resolution: {integrity: sha512-tr5nNgrLMn5GV308K1f010XUZ2j8CApqHrrcjg5fa2AnpO2gECcOf+UEnAvoFNUsvknje4iPX8y0/0No2ZHsgA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-stately/flags@3.1.2': + resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-stately/form@3.2.2': + resolution: {integrity: sha512-soAheOd7oaTO6eNs6LXnfn0tTqvOoe3zN9FvtIhhrErKz9XPc5sUmh3QWwR45+zKbitOi1HOjfA/gifKhZcfWw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-stately/grid@3.11.7': + resolution: {integrity: sha512-SqzBSxUTFZKLZicfXDK+M0A3gh07AYK1pmU/otcq2cjZ0nSC4CceKijQ2GBZnl+YGcGHI1RgkhpLP6ZioMYctQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-stately/layout@4.5.2': + resolution: {integrity: sha512-quAzYkshApkv1vChz2NXBaLTC7ihJUmv3ijqJBHCkZSY6qq+1qnc4aGespDF1f3mPhmpGswTFGXFImFTAYfi5g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + '@react-stately/list@3.13.2': + resolution: {integrity: sha512-dGFALuQWNNOkv7W12qSsXLF4mJHLeWeK2hVvdyj4SI8Vxku+BOfaVKuW3sn3mNiixI1dM/7FY2ip4kK+kv27vw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + '@react-stately/menu@3.9.9': + resolution: {integrity: sha512-moW5JANxMxPilfR0SygpCWCZe7Ef09oadgzTZthRymNRv0PXVS9ad4wd1EkwuMvPH/n0uZLZE2s8hNyFDgyqPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + '@react-stately/numberfield@3.10.3': + resolution: {integrity: sha512-40g/oyVcWoEaLqkr61KuHZzQVLLXFi3oa2K8XLnb6o+859SM4TX3XPNqL6eNQjXSKoJO5Hlgpqhee9j+VDbGog==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + '@react-stately/overlays@3.6.21': + resolution: {integrity: sha512-7f25H1PS2g+SNvuWPEW30pSGqYNHxesCP4w+1RcV/XV1oQI7oP5Ji2WfI0QsJEFc9wP/ZO1pyjHNKpfLI3O88g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + '@react-stately/radio@3.11.3': + resolution: {integrity: sha512-8+Cy0azV1aBWKcBfGHi3nBa285lAS6XhmVw2LfEwxq8DeVKTbJAaCHHwvDoclxDiOAnqzE0pio0QMD8rYISt9g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + '@react-stately/searchfield@3.5.17': + resolution: {integrity: sha512-/KExpJt6EGyuLxy/PRQJlETQxJGw8tRxVws6qF1lankN49Os2UhFEWi7ogbMCOWN67gIgevhZRdzmJnuov6BEQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + '@react-stately/select@3.9.0': + resolution: {integrity: sha512-eNE33zVYpVdCPKRPGYyViN3LnEq82e1wjBIrs9T7Vo4EBnJeT57pqMZpalTPk7qsA+861t14Qrj7GnUd+YbEXw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + '@react-stately/selection@3.20.7': + resolution: {integrity: sha512-NkiRsNCfORBIHNF1bCavh4Vvj+Yd5NffE10iXtaFuhF249NlxLynJZmkcVCqNP9taC2pBIHX00+9tcBgxhG+mA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + '@react-stately/slider@3.7.3': + resolution: {integrity: sha512-9QGnQNXFAH52BzxtU7weyOV/VV7/so6uIvE8VOHfc6QR3GMBM/kJvqBCTWZfQ0pxDIsRagBQDD/tjB09ixTOzg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} + '@react-stately/table@3.15.2': + resolution: {integrity: sha512-vgEArBN5ocqsQdeORBj6xk8acu5iFnd/CyXEQKl0R5RyuYuw0ms8UmFHvs8Fv1HONehPYg+XR4QPliDFPX8R9A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + '@react-stately/tabs@3.8.7': + resolution: {integrity: sha512-ETZEzg7s9F2SCvisZ2cCpLx6XBHqdvVgDGU5l3C3s9zBKBr6lgyLFt61IdGW8XXZRUvw4mMGT6tGQbXeGvR0Wg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + '@react-stately/toast@3.1.2': + resolution: {integrity: sha512-HiInm7bck32khFBHZThTQaAF6e6/qm57F4mYRWdTq8IVeGDzpkbUYibnLxRhk0UZ5ybc6me+nqqPkG/lVmM42Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} + '@react-stately/toggle@3.9.3': + resolution: {integrity: sha512-G6aA/aTnid/6dQ9dxNEd7/JqzRmVkVYYpOAP+l02hepiuSmFwLu4nE98i4YFBQqFZ5b4l01gMrS90JGL7HrNmw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} + '@react-stately/tooltip@3.5.9': + resolution: {integrity: sha512-YwqtxFqQFfJtbeh+axHVGAfz9XHf73UaBndHxSbVM/T5c1PfI2yOB39T2FOU5fskZ2VMO3qTDhiXmFgGbGYSfQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@react-stately/tree@3.9.4': + resolution: {integrity: sha512-Re1fdEiR0hHPcEda+7ecw+52lgGfFW0MAEDzFg9I6J/t8STQSP+1YC0VVVkv2xRrkLbKLPqggNKgmD8nggecnw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + '@react-stately/utils@3.11.0': + resolution: {integrity: sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + '@react-stately/virtualizer@4.4.4': + resolution: {integrity: sha512-ri8giqXSZOrznZDCCOE4U36wSkOhy+hrFK7yo/YVcpxTqqp3d3eisfKMqbDsgqBW+XTHycTU/xeAf0u9NqrfpQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + '@react-types/autocomplete@3.0.0-alpha.36': + resolution: {integrity: sha512-J/wYkXom9zmEX/xuGjKrqMco9sf5AcByNXOgGAx82LMlk0jFcViggVjIYo/Qzr0TmDeTWyy++r1N59POI6179g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - remeda@2.33.4: - resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + '@react-types/breadcrumbs@3.7.17': + resolution: {integrity: sha512-IhvVTcfli5o/UDlGACXxjlor2afGlMQA8pNR3faH0bBUay1Fmm3IWktVw9Xwmk+KraV2RTAg9e+E6p8DOQZfiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + '@react-types/button@3.14.1': + resolution: {integrity: sha512-D8C4IEwKB7zEtiWYVJ3WE/5HDcWlze9mLWQ5hfsBfpePyWCgO3bT/+wjb/7pJvcAocrkXo90QrMm85LcpBtrpg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true + '@react-types/calendar@3.8.1': + resolution: {integrity: sha512-B0UuitMP7YkArBAQldwSZSNL2WwazNGCG+lp6yEDj831NrH9e36/jcjv1rObQ9ZMS6uDX9LXu5C8V5RFwGQabA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + '@react-types/checkbox@3.10.2': + resolution: {integrity: sha512-ktPkl6ZfIdGS1tIaGSU/2S5Agf2NvXI9qAgtdMDNva0oLyAZ4RLQb6WecPvofw1J7YKXu0VA5Mu7nlX+FM2weQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + '@react-types/color@3.1.2': + resolution: {integrity: sha512-NP0TAY3j4tlMztOp/bBfMlPwC9AQKTjSiTFmc2oQNkx5M4sl3QpPqFPosdt7jZ8M4nItvfCWZrlZGjST4SB83A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - shellwords-ts@3.0.1: - resolution: {integrity: sha512-GabK4ApLMqHFRGlpgNqg8dmtHTnYHt0WUUJkIeMd3QaDrUUBEDXHSSNi3I0PzMimg8W+I0EN4TshQxsnHv1cwg==} + '@react-types/combobox@3.13.10': + resolution: {integrity: sha512-Wo4iix++ID6JzoH9eD7ddGUlirQiGpN/VQc3iFjnaTXiJ/cj3v+1oGsDGCZZTklTVeUMU7SRBfMhMgxHHIYLXA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + '@react-types/datepicker@3.13.3': + resolution: {integrity: sha512-OTRa3banGxcUQKRTLUzr0zTVUMUL+Az1BWARCYQ+8Z/dlkYXYUW0fnS5I0pUEqihgai15KxiY13U0gAqbNSfcA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + '@react-types/dialog@3.5.22': + resolution: {integrity: sha512-smSvzOcqKE196rWk0oqJDnz+ox5JM5+OT0PmmJXiUD4q7P5g32O6W5Bg7hMIFUI9clBtngo8kLaX2iMg+GqAzg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + '@react-types/form@3.7.16': + resolution: {integrity: sha512-Sb7KJoWEaQ/e4XIY+xRbjKvbP1luome98ZXevpD+zVSyGjEcfIroebizP6K1yMHCWP/043xH6GUkgEqWPoVGjg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + '@react-types/grid@3.3.6': + resolution: {integrity: sha512-vIZJlYTii2n1We9nAugXwM2wpcpsC6JigJFBd6vGhStRdRWRoU4yv1Gc98Usbx0FQ/J7GLVIgeG8+1VMTKBdxw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + '@react-types/link@3.6.5': + resolution: {integrity: sha512-+I2s3XWBEvLrzts0GnNeA84mUkwo+a7kLUWoaJkW0TOBDG7my95HFYxF9WnqKye7NgpOkCqz4s3oW96xPdIniQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + '@react-types/listbox@3.7.4': + resolution: {integrity: sha512-p4YEpTl/VQGrqVE8GIfqTS5LkT5jtjDTbVeZgrkPnX/fiPhsfbTPiZ6g0FNap4+aOGJFGEEZUv2q4vx+rCORww==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + '@react-types/menu@3.10.5': + resolution: {integrity: sha512-HBTrKll2hm0VKJNM4ubIv1L9MNo8JuOnm2G3M+wXvb6EYIyDNxxJkhjsqsGpUXJdAOSkacHBDcNh2HsZABNX4A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + '@react-types/meter@3.4.13': + resolution: {integrity: sha512-EiarfbpHcvmeyXvXcr6XLaHkNHuGc4g7fBVEiDPwssFJKKfbUzqnnknDxPjyspqUVRcXC08CokS98J1jYobqDg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + '@react-types/numberfield@3.8.16': + resolution: {integrity: sha512-945F0GsD7K2T293YXhap+2Runl3tZWbnhadXVHFWLbqIKKONZFSZTfLKxQcbFr+bQXr2uh1bVJhYcOiS1l5M+A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + '@react-types/overlays@3.9.2': + resolution: {integrity: sha512-Q0cRPcBGzNGmC8dBuHyoPR7N3057KTS5g+vZfQ53k8WwmilXBtemFJPLsogJbspuewQ/QJ3o2HYsp2pne7/iNw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} + '@react-types/progress@3.5.16': + resolution: {integrity: sha512-I9tSdCFfvQ7gHJtm90VAKgwdTWXQgVNvLRStEc0z9h+bXBxdvZb+QuiRPERChwFQ9VkK4p4rDqaFo69nDqWkpw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} + '@react-types/provider@3.8.13': + resolution: {integrity: sha512-z8hXswAQovSNIVIO0J6ft8/6uwWP40zE9U0f3V9sO6DyMFv27v38ANFV8RqNkm0DTXnTiIGvDk/JZgvWrz/lOg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} + '@react-types/radio@3.9.2': + resolution: {integrity: sha512-3UcJXu37JrTkRyP4GJPDBU7NmDTInrEdOe+bVzA1j4EegzdkJmLBkLg5cLDAbpiEHB+xIsvbJdx6dxeMuc+H3g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} - engines: {node: '>=14.0.0'} + '@react-types/searchfield@3.6.6': + resolution: {integrity: sha512-cl3itr/fk7wbIQc2Gz5Ie8aVeUmPjVX/mRGS5/EXlmzycAKNYTvqf2mlxwObLndtLISmt7IgNjRRhbUUDI8Ang==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + '@react-types/select@3.12.0': + resolution: {integrity: sha512-tM3mEbQNotvCJs1gYRFyIeXmXrIBSBLGw7feCIaYSO45IyjCGv8NZwpQWjoKPaWo3GpbHfHMNlWlq3v5QQPIXw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - turbo-darwin-64@2.7.5: - resolution: {integrity: sha512-nN3wfLLj4OES/7awYyyM7fkU8U8sAFxsXau2bYJwAWi6T09jd87DgHD8N31zXaJ7LcpyppHWPRI2Ov9MuZEwnQ==} + '@react-types/shared@3.32.1': + resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/slider@3.8.2': + resolution: {integrity: sha512-MQYZP76OEOYe7/yA2To+Dl0LNb0cKKnvh5JtvNvDnAvEprn1RuLiay8Oi/rTtXmc2KmBa4VdTcsXsmkbbkeN2Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/switch@3.5.15': + resolution: {integrity: sha512-r/ouGWQmIeHyYSP1e5luET+oiR7N7cLrAlWsrAfYRWHxqXOSNQloQnZJ3PLHrKFT02fsrQhx2rHaK2LfKeyN3A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/table@3.13.4': + resolution: {integrity: sha512-I/DYiZQl6aNbMmjk90J9SOhkzVDZvyA3Vn3wMWCiajkMNjvubFhTfda5DDf2SgFP5l0Yh6TGGH5XumRv9LqL5Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/tabs@3.3.20': + resolution: {integrity: sha512-Kjq4PypapdMOVPAQgaFIKH65Kr3YnRvaxBGd6RYizTsqYImQhXoGj6B4lBpjYy4KhfRd4dYS82frHqTGKmBYiA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/textfield@3.12.6': + resolution: {integrity: sha512-hpEVKE+M3uUkTjw2WrX1NrH/B3rqDJFUa+ViNK2eVranLY4ZwFqbqaYXSzHupOF3ecSjJJv2C103JrwFvx6TPQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/tooltip@3.5.0': + resolution: {integrity: sha512-o/m1wlKlOD2sLb9vZLWdVkD5LFLHBMLGeeK/bhyUtp0IEdUeKy0ZRTS7pa/A50trov9RvdbzLK79xG8nKNxHew==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@rolldown/pluginutils@1.0.0-beta.53': + resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} + + '@rollup/rollup-android-arm-eabi@4.55.2': + resolution: {integrity: sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.55.2': + resolution: {integrity: sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.55.2': + resolution: {integrity: sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.55.2': + resolution: {integrity: sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.55.2': + resolution: {integrity: sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.55.2': + resolution: {integrity: sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.55.2': + resolution: {integrity: sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.55.2': + resolution: {integrity: sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.55.2': + resolution: {integrity: sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.55.2': + resolution: {integrity: sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.55.2': + resolution: {integrity: sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.55.2': + resolution: {integrity: sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.55.2': + resolution: {integrity: sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.55.2': + resolution: {integrity: sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.55.2': + resolution: {integrity: sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.55.2': + resolution: {integrity: sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.55.2': + resolution: {integrity: sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.55.2': + resolution: {integrity: sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.55.2': + resolution: {integrity: sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.55.2': + resolution: {integrity: sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.55.2': + resolution: {integrity: sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.55.2': + resolution: {integrity: sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.55.2': + resolution: {integrity: sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.55.2': + resolution: {integrity: sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.55.2': + resolution: {integrity: sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==} + cpu: [x64] + os: [win32] + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@14.0.0': + resolution: {integrity: sha512-QfoXRaUTjMVVn/ZbnD4LS3TPtqOkOdKIYCKldIVPnuClcwRKat6LI2mRZ2s5qiBfO6Fy03An35dSls/2/FEc0Q==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/core-darwin-arm64@1.15.10': + resolution: {integrity: sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.15.10': + resolution: {integrity: sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==} + engines: {node: '>=10'} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.7.5: - resolution: {integrity: sha512-wCoDHMiTf3FgLAbZHDDx/unNNonSGhsF5AbbYODbxnpYyoKDpEYacUEPjZD895vDhNvYCH0Nnk24YsP4n/cD6g==} - cpu: [arm64] - os: [darwin] + '@swc/core-linux-arm-gnueabihf@1.15.10': + resolution: {integrity: sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.15.10': + resolution: {integrity: sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.15.10': + resolution: {integrity: sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.15.10': + resolution: {integrity: sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.15.10': + resolution: {integrity: sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.15.10': + resolution: {integrity: sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.15.10': + resolution: {integrity: sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.10': + resolution: {integrity: sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.15.10': + resolution: {integrity: sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.18': + resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} + + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/cross-spawn@6.0.6': + resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@1.1.11': + resolution: {integrity: sha512-lnQiU7jV+Gyk9oQYk0GGYccuexmQPTp08E0+4BidgFdiJivjEvf+esPSdZqCZ2C7UwTWejWpqetVaU8A+eX3FA==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/node@22.19.7': + resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} + + '@types/raf@3.4.3': + resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.8': + resolution: {integrity: sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==} + + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + + '@types/sinonjs__fake-timers@8.1.5': + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + + '@vitejs/plugin-react@5.1.2': + resolution: {integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + arkregex@0.0.5: + resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==} + + arktype@2.1.29: + resolution: {integrity: sha512-jyfKk4xIOzvYNayqnD8ZJQqOwcrTOUbIU4293yrzAjA3O1dWh61j71ArMQ6tS/u4pD7vabSPe7nG3RCyoXW6RQ==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + baseline-browser-mapping@2.9.15: + resolution: {integrity: sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==} + hasBin: true + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + caniuse-lite@1.0.30001765: + resolution: {integrity: sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==} + + canvg@4.0.3: + resolution: {integrity: sha512-fKzMoMBwus3CWo1Uy8XJc4tqqn98RoRrGV6CsIkaNiQT5lOeHuMh4fOt+LXLzn2Wqtr4p/c2TOLz4xtu4oBlFA==} + engines: {node: '>=12.0.0'} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + + chain-function@1.0.1: + resolution: {integrity: sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + ctrlc-windows@2.2.0: + resolution: {integrity: sha512-t9y568r+T8FUuBaqKK60YGFJdj3b3ktdJW9WXIT3CuBdQhAOYdSZu75jFUN0Ay4Yz5HHicVQqAYCwcnqhOn23g==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@1.1.9: + resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dom-helpers@3.4.0: + resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} + + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + effect@3.19.15: + resolution: {integrity: sha512-vzMmgfZKLcojmUjBdlQx+uaKryO7yULlRxjpDnHdnvcp1NPHxJyoM6IOXBLlzz2I/uPtZpGKavt5hBv7IvGZkA==} + + effection@https://pkg.pr.new/thefrontside/effection@5010883: + resolution: {tarball: https://pkg.pr.new/thefrontside/effection@5010883} + version: 4.0.1-pr + engines: {node: '>= 16'} + + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + generatorics@1.1.0: + resolution: {integrity: sha512-LuYDCS1DbKQsvChP1xHmAzHnGdd0z0K1XMebmbNbFzGZI62KODnV2CXA7zOqebiDzlK2sxXrPGfwlDzSm9aP4g==} + engines: {node: '>=6.0.0'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + intl-messageformat@10.7.18: + resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + lightningcss-android-arm64@1.31.1: + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.31.1: + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.31.1: + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.31.1: + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.31.1: + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.31.1: + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.31.1: + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.31.1: + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.31.1: + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.31.1: + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.31.1: + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} + engines: {node: '>= 12.0.0'} + + lmdb@2.8.5: + resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} + hasBin: true + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.8: + resolution: {integrity: sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + ordered-binary@1.6.1: + resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + + react-aria-components@1.14.0: + resolution: {integrity: sha512-u21N/yS6Ozk9P9oO8wxMNZSFiPk6F3aAE9w6aN7pseGPApkjXqDyPNCnTsTTvMtVL3QRBkVbf7fJ5yi2hksVEg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react-aria@3.45.0: + resolution: {integrity: sha512-QsdWIhhm3+IAiW3SU9tEm7pmeIcveEPAO6riZ1IUF78ZCvH/47nU4zVztcdtYmwYWSL4168QxLncWKtlMva3BA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react-d3-tree@3.6.6: + resolution: {integrity: sha512-E9ByUdeqvlxLlF9BSL7KWQH3ikYHtHO+g1rAPcVgj6mu92tjRUCan2AWxoD4eTSzzAATf8BZtf+CXGSoSd6ioQ==} + peerDependencies: + react: 16.x || 17.x || 18.x || 19.x + react-dom: 16.x || 17.x || 18.x || 19.x + + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + peerDependencies: + react: ^19.2.3 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + + react-router@7.13.0: + resolution: {integrity: sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-stately@3.43.0: + resolution: {integrity: sha512-dScb9fTL1tRtFODPnk/2rP0a9kp1C+7+40RArS0C7j0auAUmnrO/wDILojwQUso7/kkys4fP707fTwGJDeJ7vg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + engines: {node: '>=0.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + remeda@2.33.4: + resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + + rgbcolor@1.0.1: + resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} + engines: {node: '>= 0.8.15'} + + robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + + rollup@4.55.2: + resolution: {integrity: sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shellwords-ts@3.0.1: + resolution: {integrity: sha512-GabK4ApLMqHFRGlpgNqg8dmtHTnYHt0WUUJkIeMd3QaDrUUBEDXHSSNi3I0PzMimg8W+I0EN4TshQxsnHv1cwg==} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + sse-stream-transform@1.0.0: + resolution: {integrity: sha512-2qhugYdDiuqJ35BpaKBg3U+T6nZUuJ3HqEk+6HVuEygUrhas+5nFXW7KzC4EXmMIUAoHehY7SEKKnOTbwCzkTg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + stackblur-canvas@2.7.0: + resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==} + engines: {node: '>=0.1.14'} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + svg-pathdata@6.0.3: + resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} + engines: {node: '>=12.0.0'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + turbo-darwin-64@2.7.5: + resolution: {integrity: sha512-nN3wfLLj4OES/7awYyyM7fkU8U8sAFxsXau2bYJwAWi6T09jd87DgHD8N31zXaJ7LcpyppHWPRI2Ov9MuZEwnQ==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.7.5: + resolution: {integrity: sha512-wCoDHMiTf3FgLAbZHDDx/unNNonSGhsF5AbbYODbxnpYyoKDpEYacUEPjZD895vDhNvYCH0Nnk24YsP4n/cD6g==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.7.5: + resolution: {integrity: sha512-KKPvhOmJMmzWj/yjeO4LywkQ85vOJyhru7AZk/+c4B6OUh/odQ++SiIJBSbTG2lm1CuV5gV5vXZnf/2AMlu3Zg==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.7.5: + resolution: {integrity: sha512-8PIva4L6BQhiPikUTds9lSFSHXVDAsEvV6QUlgwPsXrtXVQMVi6Sv9p+IxtlWQFvGkdYJUgX9GnK2rC030Xcmw==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.7.5: + resolution: {integrity: sha512-rupskv/mkIUgQXzX/wUiK00mKMorQcK8yzhGFha/D5lm05FEnLx8dsip6rWzMcVpvh+4GUMA56PgtnOgpel2AA==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.7.5: + resolution: {integrity: sha512-G377Gxn6P42RnCzfMyDvsqQV7j69kVHKlhz9J4RhtJOB5+DyY4yYh/w0oTIxZQ4JRMmhjwLu3w9zncMoQ6nNDw==} + cpu: [arm64] + os: [win32] + + turbo@2.7.5: + resolution: {integrity: sha512-7Imdmg37joOloTnj+DPrab9hIaQcDdJ5RwSzcauo/wMOSAgO+A/I/8b3hsGGs6PWQz70m/jkPgdqWsfNKtwwDQ==} + hasBin: true + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unplugin-parcel-macros-darwin-arm64@0.1.1: + resolution: {integrity: sha512-+kFEdpo+rRoE+sZotZoLa0N/eTY4U7sxwbiNPi+FcM0HNvPsMcvlQTmkgekoiW02rBeD/kxoFXG+ZGhLi40Z7w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + unplugin-parcel-macros-darwin-x64@0.1.1: + resolution: {integrity: sha512-IYvpoUYONVC2DxiAaZJBEW45ZQ6t1EpyzvCGW+142SxGxDzHv5/y308y0DEbpx6RXHdVDt7A5VdNNmhVahfdeA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + unplugin-parcel-macros-linux-arm64-gnu@0.1.1: + resolution: {integrity: sha512-mCel+qhqo45qsfIzKEwrWGJB6LYrVlLIneDxhbLl5Wsjsuo1kNKjaxVOKLOxhi1sSXsostZ/I5W+b2nowsMzUA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + unplugin-parcel-macros-linux-arm64-musl@0.1.1: + resolution: {integrity: sha512-G3EmXNDm1hQUQY6XVtfAcJNTnW7A+nal5l2eHVh/es6T76oDtylXuqAqXoORzbFRD2FmiDuYkATNSMz0aO+szQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + unplugin-parcel-macros-linux-x64-gnu@0.1.1: + resolution: {integrity: sha512-Zw7c02vqs4Tkmxuhv6g1Jy8yJiQOvIDM1FROFOtMx8txY4KuRu44sEp4qM8JPHpEEVE0ts3W1DUEnRi8oXIRcg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + unplugin-parcel-macros-linux-x64-musl@0.1.1: + resolution: {integrity: sha512-bYynQvRdt3Ftp6KEGRwgPVFvgZceFfAw6uWKPi/2Stfht4eesMx3DdngKg9tblnSn3iFhrCR1ICW1UwcsrA8Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + unplugin-parcel-macros-win32-x64-msvc@0.1.1: + resolution: {integrity: sha512-1ub2kCy2OZqo3hO9KhU06sFuXRQmLlYZNY6iK+c8NHnzOQRK4W9NDIk3cV49bptUmZ9WK9YgDHTtyJ2Ee/94LA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + unplugin-parcel-macros@0.1.1: + resolution: {integrity: sha512-tyiplFstmSFKvkZLqkYz9A6ClNV0M0yXNktsmcXkzJKdJxNxzXJC1Mqt/xocKcLy7QWHT9mBttm1oiXLa0o+Ow==} + engines: {node: '>= 18'} + + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + warning@3.0.0: + resolution: {integrity: sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==} + + weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + zod-opts@0.1.8: + resolution: {integrity: sha512-YZhdEcIL3D2W9fXCCf/UBgrBS90c8w25RTteh5GihGIZzadYr/qIFxyM2L98zHUkZ2S8MMxwn3ny8fzPNnvPlg==} + engines: {node: '>=16'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.3.5: + resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + +snapshots: + + '@ark/schema@0.56.0': + dependencies: + '@ark/util': 0.56.0 + + '@ark/util@0.56.0': {} + + '@babel/code-frame@7.28.6': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.6': {} + + '@babel/core@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.6': + dependencies: + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 + + '@babel/parser@7.28.6': + dependencies: + '@babel/types': 7.28.6 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/runtime@7.28.6': {} + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + + '@babel/traverse@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + + '@bkrem/react-transition-group@1.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + chain-function: 1.0.1 + dom-helpers: 3.4.0 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-lifecycles-compat: 3.0.4 + warning: 3.0.0 + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@essentials/raf@1.2.0': {} + + '@formatjs/ecma402-abstract@2.3.6': + dependencies: + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/intl-localematcher': 0.6.2 + decimal.js: 10.6.0 + tslib: 2.8.1 + + '@formatjs/fast-memoize@2.2.7': + dependencies: + tslib: 2.8.1 + + '@formatjs/icu-messageformat-parser@2.11.4': + dependencies: + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/icu-skeleton-parser': 1.8.16 + tslib: 2.8.1 + + '@formatjs/icu-skeleton-parser@1.8.16': + dependencies: + '@formatjs/ecma402-abstract': 2.3.6 + tslib: 2.8.1 + + '@formatjs/intl-localematcher@0.6.2': + dependencies: + tslib: 2.8.1 + + '@internationalized/date@3.10.1': + dependencies: + '@swc/helpers': 0.5.18 + + '@internationalized/message@3.1.8': + dependencies: + '@swc/helpers': 0.5.18 + intl-messageformat: 10.7.18 + + '@internationalized/number@3.6.5': + dependencies: + '@swc/helpers': 0.5.18 + + '@internationalized/string@3.2.7': + dependencies: + '@swc/helpers': 0.5.18 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.19.7 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@lezer/common@1.5.0': {} + + '@lezer/lr@1.4.7': + dependencies: + '@lezer/common': 1.5.0 + + '@lmdb/lmdb-darwin-arm64@2.8.5': + optional: true + + '@lmdb/lmdb-darwin-x64@2.8.5': + optional: true + + '@lmdb/lmdb-linux-arm64@2.8.5': + optional: true + + '@lmdb/lmdb-linux-arm@2.8.5': + optional: true + + '@lmdb/lmdb-linux-x64@2.8.5': + optional: true + + '@lmdb/lmdb-win32-x64@2.8.5': + optional: true + + '@mischnic/json-sourcemap@0.1.1': + dependencies: + '@lezer/common': 1.5.0 + '@lezer/lr': 1.4.7 + json5: 2.2.3 + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + + '@parcel/cache@2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))': + dependencies: + '@parcel/core': 2.16.3(@swc/helpers@0.5.18) + '@parcel/fs': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/logger': 2.16.3 + '@parcel/utils': 2.16.3 + lmdb: 2.8.5 + transitivePeerDependencies: + - napi-wasm + + '@parcel/codeframe@2.16.3': + dependencies: + chalk: 4.1.2 + + '@parcel/core@2.16.3(@swc/helpers@0.5.18)': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/cache': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/diagnostic': 2.16.3 + '@parcel/events': 2.16.3 + '@parcel/feature-flags': 2.16.3 + '@parcel/fs': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/graph': 3.6.3 + '@parcel/logger': 2.16.3 + '@parcel/package-manager': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))(@swc/helpers@0.5.18) + '@parcel/plugin': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/profiler': 2.16.3 + '@parcel/rust': 2.16.3 + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/utils': 2.16.3 + '@parcel/workers': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + base-x: 3.0.11 + browserslist: 4.28.1 + clone: 2.1.2 + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + json5: 2.2.3 + msgpackr: 1.11.8 + nullthrows: 1.1.1 + semver: 7.7.3 + transitivePeerDependencies: + - '@swc/helpers' + - napi-wasm + + '@parcel/diagnostic@2.16.3': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + nullthrows: 1.1.1 + + '@parcel/events@2.16.3': {} + + '@parcel/feature-flags@2.16.3': {} + + '@parcel/fs@2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))': + dependencies: + '@parcel/core': 2.16.3(@swc/helpers@0.5.18) + '@parcel/feature-flags': 2.16.3 + '@parcel/rust': 2.16.3 + '@parcel/types-internal': 2.16.3 + '@parcel/utils': 2.16.3 + '@parcel/watcher': 2.5.4 + '@parcel/workers': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + transitivePeerDependencies: + - napi-wasm + + '@parcel/graph@3.6.3': + dependencies: + '@parcel/feature-flags': 2.16.3 + nullthrows: 1.1.1 + + '@parcel/logger@2.16.3': + dependencies: + '@parcel/diagnostic': 2.16.3 + '@parcel/events': 2.16.3 + + '@parcel/macros@2.16.3': {} + + '@parcel/markdown-ansi@2.16.3': + dependencies: + chalk: 4.1.2 + + '@parcel/node-resolver-core@3.7.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))': + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/diagnostic': 2.16.3 + '@parcel/fs': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/rust': 2.16.3 + '@parcel/utils': 2.16.3 + nullthrows: 1.1.1 + semver: 7.7.3 + transitivePeerDependencies: + - '@parcel/core' + - napi-wasm + + '@parcel/package-manager@2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))(@swc/helpers@0.5.18)': + dependencies: + '@parcel/core': 2.16.3(@swc/helpers@0.5.18) + '@parcel/diagnostic': 2.16.3 + '@parcel/fs': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/logger': 2.16.3 + '@parcel/node-resolver-core': 3.7.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/types': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/utils': 2.16.3 + '@parcel/workers': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@swc/core': 1.15.10(@swc/helpers@0.5.18) + semver: 7.7.3 + transitivePeerDependencies: + - '@swc/helpers' + - napi-wasm + + '@parcel/plugin@2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))': + dependencies: + '@parcel/types': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + transitivePeerDependencies: + - '@parcel/core' + - napi-wasm + + '@parcel/profiler@2.16.3': + dependencies: + '@parcel/diagnostic': 2.16.3 + '@parcel/events': 2.16.3 + '@parcel/types-internal': 2.16.3 + chrome-trace-event: 1.0.4 + + '@parcel/rust-darwin-arm64@2.16.3': + optional: true + + '@parcel/rust-darwin-x64@2.16.3': + optional: true + + '@parcel/rust-linux-arm-gnueabihf@2.16.3': + optional: true + + '@parcel/rust-linux-arm64-gnu@2.16.3': + optional: true + + '@parcel/rust-linux-arm64-musl@2.16.3': + optional: true + + '@parcel/rust-linux-x64-gnu@2.16.3': + optional: true + + '@parcel/rust-linux-x64-musl@2.16.3': + optional: true + + '@parcel/rust-win32-x64-msvc@2.16.3': + optional: true + + '@parcel/rust@2.16.3': + optionalDependencies: + '@parcel/rust-darwin-arm64': 2.16.3 + '@parcel/rust-darwin-x64': 2.16.3 + '@parcel/rust-linux-arm-gnueabihf': 2.16.3 + '@parcel/rust-linux-arm64-gnu': 2.16.3 + '@parcel/rust-linux-arm64-musl': 2.16.3 + '@parcel/rust-linux-x64-gnu': 2.16.3 + '@parcel/rust-linux-x64-musl': 2.16.3 + '@parcel/rust-win32-x64-msvc': 2.16.3 + + '@parcel/source-map@2.1.1': + dependencies: + detect-libc: 1.0.3 + + '@parcel/types-internal@2.16.3': + dependencies: + '@parcel/diagnostic': 2.16.3 + '@parcel/feature-flags': 2.16.3 + '@parcel/source-map': 2.1.1 + utility-types: 3.11.0 + + '@parcel/types@2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))': + dependencies: + '@parcel/types-internal': 2.16.3 + '@parcel/workers': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + transitivePeerDependencies: + - '@parcel/core' + - napi-wasm + + '@parcel/utils@2.16.3': + dependencies: + '@parcel/codeframe': 2.16.3 + '@parcel/diagnostic': 2.16.3 + '@parcel/logger': 2.16.3 + '@parcel/markdown-ansi': 2.16.3 + '@parcel/rust': 2.16.3 + '@parcel/source-map': 2.1.1 + chalk: 4.1.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - napi-wasm + + '@parcel/watcher-android-arm64@2.5.4': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.4': + optional: true + + '@parcel/watcher-darwin-x64@2.5.4': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.4': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.4': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.4': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.4': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.4': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.4': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.4': + optional: true + + '@parcel/watcher-win32-arm64@2.5.4': + optional: true + + '@parcel/watcher-win32-ia32@2.5.4': + optional: true + + '@parcel/watcher-win32-x64@2.5.4': + optional: true + + '@parcel/watcher@2.5.4': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.4 + '@parcel/watcher-darwin-arm64': 2.5.4 + '@parcel/watcher-darwin-x64': 2.5.4 + '@parcel/watcher-freebsd-x64': 2.5.4 + '@parcel/watcher-linux-arm-glibc': 2.5.4 + '@parcel/watcher-linux-arm-musl': 2.5.4 + '@parcel/watcher-linux-arm64-glibc': 2.5.4 + '@parcel/watcher-linux-arm64-musl': 2.5.4 + '@parcel/watcher-linux-x64-glibc': 2.5.4 + '@parcel/watcher-linux-x64-musl': 2.5.4 + '@parcel/watcher-win32-arm64': 2.5.4 + '@parcel/watcher-win32-ia32': 2.5.4 + '@parcel/watcher-win32-x64': 2.5.4 + + '@parcel/workers@2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))': + dependencies: + '@parcel/core': 2.16.3(@swc/helpers@0.5.18) + '@parcel/diagnostic': 2.16.3 + '@parcel/logger': 2.16.3 + '@parcel/profiler': 2.16.3 + '@parcel/types-internal': 2.16.3 + '@parcel/utils': 2.16.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - napi-wasm + + '@react-aria/autocomplete@3.0.0-rc.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/combobox': 3.14.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/searchfield': 3.8.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/autocomplete': 3.0.0-beta.4(react@19.2.3) + '@react-stately/combobox': 3.12.1(react@19.2.3) + '@react-types/autocomplete': 3.0.0-alpha.36(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/breadcrumbs@3.5.30(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/link': 3.8.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/breadcrumbs': 3.7.17(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/button@3.14.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/toolbar': 3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/toggle': 3.9.3(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/calendar@3.9.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/calendar': 3.9.1(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/calendar': 3.8.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/checkbox@3.16.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/toggle': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/checkbox': 3.7.3(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/toggle': 3.9.3(react@19.2.3) + '@react-types/checkbox': 3.10.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/collections@3.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + + '@react-aria/color@3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/numberfield': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/slider': 3.8.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/spinbutton': 3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/color': 3.9.3(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-types/color': 3.1.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/combobox@3.14.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/menu': 3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/combobox': 3.12.1(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/combobox': 3.13.10(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/datepicker@3.15.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@internationalized/number': 3.6.5 + '@internationalized/string': 3.2.7 + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/spinbutton': 3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/datepicker': 3.15.3(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/calendar': 3.8.1(react@19.2.3) + '@react-types/datepicker': 3.13.3(react@19.2.3) + '@react-types/dialog': 3.5.22(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/dialog@3.5.32(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/dialog': 3.5.22(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/disclosure@3.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/disclosure': 3.0.9(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/dnd@3.11.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@internationalized/string': 3.2.7 + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/dnd': 3.7.2(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/focus@3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/form@3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/grid@3.14.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/grid': 3.11.7(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-types/checkbox': 3.10.2(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/gridlist@3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/grid': 3.14.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-stately/tree': 3.9.4(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/i18n@3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@internationalized/message': 3.1.8 + '@internationalized/number': 3.6.5 + '@internationalized/string': 3.2.7 + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/interactions@3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/label@3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/landmark@3.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + + '@react-aria/link@3.8.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/link': 3.6.5(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/listbox@3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-types/listbox': 3.7.4(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/live-announcer@3.4.4': + dependencies: + '@swc/helpers': 0.5.18 + + '@react-aria/menu@3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/menu': 3.9.9(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-stately/tree': 3.9.4(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/menu': 3.10.5(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/meter@3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/progress': 3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/meter': 3.4.13(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/numberfield@3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/spinbutton': 3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/numberfield': 3.10.3(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/numberfield': 3.8.16(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/overlays@3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/overlays': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/progress@3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/progress': 3.5.16(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/radio@3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/radio': 3.11.3(react@19.2.3) + '@react-types/radio': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/searchfield@3.8.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/searchfield': 3.5.17(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/searchfield': 3.6.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/select@3.17.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/menu': 3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/select': 3.9.0(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/select': 3.12.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/selection@3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/separator@3.4.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/slider@3.8.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/slider': 3.7.3(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/slider': 3.8.2(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/spinbutton@3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/ssr@3.9.10(react@19.2.3)': + dependencies: + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-aria/switch@3.7.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/toggle': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/toggle': 3.9.3(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/switch': 3.5.15(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/table@3.17.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/grid': 3.14.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-stately/table': 3.15.2(react@19.2.3) + '@react-types/checkbox': 3.10.2(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/table': 3.13.4(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/tabs@3.10.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/tabs': 3.8.7(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/tabs': 3.3.20(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/tag@3.7.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/gridlist': 3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/textfield@3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/textfield': 3.12.6(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/toast@3.0.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/landmark': 3.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/toast': 3.1.2(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/toggle@3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/toggle': 3.9.3(react@19.2.3) + '@react-types/checkbox': 3.10.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/toolbar@3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/tooltip@3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/tooltip': 3.5.9(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/tooltip': 3.5.0(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/tree@3.1.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/gridlist': 3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/tree': 3.9.4(react@19.2.3) + '@react-types/button': 3.14.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/utils@3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/virtualizer@4.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/virtualizer': 4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/visually-hidden@3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-spectrum/s2@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@internationalized/number': 3.6.5 + '@parcel/macros': 2.16.3 + '@react-aria/calendar': 3.9.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/collections': 3.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-spectrum/utils': 3.12.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/layout': 4.5.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/dialog': 3.5.22(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/overlays': 3.9.2(react@19.2.3) + '@react-types/provider': 3.8.13(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/table': 3.13.4(react@19.2.3) + '@react-types/textfield': 3.12.6(react@19.2.3) + csstype: 3.2.3 + react: 19.2.3 + react-aria: 3.45.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-aria-components: 1.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-dom: 19.2.3(react@19.2.3) + react-stately: 3.43.0(react@19.2.3) + + '@react-spectrum/utils@3.12.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-stately/autocomplete@3.0.0-beta.4(react@19.2.3)': + dependencies: + '@react-stately/utils': 3.11.0(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/calendar@3.9.1(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/calendar': 3.8.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/checkbox@3.7.3(react@19.2.3)': + dependencies: + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/checkbox': 3.10.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/collections@3.12.8(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/color@3.9.3(react@19.2.3)': + dependencies: + '@internationalized/number': 3.6.5 + '@internationalized/string': 3.2.7 + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/numberfield': 3.10.3(react@19.2.3) + '@react-stately/slider': 3.7.3(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/color': 3.1.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/combobox@3.12.1(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/combobox': 3.13.10(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/data@3.15.0(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/datepicker@3.15.3(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@internationalized/string': 3.2.7 + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/datepicker': 3.13.3(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/disclosure@3.0.9(react@19.2.3)': + dependencies: + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/dnd@3.7.2(react@19.2.3)': + dependencies: + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/flags@3.1.2': + dependencies: + '@swc/helpers': 0.5.18 + + '@react-stately/form@3.2.2(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/grid@3.11.7(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/layout@4.5.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/table': 3.15.2(react@19.2.3) + '@react-stately/virtualizer': 4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/table': 3.13.4(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-stately/list@3.13.2(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/menu@3.9.9(react@19.2.3)': + dependencies: + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-types/menu': 3.10.5(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/numberfield@3.10.3(react@19.2.3)': + dependencies: + '@internationalized/number': 3.6.5 + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/numberfield': 3.8.16(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/overlays@3.6.21(react@19.2.3)': + dependencies: + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/overlays': 3.9.2(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/radio@3.11.3(react@19.2.3)': + dependencies: + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/radio': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/searchfield@3.5.17(react@19.2.3)': + dependencies: + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/searchfield': 3.6.6(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/select@3.9.0(react@19.2.3)': + dependencies: + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/select': 3.12.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/selection@3.20.7(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/slider@3.7.3(react@19.2.3)': + dependencies: + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/slider': 3.8.2(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/table@3.15.2(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-stately/grid': 3.11.7(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/table': 3.13.4(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/tabs@3.8.7(react@19.2.3)': + dependencies: + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/tabs': 3.3.20(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/toast@3.1.2(react@19.2.3)': + dependencies: + '@swc/helpers': 0.5.18 + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) + + '@react-stately/toggle@3.9.3(react@19.2.3)': + dependencies: + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/checkbox': 3.10.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/tooltip@3.5.9(react@19.2.3)': + dependencies: + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-types/tooltip': 3.5.0(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/tree@3.9.4(react@19.2.3)': + dependencies: + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/utils@3.11.0(react@19.2.3)': + dependencies: + '@swc/helpers': 0.5.18 + react: 19.2.3 + + '@react-stately/virtualizer@4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.18 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-types/autocomplete@3.0.0-alpha.36(react@19.2.3)': + dependencies: + '@react-types/combobox': 3.13.10(react@19.2.3) + '@react-types/searchfield': 3.6.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/breadcrumbs@3.7.17(react@19.2.3)': + dependencies: + '@react-types/link': 3.6.5(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/button@3.14.1(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/calendar@3.8.1(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/checkbox@3.10.2(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/color@3.1.2(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/slider': 3.8.2(react@19.2.3) + react: 19.2.3 + + '@react-types/combobox@3.13.10(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/datepicker@3.13.3(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@react-types/calendar': 3.8.1(react@19.2.3) + '@react-types/overlays': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + '@react-types/dialog@3.5.22(react@19.2.3)': + dependencies: + '@react-types/overlays': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - turbo-linux-64@2.7.5: - resolution: {integrity: sha512-KKPvhOmJMmzWj/yjeO4LywkQ85vOJyhru7AZk/+c4B6OUh/odQ++SiIJBSbTG2lm1CuV5gV5vXZnf/2AMlu3Zg==} - cpu: [x64] - os: [linux] + '@react-types/form@3.7.16(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - turbo-linux-arm64@2.7.5: - resolution: {integrity: sha512-8PIva4L6BQhiPikUTds9lSFSHXVDAsEvV6QUlgwPsXrtXVQMVi6Sv9p+IxtlWQFvGkdYJUgX9GnK2rC030Xcmw==} - cpu: [arm64] - os: [linux] + '@react-types/grid@3.3.6(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - turbo-windows-64@2.7.5: - resolution: {integrity: sha512-rupskv/mkIUgQXzX/wUiK00mKMorQcK8yzhGFha/D5lm05FEnLx8dsip6rWzMcVpvh+4GUMA56PgtnOgpel2AA==} - cpu: [x64] - os: [win32] + '@react-types/link@3.6.5(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - turbo-windows-arm64@2.7.5: - resolution: {integrity: sha512-G377Gxn6P42RnCzfMyDvsqQV7j69kVHKlhz9J4RhtJOB5+DyY4yYh/w0oTIxZQ4JRMmhjwLu3w9zncMoQ6nNDw==} - cpu: [arm64] - os: [win32] + '@react-types/listbox@3.7.4(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - turbo@2.7.5: - resolution: {integrity: sha512-7Imdmg37joOloTnj+DPrab9hIaQcDdJ5RwSzcauo/wMOSAgO+A/I/8b3hsGGs6PWQz70m/jkPgdqWsfNKtwwDQ==} - hasBin: true + '@react-types/menu@3.10.5(react@19.2.3)': + dependencies: + '@react-types/overlays': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} + '@react-types/meter@3.4.13(react@19.2.3)': + dependencies: + '@react-types/progress': 3.5.16(react@19.2.3) + react: 19.2.3 - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true + '@react-types/numberfield@3.8.16(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + '@react-types/overlays@3.9.2(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true + '@react-types/progress@3.5.16(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true + '@react-types/provider@3.8.13(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true + '@react-types/radio@3.9.2(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - web-worker@1.5.0: - resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + '@react-types/searchfield@3.6.6(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/textfield': 3.12.6(react@19.2.3) + react: 19.2.3 - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + '@react-types/select@3.12.0(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true + '@react-types/shared@3.32.1(react@19.2.3)': + dependencies: + react: 19.2.3 - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + '@react-types/slider@3.8.2(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} - engines: {node: '>= 14.6'} - hasBin: true + '@react-types/switch@3.5.15(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - zod-opts@0.1.8: - resolution: {integrity: sha512-YZhdEcIL3D2W9fXCCf/UBgrBS90c8w25RTteh5GihGIZzadYr/qIFxyM2L98zHUkZ2S8MMxwn3ny8fzPNnvPlg==} - engines: {node: '>=16'} + '@react-types/table@3.13.4(react@19.2.3)': + dependencies: + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + '@react-types/tabs@3.3.20(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 -snapshots: + '@react-types/textfield@3.12.6(react@19.2.3)': + dependencies: + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - '@babel/code-frame@7.28.6': + '@react-types/tooltip@3.5.0(react@19.2.3)': dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@react-types/overlays': 3.9.2(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 - '@babel/helper-validator-identifier@7.28.5': {} + '@rolldown/pluginutils@1.0.0-beta.53': {} - '@biomejs/biome@1.9.4': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 + '@rollup/rollup-android-arm-eabi@4.55.2': + optional: true - '@biomejs/cli-darwin-arm64@1.9.4': + '@rollup/rollup-android-arm64@4.55.2': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@rollup/rollup-darwin-arm64@4.55.2': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@rollup/rollup-darwin-x64@4.55.2': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@rollup/rollup-freebsd-arm64@4.55.2': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@rollup/rollup-freebsd-x64@4.55.2': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@rollup/rollup-linux-arm-gnueabihf@4.55.2': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@rollup/rollup-linux-arm-musleabihf@4.55.2': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@rollup/rollup-linux-arm64-gnu@4.55.2': optional: true - '@esbuild/aix-ppc64@0.27.2': + '@rollup/rollup-linux-arm64-musl@4.55.2': optional: true - '@esbuild/android-arm64@0.27.2': + '@rollup/rollup-linux-loong64-gnu@4.55.2': optional: true - '@esbuild/android-arm@0.27.2': + '@rollup/rollup-linux-loong64-musl@4.55.2': optional: true - '@esbuild/android-x64@0.27.2': + '@rollup/rollup-linux-ppc64-gnu@4.55.2': optional: true - '@esbuild/darwin-arm64@0.27.2': + '@rollup/rollup-linux-ppc64-musl@4.55.2': optional: true - '@esbuild/darwin-x64@0.27.2': + '@rollup/rollup-linux-riscv64-gnu@4.55.2': optional: true - '@esbuild/freebsd-arm64@0.27.2': + '@rollup/rollup-linux-riscv64-musl@4.55.2': optional: true - '@esbuild/freebsd-x64@0.27.2': + '@rollup/rollup-linux-s390x-gnu@4.55.2': optional: true - '@esbuild/linux-arm64@0.27.2': + '@rollup/rollup-linux-x64-gnu@4.55.2': optional: true - '@esbuild/linux-arm@0.27.2': + '@rollup/rollup-linux-x64-musl@4.55.2': optional: true - '@esbuild/linux-ia32@0.27.2': + '@rollup/rollup-openbsd-x64@4.55.2': optional: true - '@esbuild/linux-loong64@0.27.2': + '@rollup/rollup-openharmony-arm64@4.55.2': optional: true - '@esbuild/linux-mips64el@0.27.2': + '@rollup/rollup-win32-arm64-msvc@4.55.2': optional: true - '@esbuild/linux-ppc64@0.27.2': + '@rollup/rollup-win32-ia32-msvc@4.55.2': optional: true - '@esbuild/linux-riscv64@0.27.2': + '@rollup/rollup-win32-x64-gnu@4.55.2': optional: true - '@esbuild/linux-s390x@0.27.2': + '@rollup/rollup-win32-x64-msvc@4.55.2': optional: true - '@esbuild/linux-x64@0.27.2': + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@14.0.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@standard-schema/spec@1.1.0': {} + + '@swc/core-darwin-arm64@1.15.10': optional: true - '@esbuild/netbsd-arm64@0.27.2': + '@swc/core-darwin-x64@1.15.10': optional: true - '@esbuild/netbsd-x64@0.27.2': + '@swc/core-linux-arm-gnueabihf@1.15.10': optional: true - '@esbuild/openbsd-arm64@0.27.2': + '@swc/core-linux-arm64-gnu@1.15.10': optional: true - '@esbuild/openbsd-x64@0.27.2': + '@swc/core-linux-arm64-musl@1.15.10': optional: true - '@esbuild/openharmony-arm64@0.27.2': + '@swc/core-linux-x64-gnu@1.15.10': optional: true - '@esbuild/sunos-x64@0.27.2': + '@swc/core-linux-x64-musl@1.15.10': optional: true - '@esbuild/win32-arm64@0.27.2': + '@swc/core-win32-arm64-msvc@1.15.10': optional: true - '@esbuild/win32-ia32@0.27.2': + '@swc/core-win32-ia32-msvc@1.15.10': optional: true - '@esbuild/win32-x64@0.27.2': + '@swc/core-win32-x64-msvc@1.15.10': optional: true - '@essentials/raf@1.2.0': {} + '@swc/core@1.15.10(@swc/helpers@0.5.18)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.10 + '@swc/core-darwin-x64': 1.15.10 + '@swc/core-linux-arm-gnueabihf': 1.15.10 + '@swc/core-linux-arm64-gnu': 1.15.10 + '@swc/core-linux-arm64-musl': 1.15.10 + '@swc/core-linux-x64-gnu': 1.15.10 + '@swc/core-linux-x64-musl': 1.15.10 + '@swc/core-win32-arm64-msvc': 1.15.10 + '@swc/core-win32-ia32-msvc': 1.15.10 + '@swc/core-win32-x64-msvc': 1.15.10 + '@swc/helpers': 0.5.18 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.18': + dependencies: + tslib: 2.8.1 - '@jest/expect-utils@29.7.0': + '@swc/types@0.1.25': dependencies: - jest-get-type: 29.6.3 + '@swc/counter': 0.1.3 - '@jest/schemas@29.6.3': + '@types/babel__core@7.20.5': dependencies: - '@sinclair/typebox': 0.27.8 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 - '@jest/types@29.6.3': + '@types/babel__generator@7.27.0': dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.7 - '@types/yargs': 17.0.35 - chalk: 4.1.2 + '@babel/types': 7.28.6 - '@jridgewell/sourcemap-codec@1.5.5': {} + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 - '@rollup/rollup-android-arm-eabi@4.55.1': - optional: true + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.6 - '@rollup/rollup-android-arm64@4.55.1': - optional: true + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 - '@rollup/rollup-darwin-arm64@4.55.1': - optional: true + '@types/cross-spawn@6.0.6': + dependencies: + '@types/node': 22.19.7 - '@rollup/rollup-darwin-x64@4.55.1': - optional: true + '@types/d3-array@3.2.2': {} - '@rollup/rollup-freebsd-arm64@4.55.1': - optional: true + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 - '@rollup/rollup-freebsd-x64@4.55.1': - optional: true + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - optional: true + '@types/d3-chord@3.0.6': {} - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - optional: true + '@types/d3-color@3.1.3': {} - '@rollup/rollup-linux-arm64-gnu@4.55.1': - optional: true + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 - '@rollup/rollup-linux-arm64-musl@4.55.1': - optional: true + '@types/d3-delaunay@6.0.4': {} - '@rollup/rollup-linux-loong64-gnu@4.55.1': - optional: true + '@types/d3-dispatch@3.0.7': {} - '@rollup/rollup-linux-loong64-musl@4.55.1': - optional: true + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - optional: true + '@types/d3-dsv@3.0.7': {} - '@rollup/rollup-linux-ppc64-musl@4.55.1': - optional: true + '@types/d3-ease@3.0.2': {} - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - optional: true + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 - '@rollup/rollup-linux-riscv64-musl@4.55.1': - optional: true + '@types/d3-force@3.0.10': {} - '@rollup/rollup-linux-s390x-gnu@4.55.1': - optional: true + '@types/d3-format@3.0.4': {} - '@rollup/rollup-linux-x64-gnu@4.55.1': - optional: true + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 - '@rollup/rollup-linux-x64-musl@4.55.1': - optional: true + '@types/d3-hierarchy@1.1.11': {} - '@rollup/rollup-openbsd-x64@4.55.1': - optional: true + '@types/d3-hierarchy@3.1.7': {} - '@rollup/rollup-openharmony-arm64@4.55.1': - optional: true + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 - '@rollup/rollup-win32-arm64-msvc@4.55.1': - optional: true + '@types/d3-path@3.1.1': {} - '@rollup/rollup-win32-ia32-msvc@4.55.1': - optional: true + '@types/d3-polygon@3.0.2': {} - '@rollup/rollup-win32-x64-gnu@4.55.1': - optional: true + '@types/d3-quadtree@3.0.6': {} - '@rollup/rollup-win32-x64-msvc@4.55.1': - optional: true + '@types/d3-random@3.0.3': {} - '@sinclair/typebox@0.27.8': {} + '@types/d3-scale-chromatic@3.1.0': {} - '@sinonjs/commons@3.0.1': + '@types/d3-scale@4.0.9': dependencies: - type-detect: 4.0.8 + '@types/d3-time': 3.0.4 - '@sinonjs/fake-timers@14.0.0': + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.8': dependencies: - '@sinonjs/commons': 3.0.1 + '@types/d3-path': 3.1.1 - '@standard-schema/spec@1.1.0': {} + '@types/d3-time-format@4.0.3': {} - '@types/chai@5.2.3': + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 + '@types/d3-selection': 3.0.11 - '@types/cross-spawn@6.0.6': + '@types/d3-zoom@3.0.8': dependencies: - '@types/node': 22.19.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} + '@types/geojson@7946.0.16': {} + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -1551,12 +5234,24 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/raf@3.4.3': {} + + '@types/react-dom@19.2.3(@types/react@19.2.8)': + dependencies: + '@types/react': 19.2.8 + + '@types/react@19.2.8': + dependencies: + csstype: 3.2.3 + '@types/semver@7.7.1': {} '@types/sinonjs__fake-timers@8.1.5': {} '@types/stack-utils@2.0.3': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/ws@8.18.1': dependencies: '@types/node': 22.19.7 @@ -1567,6 +5262,18 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2))': + dependencies: + '@babel/core': 7.28.6 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) + '@rolldown/pluginutils': 1.0.0-beta.53 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.3 @@ -1575,13 +5282,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.19.7)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.19.7)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -1609,20 +5316,56 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 + acorn@8.15.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@5.2.0: {} + arkregex@0.0.5: + dependencies: + '@ark/util': 0.56.0 + + arktype@2.1.29: + dependencies: + '@ark/schema': 0.56.0 + '@ark/util': 0.56.0 + arkregex: 0.0.5 + assertion-error@2.0.1: {} + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + baseline-browser-mapping@2.9.15: {} + braces@3.0.3: dependencies: fill-range: 7.1.1 + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.15 + caniuse-lite: 1.0.30001765 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + cac@6.7.14: {} + caniuse-lite@1.0.30001765: {} + + canvg@4.0.3: + dependencies: + '@types/raf': 3.4.3 + raf: 3.4.1 + rgbcolor: 1.0.1 + stackblur-canvas: 2.7.0 + svg-pathdata: 6.0.3 + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -1631,6 +5374,8 @@ snapshots: loupe: 3.2.1 pathval: 2.0.1 + chain-function@1.0.1: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -1642,36 +5387,236 @@ snapshots: dependencies: readdirp: 4.1.2 + chrome-trace-event@1.0.4: {} + ci-info@3.9.0: {} + client-only@0.0.1: {} + + clone@2.1.2: {} + + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} + commander@7.2.0: {} + + convert-source-map@2.0.0: {} + + cookie@1.1.1: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + csstype@3.2.3: {} + ctrlc-windows@2.2.0: {} + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.0.1 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@1.1.9: {} + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + debug@4.4.3: dependencies: ms: 2.1.3 + decimal.js@10.6.0: {} + deep-eql@5.0.2: {} + delaunator@5.0.1: + dependencies: + robust-predicates: 3.0.2 + + dequal@2.0.3: {} + + detect-libc@1.0.3: {} + + detect-libc@2.1.2: {} + diff-sequences@29.6.3: {} - effect@3.19.14: + dom-helpers@3.4.0: + dependencies: + '@babel/runtime': 7.28.6 + + dotenv-expand@11.0.7: + dependencies: + dotenv: 16.6.1 + + dotenv@16.6.1: {} + + effect@3.19.15: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 - effection@4.0.0: {} + effection@https://pkg.pr.new/thefrontside/effection@5010883: {} + + electron-to-chromium@1.5.267: {} es-module-lexer@1.7.0: {} @@ -1704,6 +5649,8 @@ snapshots: '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 + escalade@3.2.0: {} + escape-string-regexp@2.0.0: {} estree-walker@3.0.3: @@ -1737,14 +5684,35 @@ snapshots: generatorics@1.1.0: {} + gensync@1.0.0-beta.2: {} + graceful-fs@4.2.11: {} has-flag@4.0.0: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ignore@7.0.5: {} immutable@5.1.4: {} + internmap@2.0.3: {} + + intl-messageformat@10.7.18: + dependencies: + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/icu-messageformat-parser': 2.11.4 + tslib: 2.8.1 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-number@7.0.0: {} isexe@2.0.0: {} @@ -1790,8 +5758,84 @@ snapshots: js-tokens@9.0.1: {} + jsesc@3.1.0: {} + + json5@2.2.3: {} + + lightningcss-android-arm64@1.31.1: + optional: true + + lightningcss-darwin-arm64@1.31.1: + optional: true + + lightningcss-darwin-x64@1.31.1: + optional: true + + lightningcss-freebsd-x64@1.31.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.31.1: + optional: true + + lightningcss-linux-arm64-gnu@1.31.1: + optional: true + + lightningcss-linux-arm64-musl@1.31.1: + optional: true + + lightningcss-linux-x64-gnu@1.31.1: + optional: true + + lightningcss-linux-x64-musl@1.31.1: + optional: true + + lightningcss-win32-arm64-msvc@1.31.1: + optional: true + + lightningcss-win32-x64-msvc@1.31.1: + optional: true + + lightningcss@1.31.1: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 + + lmdb@2.8.5: + dependencies: + msgpackr: 1.11.8 + node-addon-api: 6.1.0 + node-gyp-build-optional-packages: 5.1.1 + ordered-binary: 1.6.1 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 2.8.5 + '@lmdb/lmdb-darwin-x64': 2.8.5 + '@lmdb/lmdb-linux-arm': 2.8.5 + '@lmdb/lmdb-linux-arm64': 2.8.5 + '@lmdb/lmdb-linux-x64': 2.8.5 + '@lmdb/lmdb-win32-x64': 2.8.5 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + loupe@3.2.1: {} + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1803,14 +5847,53 @@ snapshots: ms@2.1.3: {} + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.8: + optionalDependencies: + msgpackr-extract: 3.0.3 + nanoid@3.3.11: {} + node-addon-api@6.1.0: {} + + node-addon-api@7.1.1: {} + + node-gyp-build-optional-packages@5.1.1: + dependencies: + detect-libc: 2.1.2 + + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.1.2 + optional: true + + node-releases@2.0.27: {} + + nullthrows@1.1.1: {} + + object-assign@4.1.1: {} + + ordered-binary@1.6.1: {} + path-key@3.1.1: {} pathe@2.0.3: {} pathval@2.0.1: {} + performance-now@2.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -1829,47 +5912,227 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + pure-rand@6.1.0: {} + raf@3.4.1: + dependencies: + performance-now: 2.1.0 + + react-aria-components@1.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@internationalized/date': 3.10.1 + '@internationalized/string': 3.2.7 + '@react-aria/autocomplete': 3.0.0-rc.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/collections': 3.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/dnd': 3.11.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/live-announcer': 3.4.4 + '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/toolbar': 3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/virtualizer': 4.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/autocomplete': 3.0.0-beta.4(react@19.2.3) + '@react-stately/layout': 4.5.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-stately/table': 3.15.2(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) + '@react-stately/virtualizer': 4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/form': 3.7.16(react@19.2.3) + '@react-types/grid': 3.3.6(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/table': 3.13.4(react@19.2.3) + '@swc/helpers': 0.5.18 + client-only: 0.0.1 + react: 19.2.3 + react-aria: 3.45.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-dom: 19.2.3(react@19.2.3) + react-stately: 3.43.0(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + + react-aria@3.45.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@internationalized/string': 3.2.7 + '@react-aria/breadcrumbs': 3.5.30(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/button': 3.14.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/calendar': 3.9.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/checkbox': 3.16.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/color': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/combobox': 3.14.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/datepicker': 3.15.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/dialog': 3.5.32(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/disclosure': 3.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/dnd': 3.11.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/gridlist': 3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/landmark': 3.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/link': 3.8.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/menu': 3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/meter': 3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/numberfield': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/progress': 3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/radio': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/searchfield': 3.8.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/select': 3.17.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/separator': 3.4.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/slider': 3.8.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/switch': 3.7.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/table': 3.17.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/tabs': 3.10.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/tag': 3.7.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/toast': 3.0.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/tooltip': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/tree': 3.1.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + react-d3-tree@3.6.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@bkrem/react-transition-group': 1.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@types/d3-hierarchy': 1.1.11 + clone: 2.1.2 + d3-hierarchy: 1.1.9 + d3-selection: 3.0.0 + d3-shape: 1.3.7 + d3-zoom: 3.0.0 + dequal: 2.0.3 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + uuid: 8.3.2 + + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 + + react-is@16.13.1: {} + react-is@18.3.1: {} + react-lifecycles-compat@3.0.4: {} + + react-redux@9.2.0(@types/react@19.2.8)(react@19.2.3): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.8 + + react-refresh@0.18.0: {} + + react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + cookie: 1.1.1 + react: 19.2.3 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.3(react@19.2.3) + + react-stately@3.43.0(react@19.2.3): + dependencies: + '@react-stately/calendar': 3.9.1(react@19.2.3) + '@react-stately/checkbox': 3.7.3(react@19.2.3) + '@react-stately/collections': 3.12.8(react@19.2.3) + '@react-stately/color': 3.9.3(react@19.2.3) + '@react-stately/combobox': 3.12.1(react@19.2.3) + '@react-stately/data': 3.15.0(react@19.2.3) + '@react-stately/datepicker': 3.15.3(react@19.2.3) + '@react-stately/disclosure': 3.0.9(react@19.2.3) + '@react-stately/dnd': 3.7.2(react@19.2.3) + '@react-stately/form': 3.2.2(react@19.2.3) + '@react-stately/list': 3.13.2(react@19.2.3) + '@react-stately/menu': 3.9.9(react@19.2.3) + '@react-stately/numberfield': 3.10.3(react@19.2.3) + '@react-stately/overlays': 3.6.21(react@19.2.3) + '@react-stately/radio': 3.11.3(react@19.2.3) + '@react-stately/searchfield': 3.5.17(react@19.2.3) + '@react-stately/select': 3.9.0(react@19.2.3) + '@react-stately/selection': 3.20.7(react@19.2.3) + '@react-stately/slider': 3.7.3(react@19.2.3) + '@react-stately/table': 3.15.2(react@19.2.3) + '@react-stately/tabs': 3.8.7(react@19.2.3) + '@react-stately/toast': 3.1.2(react@19.2.3) + '@react-stately/toggle': 3.9.3(react@19.2.3) + '@react-stately/tooltip': 3.5.9(react@19.2.3) + '@react-stately/tree': 3.9.4(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + react: 19.2.3 + + react@19.2.3: {} + readdirp@4.1.2: {} remeda@2.33.4: {} - rollup@4.55.1: + rgbcolor@1.0.1: {} + + robust-predicates@3.0.2: {} + + rollup@4.55.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 + '@rollup/rollup-android-arm-eabi': 4.55.2 + '@rollup/rollup-android-arm64': 4.55.2 + '@rollup/rollup-darwin-arm64': 4.55.2 + '@rollup/rollup-darwin-x64': 4.55.2 + '@rollup/rollup-freebsd-arm64': 4.55.2 + '@rollup/rollup-freebsd-x64': 4.55.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.2 + '@rollup/rollup-linux-arm-musleabihf': 4.55.2 + '@rollup/rollup-linux-arm64-gnu': 4.55.2 + '@rollup/rollup-linux-arm64-musl': 4.55.2 + '@rollup/rollup-linux-loong64-gnu': 4.55.2 + '@rollup/rollup-linux-loong64-musl': 4.55.2 + '@rollup/rollup-linux-ppc64-gnu': 4.55.2 + '@rollup/rollup-linux-ppc64-musl': 4.55.2 + '@rollup/rollup-linux-riscv64-gnu': 4.55.2 + '@rollup/rollup-linux-riscv64-musl': 4.55.2 + '@rollup/rollup-linux-s390x-gnu': 4.55.2 + '@rollup/rollup-linux-x64-gnu': 4.55.2 + '@rollup/rollup-linux-x64-musl': 4.55.2 + '@rollup/rollup-openbsd-x64': 4.55.2 + '@rollup/rollup-openharmony-arm64': 4.55.2 + '@rollup/rollup-win32-arm64-msvc': 4.55.2 + '@rollup/rollup-win32-ia32-msvc': 4.55.2 + '@rollup/rollup-win32-x64-gnu': 4.55.2 + '@rollup/rollup-win32-x64-msvc': 4.55.2 fsevents: 2.3.3 + rw@1.3.3: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scheduler@0.27.0: {} + + semver@6.3.1: {} + semver@7.7.3: {} + set-cookie-parser@2.7.2: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -1884,12 +6147,16 @@ snapshots: source-map-js@1.2.1: {} + sse-stream-transform@1.0.0: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 stackback@0.0.2: {} + stackblur-canvas@2.7.0: {} + std-env@3.10.0: {} strip-literal@3.1.0: @@ -1900,6 +6167,8 @@ snapshots: dependencies: has-flag: 4.0.0 + svg-pathdata@6.0.3: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -1919,6 +6188,8 @@ snapshots: dependencies: is-number: 7.0.0 + tslib@2.8.1: {} + turbo-darwin-64@2.7.5: optional: true @@ -1952,13 +6223,72 @@ snapshots: undici-types@6.21.0: {} - vite-node@3.2.4(@types/node@22.19.7)(yaml@2.8.2): + unplugin-parcel-macros-darwin-arm64@0.1.1: + optional: true + + unplugin-parcel-macros-darwin-x64@0.1.1: + optional: true + + unplugin-parcel-macros-linux-arm64-gnu@0.1.1: + optional: true + + unplugin-parcel-macros-linux-arm64-musl@0.1.1: + optional: true + + unplugin-parcel-macros-linux-x64-gnu@0.1.1: + optional: true + + unplugin-parcel-macros-linux-x64-musl@0.1.1: + optional: true + + unplugin-parcel-macros-win32-x64-msvc@0.1.1: + optional: true + + unplugin-parcel-macros@0.1.1(@swc/helpers@0.5.18): + dependencies: + '@parcel/core': 2.16.3(@swc/helpers@0.5.18) + '@parcel/fs': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18)) + '@parcel/package-manager': 2.16.3(@parcel/core@2.16.3(@swc/helpers@0.5.18))(@swc/helpers@0.5.18) + '@parcel/source-map': 2.1.1 + unplugin: 1.16.1 + optionalDependencies: + unplugin-parcel-macros-darwin-arm64: 0.1.1 + unplugin-parcel-macros-darwin-x64: 0.1.1 + unplugin-parcel-macros-linux-arm64-gnu: 0.1.1 + unplugin-parcel-macros-linux-arm64-musl: 0.1.1 + unplugin-parcel-macros-linux-x64-gnu: 0.1.1 + unplugin-parcel-macros-linux-x64-musl: 0.1.1 + unplugin-parcel-macros-win32-x64-msvc: 0.1.1 + transitivePeerDependencies: + - '@swc/helpers' + - napi-wasm + + unplugin@1.16.1: + dependencies: + acorn: 8.15.0 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + use-sync-external-store@1.6.0(react@19.2.3): + dependencies: + react: 19.2.3 + + utility-types@3.11.0: {} + + uuid@8.3.2: {} + + vite-node@3.2.4(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.19.7)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -1973,24 +6303,25 @@ snapshots: - tsx - yaml - vite@7.3.1(@types/node@22.19.7)(yaml@2.8.2): + vite@7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.55.1 + rollup: 4.55.2 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.7 fsevents: 2.3.3 + lightningcss: 1.31.1 yaml: 2.8.2 - vitest@3.2.4(@types/node@22.19.7)(yaml@2.8.2): + vitest@3.2.4(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.19.7)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -2008,8 +6339,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@22.19.7)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@22.19.7)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@22.19.7)(lightningcss@1.31.1)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.19.7 @@ -2027,8 +6358,16 @@ snapshots: - tsx - yaml + warning@3.0.0: + dependencies: + loose-envify: 1.4.0 + + weak-lru-cache@1.2.2: {} + web-worker@1.5.0: {} + webpack-virtual-modules@0.6.2: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -2040,6 +6379,8 @@ snapshots: ws@8.19.0: {} + yallist@3.1.1: {} + yaml@2.8.2: {} zod-opts@0.1.8: @@ -2047,3 +6388,5 @@ snapshots: zod: 3.25.76 zod@3.25.76: {} + + zod@4.3.5: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5a6612e1..3bcf2ab3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,6 +8,7 @@ packages: - "effect-ts" - "fs" - "fx" + - "inspector" - "jsonl-store" - "node" - "process" diff --git a/stream-helpers/subject.ts b/stream-helpers/subject.ts index 516e8326..8819c0d4 100644 --- a/stream-helpers/subject.ts +++ b/stream-helpers/subject.ts @@ -35,10 +35,13 @@ import type { Stream, Subscription } from "effection"; * ]); * ``` */ -export function createSubject(): ( - stream: Stream, -) => Stream { - let current: IteratorResult | undefined = undefined; +export function createSubject( + initial?: T, +): (stream: Stream) => Stream { + let current: IteratorResult | undefined = + typeof initial !== "undefined" + ? { done: false, value: initial } + : undefined; return (stream: Stream) => ({ *[Symbol.iterator]() { diff --git a/tsconfig.json b/tsconfig.json index b334e2af..d508aaae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,6 +34,7 @@ { "path": "vitest" }, { "path": "watch" }, { "path": "websocket" }, - { "path": "worker" } + { "path": "worker" }, + { "path": "inspector" } ] } diff --git a/watch/main.ts b/watch/main.ts index eadefd6a..7d69cc82 100644 --- a/watch/main.ts +++ b/watch/main.ts @@ -5,7 +5,7 @@ import { parser } from "zod-opts"; import packageJson from "./package.json" with { type: "json" }; import { watch } from "./watch.ts"; -const builtins = ["-h", "--help", "-V", "--version"]; +const builtins = ["-h", "--help", "-V", "--version", "--path"]; main(function* (argv) { let { args, rest } = extract(argv); @@ -72,8 +72,18 @@ function extract(argv: string[]): Extract { let rest: string[] = argv.slice(); for (let arg = rest.shift(); arg; arg = rest.shift()) { + if (!arg.startsWith("-")) { + rest.push(arg); + break; + } if (builtins.includes(arg)) { args.push(arg); + if (arg === "--path") { + const next = rest.shift(); + if (next !== undefined) { + args.push(next); + } + } } else { rest.unshift(arg); break;