From 0620fa39358721027975519fb3d43cb56a3088b8 Mon Sep 17 00:00:00 2001 From: danstarns Date: Wed, 11 Jun 2025 01:30:06 +0700 Subject: [PATCH 01/12] agent-events --- agent-events/.gitignore | 1 + agent-events/frontend/app/globals.css | 3 + agent-events/frontend/app/layout.tsx | 17 + agent-events/frontend/app/page.tsx | 565 +++ agent-events/frontend/app/urql.tsx | 111 + agent-events/frontend/next.config.mjs | 30 + agent-events/frontend/package.json | 41 + agent-events/frontend/postcss.config.mjs | 8 + agent-events/frontend/tailwind.config.ts | 19 + agent-events/frontend/tsconfig.json | 27 + agent-events/modus/.gitignore | 1 + agent-events/modus/go.mod | 12 + agent-events/modus/go.sum | 12 + agent-events/modus/main.go | 500 ++ agent-events/modus/modus.json | 26 + agent-events/package.json | 43 + agent-events/pnpm-lock.yaml | 5546 ++++++++++++++++++++++ agent-events/pnpm-workspace.yaml | 2 + 18 files changed, 6964 insertions(+) create mode 100644 agent-events/.gitignore create mode 100644 agent-events/frontend/app/globals.css create mode 100644 agent-events/frontend/app/layout.tsx create mode 100644 agent-events/frontend/app/page.tsx create mode 100644 agent-events/frontend/app/urql.tsx create mode 100644 agent-events/frontend/next.config.mjs create mode 100644 agent-events/frontend/package.json create mode 100644 agent-events/frontend/postcss.config.mjs create mode 100644 agent-events/frontend/tailwind.config.ts create mode 100644 agent-events/frontend/tsconfig.json create mode 100644 agent-events/modus/.gitignore create mode 100644 agent-events/modus/go.mod create mode 100644 agent-events/modus/go.sum create mode 100644 agent-events/modus/main.go create mode 100644 agent-events/modus/modus.json create mode 100644 agent-events/package.json create mode 100644 agent-events/pnpm-lock.yaml create mode 100644 agent-events/pnpm-workspace.yaml diff --git a/agent-events/.gitignore b/agent-events/.gitignore new file mode 100644 index 0000000..aced64b --- /dev/null +++ b/agent-events/.gitignore @@ -0,0 +1 @@ +.next/ \ No newline at end of file diff --git a/agent-events/frontend/app/globals.css b/agent-events/frontend/app/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/agent-events/frontend/app/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/agent-events/frontend/app/layout.tsx b/agent-events/frontend/app/layout.tsx new file mode 100644 index 0000000..16373d6 --- /dev/null +++ b/agent-events/frontend/app/layout.tsx @@ -0,0 +1,17 @@ +import { GraphQLProvider } from "./urql" +import "./globals.css" // Assuming you have global styles + +export const metadata = { + title: "Agent Events Dashboard", + description: "Real-time monitoring of Modus agent activities and events", +} + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + {children} + + + ) +} diff --git a/agent-events/frontend/app/page.tsx b/agent-events/frontend/app/page.tsx new file mode 100644 index 0000000..44e86c6 --- /dev/null +++ b/agent-events/frontend/app/page.tsx @@ -0,0 +1,565 @@ +"use client" + +import { useState, useEffect, useCallback } from "react" +import { useSubscription, useQuery, useMutation } from "urql" +import { + Activity, + Zap, + AlertTriangle, + CheckCircle, + Clock, + Bot, + Wifi, + WifiOff, + Plus, + Play, +} from "lucide-react" + +interface AgentEvent { + id: string + name: string + data: any + timestamp: string + agentId: string + type: "info" | "warning" | "success" | "error" +} + +interface Agent { + id: string + name: string + status: "active" | "idle" | "suspended" + lastEvent: string + eventCount: number +} + +const AGENT_EVENT_SUBSCRIPTION = ` + subscription AgentEvents($agentId: String!) { + agentEvent(agentId: $agentId) { + name + data + timestamp + } + } +` + +const GET_ALL_AGENTS_QUERY = ` + query GetAllAgents { + agents { + id + name + status + } + } +` + +const CREATE_AGENT = ` + mutation CreateAgent { + createAgent + } +` + +const AUTO_RUN_AGENT_MUTATION = ` + mutation AutoRunAgent($theme: String!) { + autoRunAgent(theme: $theme) + } +` + +const SET_AGENT_THEME_MUTATION = ` + mutation SetAgentTheme($agentId: String!, $theme: String!) { + updateAgentTheme(agentId: $agentId, theme: $theme) + } +` + +const START_EVENT_GENERATION_QUERY = ` + query StartEventGeneration($agentId: String!) { + startEventGeneration(agentId: $agentId) + } +` + +const START_RAPID_GENERATION_QUERY = ` + query StartRapidGeneration($agentId: String!) { + startRapidGeneration(agentId: $agentId) + } +` + +function AgentEventSubscription({ + agentId, + onEvent, +}: { + agentId: string + onEvent: (event: any, agentId: string) => void +}) { + const [{ data, error, fetching }] = useSubscription({ + query: AGENT_EVENT_SUBSCRIPTION, + variables: { agentId }, + }) + + console.log("Subscription state:", { data, error, fetching, agentId }) + + if (error) { + console.error("Subscription error details:", { + message: error.message, + graphQLErrors: error.graphQLErrors, + networkError: error.networkError, + }) + } + + useEffect(() => { + if (data?.agentEvent) { + console.log("Received event:", data.agentEvent) + onEvent(data.agentEvent, agentId) + } + }, [data?.agentEvent, agentId, onEvent]) + + return null +} + +export default function Page() { + const [events, setEvents] = useState([]) + const [agents, setAgents] = useState([]) + const [isConnected, setIsConnected] = useState(false) + const [newTheme, setNewTheme] = useState("") + const [isCreating, setIsCreating] = useState(false) + + const [agentsResult, refetchAgents] = useQuery({ query: GET_ALL_AGENTS_QUERY }) + + const [, createAgent] = useMutation(CREATE_AGENT) + const [, setTheme] = useMutation(SET_AGENT_THEME_MUTATION) + const [, autoRunAgent] = useMutation(AUTO_RUN_AGENT_MUTATION) + const [, startEventGeneration] = useQuery({ query: START_EVENT_GENERATION_QUERY, pause: true }) + const [, startRapidGeneration] = useQuery({ query: START_RAPID_GENERATION_QUERY, pause: true }) + + const getEventType = useCallback( + (eventName: string): "info" | "warning" | "success" | "error" => { + if (eventName.includes("error") || eventName.includes("failed")) return "error" + if (eventName.includes("threat") || eventName.includes("warning")) return "warning" + if (eventName.includes("completed") || eventName.includes("success")) return "success" + return "info" + }, + [], + ) + + // Handle real agent events from subscriptions - memoized to prevent re-renders + const handleAgentEvent = useCallback( + (eventData: any, agentId: string) => { + console.log("Processing agent event:", eventData, "for agent:", agentId) + + const eventType = getEventType(eventData.name) + + const newEvent: AgentEvent = { + id: `evt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, + name: eventData.name, + data: eventData.data, + timestamp: eventData.timestamp, + agentId, + type: eventType, + } + + setEvents((prev) => [newEvent, ...prev.slice(0, 49)]) // Keep last 50 events + + // Update agent status + setAgents((prev) => + prev.map((agent) => + agent.id === agentId + ? { + ...agent, + status: "active" as const, + lastEvent: eventData.name.replace(/_/g, " "), + eventCount: agent.eventCount + 1, + } + : agent, + ), + ) + }, + [getEventType], + ) + + // Handle creating a new themed agent (two-step process hidden from user) + const handleCreateAgent = async () => { + if (!newTheme.trim()) return + + setIsCreating(true) + try { + // Step 1: Create the agent + const createResult = await createAgent() + console.log("Create agent result:", createResult) + + if (createResult.data?.createAgent) { + const agentId = createResult.data.createAgent + console.log("Created agent with ID:", agentId) + + // Step 2: Set the theme after a brief delay + setTimeout(async () => { + try { + await setTheme({ agentId, theme: newTheme.trim() }) + setNewTheme("") + refetchAgents() + } catch (error) { + console.error("Failed to set agent theme:", error) + } + }, 1000) // 1 second delay to ensure agent is ready + } + } catch (error) { + console.error("Failed to create agent:", error) + } finally { + setIsCreating(false) + } + } + + // Handle auto-running an agent + const handleAutoRunAgent = async () => { + if (!newTheme.trim()) return + + setIsCreating(true) + try { + const result = await autoRunAgent({ theme: newTheme.trim() }) + console.log("Auto-run agent result:", result) + + if (result.data?.autoRunAgent) { + setNewTheme("") + refetchAgents() + } + } catch (error) { + console.error("Failed to auto-run agent:", error) + } finally { + setIsCreating(false) + } + } + + // Initialize agents from GraphQL query + useEffect(() => { + if (agentsResult.data?.agents) { + console.log("Agents loaded:", agentsResult.data.agents) + setAgents( + agentsResult.data.agents.map((agent: any) => ({ + ...agent, + lastEvent: "Ready for operations", + eventCount: 0, + })), + ) + setIsConnected(true) + } else if (agentsResult.error) { + console.error("Agents query error:", agentsResult.error) + setIsConnected(false) + } + }, [agentsResult.data, agentsResult.error]) + + const getEventIcon = (type: string) => { + switch (type) { + case "warning": + return + case "success": + return + case "error": + return + default: + return + } + } + + const getStatusColor = (status: string) => { + switch (status) { + case "active": + return "text-green-500" + case "suspended": + return "text-red-500" + default: + return "text-gray-500" + } + } + + return ( +
+ {/* Real-time subscriptions for each agent - only subscribe to agents with valid IDs */} + {agents + .filter((agent) => agent.id && agent.id.trim() !== "") + .map((agent) => ( + + ))} + +
+ {/* Header */} +
+
+
+

Agent Events Dashboard

+

+ Real-time monitoring of agent activities and events +

+
+
+ {isConnected ? ( + + ) : ( + + )} + + {isConnected ? "Connected" : "Disconnected"} + +
+
+
+ + {/* Connection Error */} + {agentsResult.error && ( +
+
+ +
+

Backend Connection Failed

+

+ Make sure your Modus backend is running at http://localhost:8686 +

+

Error: {agentsResult.error.message}

+
+
+
+ )} + +
+ {/* Agent Creation Panel */} +
+
+
+ +

Create Themed Agent

+
+ +
+
+ + setNewTheme(e.target.value)} + placeholder="e.g., matrix, cyberpunk, space, medieval..." + className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + disabled={isCreating || !isConnected} + /> +
+ +
+ + + +
+ +
+

+ Create: Manual control with +1 Event and +5 Rapid buttons +

+

+ Auto-Run: Creates agent, sets theme, and generates 10 events + automatically +

+
+
+
+ + {/* Agent Status Panel */} +
+
+ +

Active Agents

+
+ + {agentsResult.fetching && ( +
+
+

Loading agents...

+
+ )} + + {!agentsResult.fetching && agents.length === 0 && isConnected && ( +
+ +

No agents created yet

+

Create your first themed agent above

+
+ )} + +
+ {agents.map((agent) => ( +
+
+

{agent.name}

+ + {agent.status} + +
+

{agent.lastEvent}

+
+ Events: {agent.eventCount} + {agent.id} +
+ + {/* Manual Control Buttons */} +
+ + +
+
+ ))} +
+
+ + {/* Stats Panel */} +
+

Statistics

+
+
+ Total Events + {events.length} +
+
+ Active Agents + + {agents.filter((a) => a.status === "active").length} + +
+
+ Avg Events/Agent + + {agents.length > 0 ? Math.round(events.length / agents.length) : 0} + +
+
+
+
+ + {/* Event Stream */} +
+
+
+
+ +

Live Event Stream

+
+
{events.length} events
+
+ +
+ {events.length === 0 ? ( +
+ +

Waiting for agent events...

+ {isConnected && ( +

Create an agent and start generating events

+ )} +
+ ) : ( + events.map((event) => ( +
+
+
+ {getEventIcon(event.type)} +
+
+

+ {event.name.replace(/_/g, " ")} +

+ + {event.agentId.split("_")[1] || event.agentId} + +
+ {event.data && ( +
+
+                                  {JSON.stringify(event.data, null, 2)}
+                                
+
+ )} +
+
+
+ + {new Date(event.timestamp).toLocaleTimeString()} +
+
+
+ )) + )} +
+
+ + {/* API Status */} +
+

+ {isConnected ? "Connected to Modus Backend" : "Backend Not Available"} +

+

+ {isConnected + ? "Real-time connection to Modus agents via GraphQL subscriptions." + : "Start your Modus backend to create and manage agents."} +

+
+                {isConnected
+                  ? `# Connected via URQL with SSE
+subscription AgentEvents($agentId: String!) {
+  agentEvent(agentId: $agentId) {
+    name
+    data 
+    timestamp
+  }
+}`
+                  : `# Start your Modus backend:
+cd modus && modus dev
+
+# Backend should expose:
+query { listAgents { id name status } }
+mutation { createThemedAgent(theme: $theme) { id name status } }`}
+              
+
+
+
+
+
+ ) +} diff --git a/agent-events/frontend/app/urql.tsx b/agent-events/frontend/app/urql.tsx new file mode 100644 index 0000000..ccbc18e --- /dev/null +++ b/agent-events/frontend/app/urql.tsx @@ -0,0 +1,111 @@ +"use client" + +import { createClient, Provider, cacheExchange, fetchExchange, subscriptionExchange } from "urql" + +const modusSSEExchange = subscriptionExchange({ + forwardSubscription(request) { + return { + subscribe(sink) { + const controller = new AbortController() + + const runSubscription = async () => { + try { + const response = await fetch("http://localhost:8686/graphql", { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "text/event-stream", + }, + body: JSON.stringify({ + query: request.query, + variables: request.variables, + }), + signal: controller.signal, + }) + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`) + } + + const reader = response.body?.getReader() + if (!reader) { + throw new Error("No response body") + } + + const decoder = new TextDecoder() + let buffer = "" + + while (true) { + const { done, value } = await reader.read() + + if (done) break + + buffer += decoder.decode(value, { stream: true }) + const lines = buffer.split("\n") + + // Keep the last incomplete line in the buffer + buffer = lines.pop() || "" + + let currentEvent = "" + let currentData = "" + + for (const line of lines) { + if (line.startsWith("event: ")) { + currentEvent = line.slice(7).trim() + } else if (line.startsWith("data: ")) { + currentData = line.slice(6) + } else if (line === "") { + // End of event - process if it's a "next" event with data + if (currentEvent === "next" && currentData) { + try { + const parsedData = JSON.parse(currentData) + console.log("Received subscription data:", parsedData) + sink.next(parsedData) + } catch (error) { + console.error("Failed to parse SSE data:", error, "Raw data:", currentData) + } + } else if (currentEvent === "complete") { + sink.complete() + return + } else if (currentEvent === "ack") { + console.log("Subscription acknowledged") + } + + // Reset for next event + currentEvent = "" + currentData = "" + } + } + } + } catch (error) { + if (error.name !== "AbortError") { + console.error("SSE subscription error:", error) + sink.error(error) + } + } + } + + runSubscription() + + return { + unsubscribe() { + controller.abort() + }, + } + }, + } + }, +}) + +const client = createClient({ + url: "http://localhost:8686/graphql", + exchanges: [cacheExchange, fetchExchange, modusSSEExchange], +}) + +interface GraphQLProviderProps { + children: React.ReactNode +} + +export function GraphQLProvider({ children }: GraphQLProviderProps) { + return {children} +} diff --git a/agent-events/frontend/next.config.mjs b/agent-events/frontend/next.config.mjs new file mode 100644 index 0000000..97d7463 --- /dev/null +++ b/agent-events/frontend/next.config.mjs @@ -0,0 +1,30 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + eslint: { + ignoreDuringBuilds: true, + }, + typescript: { + ignoreBuildErrors: true, + }, + images: { + unoptimized: true, + }, + experimental: { + webpackBuildWorker: true, + parallelServerBuildTraces: true, + parallelServerCompiles: true, + }, + env: {}, + webpack: (config, { isServer }) => { + if (!isServer) { + config.resolve.fallback = { + ...config.resolve.fallback, + fs: false, + path: false, + } + } + return config + }, +} + +export default nextConfig diff --git a/agent-events/frontend/package.json b/agent-events/frontend/package.json new file mode 100644 index 0000000..eadda5f --- /dev/null +++ b/agent-events/frontend/package.json @@ -0,0 +1,41 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint .", + "format": "prettier . --write --ignore-path .prettierignore", + "format:check": "prettier . --check --ignore-path .prettierignore" + }, + "dependencies": { + "@apollo/client": "latest", + "@apollo/experimental-nextjs-app-support": "latest", + "autoprefixer": "^10.4.20", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "d3": "^7.9.0", + "graphql": "^16.10.0", + "graphql-sse": "^2.5.4", + "lucide-react": "^0.488.0", + "next": "^15.3.1", + "papaparse": "^5.5.2", + "react": "^19", + "react-dom": "^19", + "tailwind-merge": "^2.5.5", + "urql": "^4.2.2", + "uuid": "^11.1.0" + }, + "devDependencies": { + "@types/node": "^22", + "@types/react": "^19", + "@types/react-dom": "^19", + "postcss": "^8", + "postcss-nesting": "^13.0.1", + "tailwindcss": "3.4.17", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5" + } +} diff --git a/agent-events/frontend/postcss.config.mjs b/agent-events/frontend/postcss.config.mjs new file mode 100644 index 0000000..703faf3 --- /dev/null +++ b/agent-events/frontend/postcss.config.mjs @@ -0,0 +1,8 @@ +const config = { + plugins: { + tailwindcss: {}, + "postcss-nesting": {}, + }, +} + +export default config diff --git a/agent-events/frontend/tailwind.config.ts b/agent-events/frontend/tailwind.config.ts new file mode 100644 index 0000000..39ee7a5 --- /dev/null +++ b/agent-events/frontend/tailwind.config.ts @@ -0,0 +1,19 @@ +import type { Config } from "tailwindcss" + +const config: Config = { + darkMode: ["class"], + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + "*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + colors: {}, + }, + }, + plugins: [require("tailwindcss-animate")], +} + +export default config diff --git a/agent-events/frontend/tsconfig.json b/agent-events/frontend/tsconfig.json new file mode 100644 index 0000000..4b2dc7b --- /dev/null +++ b/agent-events/frontend/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "target": "ES6", + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/agent-events/modus/.gitignore b/agent-events/modus/.gitignore new file mode 100644 index 0000000..2b5c5de --- /dev/null +++ b/agent-events/modus/.gitignore @@ -0,0 +1 @@ +.modusdb/ diff --git a/agent-events/modus/go.mod b/agent-events/modus/go.mod new file mode 100644 index 0000000..e8c3900 --- /dev/null +++ b/agent-events/modus/go.mod @@ -0,0 +1,12 @@ +module modus + +go 1.24.2 + +require github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.5 + +require ( + github.com/tidwall/gjson v1.18.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect +) diff --git a/agent-events/modus/go.sum b/agent-events/modus/go.sum new file mode 100644 index 0000000..28b3f75 --- /dev/null +++ b/agent-events/modus/go.sum @@ -0,0 +1,12 @@ +github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.5 h1:Zl9f9ssdyCs/EuNiLDXyoLpwBM9upIYIfJvS0BQuFQ8= +github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.5/go.mod h1:WX/57csiUC+LYaROkVo0bIPiG8jkQRxwD4Ajb7a0s6A= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= diff --git a/agent-events/modus/main.go b/agent-events/modus/main.go new file mode 100644 index 0000000..e602add --- /dev/null +++ b/agent-events/modus/main.go @@ -0,0 +1,500 @@ +package main + +import ( + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/hypermodeinc/modus/sdk/go/pkg/agents" + "github.com/hypermodeinc/modus/sdk/go/pkg/models" + "github.com/hypermodeinc/modus/sdk/go/pkg/models/openai" +) + +// ThemedAgent generates events based on a specific theme +type ThemedAgent struct { + agents.AgentBase + AgentId string `json:"agent_id"` + Theme string `json:"theme"` + EventCount int `json:"event_count"` + MaxEvents int `json:"max_events"` + StartTime time.Time `json:"start_time"` + IsActive bool `json:"is_active"` + LastEventTime time.Time `json:"last_event_time"` +} + +// Agent event types that will be published +type ThemeEvent struct { + EventType string `json:"eventType"` + Title string `json:"title"` + Description string `json:"description"` + Severity string `json:"severity"` + Location string `json:"location,omitempty"` + Data map[string]interface{} `json:"data,omitempty"` +} + +func (e ThemeEvent) EventName() string { + return "theme_event" +} + +type AgentStatusEvent struct { + Status string `json:"status"` + EventCount int `json:"eventCount"` + MaxEvents int `json:"maxEvents"` + Theme string `json:"theme"` + TimeElapsed string `json:"timeElapsed"` +} + +func (e AgentStatusEvent) EventName() string { + return "agent_status" +} + +type AgentCompletedEvent struct { + Theme string `json:"theme"` + TotalEvents int `json:"totalEvents"` + Duration string `json:"duration"` + FinalMessage string `json:"finalMessage"` +} + +func (e AgentCompletedEvent) EventName() string { + return "agent_completed" +} + +// Agent implementation +func (a *ThemedAgent) Name() string { + return "ThemedAgent" +} + +func (a *ThemedAgent) OnInitialize() error { + a.MaxEvents = 10 + a.EventCount = 0 + a.StartTime = time.Now() + a.IsActive = true + a.LastEventTime = time.Now() + + // Publish initialization event + err := a.PublishEvent(AgentStatusEvent{ + Status: "initialized", + EventCount: 0, + MaxEvents: a.MaxEvents, + Theme: a.Theme, + TimeElapsed: "0s", + }) + + return err +} + +func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*string, error) { + switch messageName { + case "set_agent_id": + if data != nil && *data != "" { + a.AgentId = *data + result := fmt.Sprintf("Agent ID set: %s", a.AgentId) + return &result, nil + } + return nil, fmt.Errorf("agent ID data is required") + case "initialize_theme": + if data != nil && *data != "" { + a.Theme = *data + result := fmt.Sprintf("Agent initialized with theme: %s", a.Theme) + return &result, nil + } + return nil, fmt.Errorf("theme data is required") + case "start_generation": + return a.startEventGeneration() + case "start_rapid_generation": + return a.startRapidGeneration() + case "start_auto_generation": + return a.startAutoGeneration() + case "get_status": + return a.getStatus() + case "stop": + return a.stopGeneration() + default: + return nil, fmt.Errorf("unknown message: %s", messageName) + } +} + +func (a *ThemedAgent) GetState() *string { + state := map[string]interface{}{ + "agent_id": a.AgentId, + "theme": a.Theme, + "event_count": a.EventCount, + "max_events": a.MaxEvents, + "start_time": a.StartTime.Unix(), + "is_active": a.IsActive, + "last_event_time": a.LastEventTime.Unix(), + } + + stateBytes, _ := json.Marshal(state) + stateStr := string(stateBytes) + return &stateStr +} + +func (a *ThemedAgent) SetState(data *string) { + if data == nil || *data == "" { + return + } + + var state map[string]interface{} + if err := json.Unmarshal([]byte(*data), &state); err != nil { + return + } + + if agentId, ok := state["agent_id"].(string); ok { + a.AgentId = agentId + } + if theme, ok := state["theme"].(string); ok { + a.Theme = theme + } + if count, ok := state["event_count"].(float64); ok { + a.EventCount = int(count) + } + if maxEvents, ok := state["max_events"].(float64); ok { + a.MaxEvents = int(maxEvents) + } + if startTime, ok := state["start_time"].(float64); ok { + a.StartTime = time.Unix(int64(startTime), 0) + } + if isActive, ok := state["is_active"].(bool); ok { + a.IsActive = isActive + } + if lastEventTime, ok := state["last_event_time"].(float64); ok { + a.LastEventTime = time.Unix(int64(lastEventTime), 0) + } +} + +func (a *ThemedAgent) startEventGeneration() (*string, error) { + if !a.IsActive { + result := "Agent is not active" + return &result, nil + } + + if a.EventCount >= a.MaxEvents { + result := "Agent has completed all events" + return &result, nil + } + + // Generate and publish event + event, err := a.generateThemeEvent() + if err != nil { + return nil, fmt.Errorf("failed to generate event: %w", err) + } + + // Publish the themed event + err = a.PublishEvent(*event) + if err != nil { + return nil, fmt.Errorf("failed to publish event: %w", err) + } + + a.EventCount++ + a.LastEventTime = time.Now() + + // Publish status update + elapsed := time.Since(a.StartTime) + err = a.PublishEvent(AgentStatusEvent{ + Status: "generating", + EventCount: a.EventCount, + MaxEvents: a.MaxEvents, + Theme: a.Theme, + TimeElapsed: elapsed.Round(time.Second).String(), + }) + if err != nil { + return nil, fmt.Errorf("failed to publish status: %w", err) + } + + // Check if we've reached the limit + if a.EventCount >= a.MaxEvents { + return a.completeGeneration() + } + + result := fmt.Sprintf("Generated event %d/%d for theme: %s", a.EventCount, a.MaxEvents, a.Theme) + return &result, nil +} + +// New method for rapid generation (5 events in sequence) +func (a *ThemedAgent) startRapidGeneration() (*string, error) { + if !a.IsActive { + result := "Agent is not active" + return &result, nil + } + + if a.EventCount >= a.MaxEvents { + result := "Agent has completed all events" + return &result, nil + } + + // Generate one event first + result, err := a.startEventGeneration() + if err != nil { + return nil, err + } + + // If we haven't completed yet, trigger the next rapid event + if a.IsActive && a.EventCount < a.MaxEvents && a.AgentId != "" { + // Send async message to continue rapid generation + agents.SendMessageAsync(a.AgentId, "start_generation") + } + + return result, nil +} + +// New method for auto generation (continues until complete) +func (a *ThemedAgent) startAutoGeneration() (*string, error) { + if !a.IsActive { + result := "Agent is not active" + return &result, nil + } + + if a.EventCount >= a.MaxEvents { + result := "Agent has completed all events" + return &result, nil + } + + // Generate one event + result, err := a.startEventGeneration() + if err != nil { + return nil, err + } + + // If we haven't completed yet, trigger the next auto event + if a.IsActive && a.EventCount < a.MaxEvents && a.AgentId != "" { + // Send async message to continue auto generation + agents.SendMessageAsync(a.AgentId, "start_auto_generation") + } + + return result, nil +} + +func (a *ThemedAgent) completeGeneration() (*string, error) { + a.IsActive = false + duration := time.Since(a.StartTime) + + // Publish completion event + err := a.PublishEvent(AgentCompletedEvent{ + Theme: a.Theme, + TotalEvents: a.EventCount, + Duration: duration.Round(time.Second).String(), + FinalMessage: fmt.Sprintf("Completed %d themed events for '%s' in %v", a.EventCount, a.Theme, duration.Round(time.Second)), + }) + if err != nil { + return nil, fmt.Errorf("failed to publish completion: %w", err) + } + + result := fmt.Sprintf("Agent completed! Generated %d events for theme '%s' in %v", a.EventCount, a.Theme, duration.Round(time.Second)) + return &result, nil +} + +func (a *ThemedAgent) generateThemeEvent() (*ThemeEvent, error) { + model, err := models.GetModel[openai.ChatModel]("text-generator") + if err != nil { + return nil, err + } + + prompt := fmt.Sprintf(`You are an event generator for the theme "%s". +Generate a realistic pseudo-event that fits this theme. + +The event should be interesting and dramatic but fictional. +Respond with ONLY a JSON object in this exact format: +{ + "eventType": "type of event (e.g. security_breach, mission_update, system_alert)", + "title": "Brief event title", + "description": "Detailed description of what happened", + "severity": "LOW, MEDIUM, HIGH, or CRITICAL", + "location": "where this event occurred (optional)", + "data": { + "additional": "relevant data fields as key-value pairs" + } +} + +Make it creative and thematic to "%s" but keep it as valid JSON.`, a.Theme, a.Theme) + + input, err := model.CreateInput( + openai.NewSystemMessage("You are a creative event generator. Always respond with valid JSON only."), + openai.NewUserMessage(prompt), + ) + if err != nil { + return nil, err + } + + input.Temperature = 0.8 // Higher temperature for creativity + + output, err := model.Invoke(input) + if err != nil { + return nil, err + } + + content := strings.TrimSpace(output.Choices[0].Message.Content) + + // Parse the JSON response + var event ThemeEvent + err = json.Unmarshal([]byte(content), &event) + if err != nil { + // Fallback event if JSON parsing fails + event = ThemeEvent{ + EventType: "generation_event", + Title: fmt.Sprintf("%s Event #%d", strings.Title(a.Theme), a.EventCount+1), + Description: fmt.Sprintf("A %s-themed event occurred during the simulation.", a.Theme), + Severity: "MEDIUM", + Location: "Unknown", + Data: map[string]interface{}{ + "theme": a.Theme, + "event_number": a.EventCount + 1, + "generated_at": time.Now().Format(time.RFC3339), + "parsing_error": err.Error(), + }, + } + } + + return &event, nil +} + +func (a *ThemedAgent) getStatus() (*string, error) { + status := map[string]interface{}{ + "agent_id": a.AgentId, + "theme": a.Theme, + "event_count": a.EventCount, + "max_events": a.MaxEvents, + "is_active": a.IsActive, + "elapsed": time.Since(a.StartTime).Round(time.Second).String(), + "progress": float64(a.EventCount) / float64(a.MaxEvents), + } + + statusBytes, err := json.Marshal(status) + if err != nil { + return nil, err + } + + result := string(statusBytes) + return &result, nil +} + +func (a *ThemedAgent) stopGeneration() (*string, error) { + a.IsActive = false + + err := a.PublishEvent(AgentStatusEvent{ + Status: "stopped", + EventCount: a.EventCount, + MaxEvents: a.MaxEvents, + Theme: a.Theme, + TimeElapsed: time.Since(a.StartTime).Round(time.Second).String(), + }) + if err != nil { + return nil, err + } + + result := fmt.Sprintf("Agent stopped. Generated %d/%d events for theme: %s", a.EventCount, a.MaxEvents, a.Theme) + return &result, nil +} + +// Register the agent +func init() { + agents.Register(&ThemedAgent{}) +} + +// Public functions that become GraphQL mutations/queries + +// CreateAgent creates a new agent and returns just the ID +func CreateAgent() (string, error) { + agentInfo, err := agents.Start("ThemedAgent") + if err != nil { + return "", err + } + + // Set the agent ID in the agent itself + _, err = agents.SendMessage(agentInfo.Id, "set_agent_id", agents.WithData(agentInfo.Id)) + if err != nil { + return "", fmt.Errorf("failed to set agent ID: %w", err) + } + + return agentInfo.Id, nil +} + +// SetTheme sets the theme for an existing agent +func UpdateAgentTheme(agentId string, theme string) (string, error) { + if theme == "" { + return "", fmt.Errorf("theme cannot be empty") + } + + result, err := agents.SendMessage(agentId, "initialize_theme", agents.WithData(theme)) + if err != nil { + return "", fmt.Errorf("failed to set theme for agent: %w", err) + } + + if result == nil { + return "", fmt.Errorf("no response from agent") + } + + return *result, nil +} + +// StartEventGeneration triggers a single event +func StartEventGeneration(agentId string) (string, error) { + err := agents.SendMessageAsync(agentId, "start_generation") + if err != nil { + return "", err + } + return fmt.Sprintf("Event generation triggered for agent: %s", agentId), nil +} + +// StartRapidGeneration triggers rapid event generation (self-managing) +func StartRapidGeneration(agentId string) (string, error) { + err := agents.SendMessageAsync(agentId, "start_rapid_generation") + if err != nil { + return "", err + } + return fmt.Sprintf("Rapid event generation started for agent: %s", agentId), nil +} + +// GetAgentStatus returns the current status of an agent +func GetAgentStatus(agentId string) (string, error) { + result, err := agents.SendMessage(agentId, "get_status") + if err != nil { + return "", err + } + if result == nil { + return "", fmt.Errorf("no response from agent") + } + return *result, nil +} + +// StopAgent stops an agent's event generation asynchronously +func StopAgent(agentId string) (string, error) { + // Use async message to stop the agent + err := agents.SendMessageAsync(agentId, "stop") + if err != nil { + return "", err + } + + return fmt.Sprintf("Stop signal sent to agent: %s", agentId), nil +} + +// Agents returns all active agents (renamed from ListAgents to match GraphQL field name) +func Agents() ([]agents.AgentInfo, error) { + return agents.ListAll() +} + +// AutoRunAgent creates an agent, sets theme, and starts auto-generation +func AutoRunAgent(theme string) (string, error) { + // Create the agent + agentId, err := CreateAgent() + if err != nil { + return "", err + } + + // Set the theme + _, err = UpdateAgentTheme(agentId, theme) + if err != nil { + // If theme setting fails, stop the agent + agents.Stop(agentId) + return "", fmt.Errorf("failed to setup agent theme: %w", err) + } + + // Start auto-generation (agent will self-manage the rest) + err = agents.SendMessageAsync(agentId, "start_auto_generation") + if err != nil { + return "", fmt.Errorf("failed to start auto generation: %w", err) + } + + return fmt.Sprintf("Auto-running agent created with ID: %s and theme '%s'. Auto-generation started.", agentId, theme), nil +} diff --git a/agent-events/modus/modus.json b/agent-events/modus/modus.json new file mode 100644 index 0000000..f23d054 --- /dev/null +++ b/agent-events/modus/modus.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://schema.hypermode.com/modus.json", + "endpoints": { + "default": { + "type": "graphql", + "path": "/graphql", + "auth": "bearer-token" + } + }, + "models": { + "text-generator": { + "sourceModel": "gpt-4o-mini", + "connection": "openai", + "path": "v1/chat/completions" + } + }, + "connections": { + "openai": { + "type": "http", + "baseUrl": "https://api.openai.com/", + "headers": { + "Authorization": "Bearer {{API_KEY}}" + } + } + } +} diff --git a/agent-events/package.json b/agent-events/package.json new file mode 100644 index 0000000..d363b93 --- /dev/null +++ b/agent-events/package.json @@ -0,0 +1,43 @@ +{ + "name": "agent-events-example", + "version": "0.0.0", + "packageManager": "pnpm@10.6.0", + "scripts": { + "dev:frontend": "pnpm --filter \"frontend\" dev", + "dev:backend": "cd ./modus && modus dev", + "build": "pnpm -r build" + }, + "devDependencies": { + "@babel/cli": "7.27.2", + "@babel/core": "7.27.4", + "@babel/preset-env": "7.27.2", + "@babel/preset-typescript": "7.27.1", + "@babel/runtime": "7.27.4", + "@jest/globals": "29.7.0", + "@types/debug": "^4.1.12", + "@types/jest": "^29.0.0", + "@types/node": "22.15.29", + "@types/papaparse": "^5.3.15", + "@types/react": "^19", + "@types/react-dom": "^19", + "jest": "^29.0.0", + "typescript": "5.8.3", + "next": "^15.3.1" + }, + "pnpm": { + "peerDependencyRules": { + "ignoreMissing": [ + "@babel/*", + "typescript", + "ts-node", + "@tsconfig/*", + "@types/*", + "jest", + "@jest/*", + "supertest", + "prettier", + "webpack" + ] + } + } +} diff --git a/agent-events/pnpm-lock.yaml b/agent-events/pnpm-lock.yaml new file mode 100644 index 0000000..5c20134 --- /dev/null +++ b/agent-events/pnpm-lock.yaml @@ -0,0 +1,5546 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@babel/cli': + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.4) + '@babel/core': + specifier: 7.27.4 + version: 7.27.4 + '@babel/preset-env': + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.4) + '@babel/preset-typescript': + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.4) + '@babel/runtime': + specifier: 7.27.4 + version: 7.27.4 + '@jest/globals': + specifier: 29.7.0 + version: 29.7.0 + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/jest': + specifier: ^29.0.0 + version: 29.5.14 + '@types/node': + specifier: 22.15.29 + version: 22.15.29 + '@types/papaparse': + specifier: ^5.3.15 + version: 5.3.16 + '@types/react': + specifier: ^19 + version: 19.1.7 + '@types/react-dom': + specifier: ^19 + version: 19.1.6(@types/react@19.1.7) + jest: + specifier: ^29.0.0 + version: 29.7.0(@types/node@22.15.29) + next: + specifier: ^15.3.1 + version: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + + frontend: + dependencies: + '@apollo/client': + specifier: latest + version: 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@apollo/experimental-nextjs-app-support': + specifier: latest + version: 0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.21(postcss@8.5.4) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + d3: + specifier: ^7.9.0 + version: 7.9.0 + graphql: + specifier: ^16.10.0 + version: 16.11.0 + graphql-sse: + specifier: ^2.5.4 + version: 2.5.4(graphql@16.11.0) + lucide-react: + specifier: ^0.488.0 + version: 0.488.0(react@19.1.0) + next: + specifier: ^15.3.1 + version: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + papaparse: + specifier: ^5.5.2 + version: 5.5.3 + react: + specifier: ^19 + version: 19.1.0 + react-dom: + specifier: ^19 + version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^2.5.5 + version: 2.6.0 + urql: + specifier: ^4.2.2 + version: 4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@19.1.0) + uuid: + specifier: ^11.1.0 + version: 11.1.0 + devDependencies: + '@types/node': + specifier: ^22 + version: 22.15.29 + '@types/react': + specifier: ^19 + version: 19.1.7 + '@types/react-dom': + specifier: ^19 + version: 19.1.6(@types/react@19.1.7) + postcss: + specifier: ^8 + version: 8.5.4 + postcss-nesting: + specifier: ^13.0.1 + version: 13.0.2(postcss@8.5.4) + tailwindcss: + specifier: 3.4.17 + version: 3.4.17 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.17) + typescript: + specifier: ^5 + version: 5.8.3 + +packages: + + '@0no-co/graphql.web@1.1.2': + resolution: {integrity: sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@apollo/client-integration-nextjs@0.12.2': + resolution: {integrity: sha512-Nsoe/onkEqCfIcQfoklnimRGibtaYXmkst6moXJw9Jl0sFqxpEyNMv3xvdPXItN6lZABBeKM8N+u+/7iqyZDig==} + peerDependencies: + '@apollo/client': ^3.13.0 + next: ^15.2.3 + react: ^19 + + '@apollo/client-react-streaming@0.12.2': + resolution: {integrity: sha512-zVc6QmvvR+9DZaLPUES1Rp63MC2VAnvHJC7gNVagH5kI3IZgeJGNgxKX/RMpYJ2+a2EclOG50czFCD7XkXe24w==} + peerDependencies: + '@apollo/client': ^3.13.0 + graphql: ^16 || >=17.0.0-alpha.2 + react: ^19 + react-dom: ^19 + + '@apollo/client@3.13.8': + resolution: {integrity: sha512-YM9lQpm0VfVco4DSyKooHS/fDTiKQcCHfxr7i3iL6a0kP/jNO5+4NFK6vtRDxaYisd5BrwOZHLJpPBnvRVpKPg==} + peerDependencies: + graphql: ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 || ^6.0.3 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + + '@apollo/experimental-nextjs-app-support@0.12.2': + resolution: {integrity: sha512-a+WpKGuabj1rAgDCSwaAt8LYitusVcTm/W2jGNFqTz4nerJ0XeWaN1JTmJI8uoCWMyXdRIa2ZzUjX3UcDKsBeQ==} + peerDependencies: + '@apollo/client': ^3.13.0 + next: ^15.2.3 + react: ^19 + + '@babel/cli@7.27.2': + resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.27.5': + resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.27.4': + resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + 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.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.27.1': + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.27.1': + resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.27.5': + resolution: {integrity: sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.27.1': + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.27.1': + resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.27.3': + resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.27.3': + resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.1': + resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.27.5': + resolution: {integrity: sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.27.1': + resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.27.2': + resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-typescript@7.27.1': + resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.27.4': + resolution: {integrity: sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.4': + resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.6': + resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@csstools/selector-resolve-nested@3.1.0': + resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@img/sharp-darwin-arm64@0.34.2': + resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.2': + resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.2': + resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.2': + resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.34.2': + resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.2': + resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.2': + resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.2': + resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.2': + resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.2': + resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.2': + resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.2': + resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@next/env@15.3.3': + resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} + + '@next/swc-darwin-arm64@15.3.3': + resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.3.3': + resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.3.3': + resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.3.3': + resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.3.3': + resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.3.3': + resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.3.3': + resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.3.3': + resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': + resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@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@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@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.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@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/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} + + '@types/papaparse@5.3.16': + resolution: {integrity: sha512-T3VuKMC2H0lgsjI9buTB3uuKj3EMD2eap1MOuEQuBQ44EnDx/IkGhU6EwiTf9zG3za4SKlmwKAImdDKdNnCsXg==} + + '@types/react-dom@19.1.6': + resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.1.7': + resolution: {integrity: sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@urql/core@5.1.1': + resolution: {integrity: sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==} + + '@wry/caches@1.0.1': + resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} + engines: {node: '>=8'} + + '@wry/context@0.7.4': + resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} + engines: {node: '>=8'} + + '@wry/equality@0.5.7': + resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} + engines: {node: '>=8'} + + '@wry/trie@0.5.0': + resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} + engines: {node: '>=8'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + 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'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.25.0: + resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001721: + resolution: {integrity: sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + 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==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-compat@3.43.0: + resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + 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.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + 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@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@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.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.6.0: + resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.166: + resolution: {integrity: sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + 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'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphql-sse@2.5.4: + resolution: {integrity: sha512-8PIGHQPv1vokYboL8KsoBomvyJCUMJCAwSp5f+bR2qVoYtPo7CYowrYV7LFiXuiirX0cxVzgUBFNa5BaI4rZ2A==} + engines: {node: '>=12'} + peerDependencies: + graphql: '>=0.11 <=16' + + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + 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'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + 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-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + 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-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + 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} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.488.0: + resolution: {integrity: sha512-ronlL0MyKut4CEzBY/ai2ZpKPxyWO4jUqdAkm2GNK5Zn3Rj+swDz+3lvyAUXN0PNqPKIX6XM9Xadwz/skLs/pQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next@15.3.3: + resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optimism@0.18.1: + resolution: {integrity: sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + papaparse@5.5.3: + resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-nesting@13.0.2: + resolution: {integrity: sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.4: + resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} + 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} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + 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@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + rehackt@0.1.0: + resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} + peerDependencies: + '@types/react': '*' + react: '*' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.34.2: + resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + 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'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + + 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'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-invariant@0.10.3: + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + urql@4.2.2: + resolution: {integrity: sha512-3GgqNa6iF7bC4hY/ImJKN4REQILcSU9VKcKL8gfELZM8mM5BnLH1BsCc8kBdnVGD1LIFOs4W3O2idNHhON1r0w==} + peerDependencies: + '@urql/core': ^5.0.0 + react: '>= 16.8.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wonka@6.3.5: + resolution: {integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zen-observable-ts@1.2.5: + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + + zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + +snapshots: + + '@0no-co/graphql.web@1.1.2(graphql@16.11.0)': + optionalDependencies: + graphql: 16.11.0 + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@apollo/client-integration-nextjs@0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@apollo/client': 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@apollo/client-react-streaming': 0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + transitivePeerDependencies: + - '@types/react' + - graphql + - react-dom + + '@apollo/client-react-streaming@0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@apollo/client': 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@types/react-dom': 19.1.6(@types/react@19.1.7) + '@wry/equality': 0.5.7 + graphql: 16.11.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + ts-invariant: 0.10.3 + transitivePeerDependencies: + - '@types/react' + + '@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + '@wry/caches': 1.0.1 + '@wry/equality': 0.5.7 + '@wry/trie': 0.5.0 + graphql: 16.11.0 + graphql-tag: 2.12.6(graphql@16.11.0) + hoist-non-react-statics: 3.3.2 + optimism: 0.18.1 + prop-types: 15.8.1 + rehackt: 0.1.0(@types/react@19.1.7)(react@19.1.0) + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.8.1 + zen-observable-ts: 1.2.5 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + transitivePeerDependencies: + - '@types/react' + + '@apollo/experimental-nextjs-app-support@0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@apollo/client': 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@apollo/client-integration-nextjs': 0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + transitivePeerDependencies: + - '@types/react' + - graphql + - react-dom + + '@babel/cli@7.27.2(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@jridgewell/trace-mapping': 0.3.25 + commander: 6.2.1 + convert-source-map: 2.0.0 + fs-readdir-recursive: 1.1.0 + glob: 7.2.3 + make-dir: 2.1.0 + slash: 2.0.0 + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 + chokidar: 3.6.0 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.27.5': {} + + '@babel/core@7.27.4': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + convert-source-map: 2.0.0 + debug: 4.4.1 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.5': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.27.6 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.27.6 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.27.1': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.27.6': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 + + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.6 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.27.5(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) + '@babel/traverse': 7.27.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.27.5(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.27.2(@babel/core@7.27.4)': + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.27.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-regenerator': 7.27.5(@babel/core@7.27.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.4) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.4) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.4) + core-js-compat: 3.43.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.6 + esutils: 2.0.3 + + '@babel/preset-typescript@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.27.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + + '@babel/traverse@7.27.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 + debug: 4.4.1 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@0.2.3': {} + + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@emnapi/runtime@1.4.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + dependencies: + graphql: 16.11.0 + + '@img/sharp-darwin-arm64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.1.0 + optional: true + + '@img/sharp-darwin-x64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.1.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-darwin-x64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.1.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.1.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.1.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + + '@img/sharp-linux-arm64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.1.0 + optional: true + + '@img/sharp-linux-arm@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.1.0 + optional: true + + '@img/sharp-linux-s390x@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.1.0 + optional: true + + '@img/sharp-linux-x64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.1.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + optional: true + + '@img/sharp-wasm32@0.34.2': + dependencies: + '@emnapi/runtime': 1.4.3 + optional: true + + '@img/sharp-win32-arm64@0.34.2': + optional: true + + '@img/sharp-win32-ia32@0.34.2': + optional: true + + '@img/sharp-win32-x64@0.34.2': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.15.29) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.15.29 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.15.29 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.27.4 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@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.15.29 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@next/env@15.3.3': {} + + '@next/swc-darwin-arm64@15.3.3': + optional: true + + '@next/swc-darwin-x64@15.3.3': + optional: true + + '@next/swc-linux-arm64-gnu@15.3.3': + optional: true + + '@next/swc-linux-arm64-musl@15.3.3': + optional: true + + '@next/swc-linux-x64-gnu@15.3.3': + optional: true + + '@next/swc-linux-x64-musl@15.3.3': + optional: true + + '@next/swc-win32-arm64-msvc@15.3.3': + optional: true + + '@next/swc-win32-x64-msvc@15.3.3': + optional: true + + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.7 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.27.6 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + + '@types/babel__traverse@7.20.7': + dependencies: + '@babel/types': 7.27.6 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.15.29 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/ms@2.1.0': {} + + '@types/node@22.15.29': + dependencies: + undici-types: 6.21.0 + + '@types/papaparse@5.3.16': + dependencies: + '@types/node': 22.15.29 + + '@types/react-dom@19.1.6(@types/react@19.1.7)': + dependencies: + '@types/react': 19.1.7 + + '@types/react@19.1.7': + dependencies: + csstype: 3.1.3 + + '@types/stack-utils@2.0.3': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@urql/core@5.1.1(graphql@16.11.0)': + dependencies: + '@0no-co/graphql.web': 1.1.2(graphql@16.11.0) + wonka: 6.3.5 + transitivePeerDependencies: + - graphql + + '@wry/caches@1.0.1': + dependencies: + tslib: 2.8.1 + + '@wry/context@0.7.4': + dependencies: + tslib: 2.8.1 + + '@wry/equality@0.5.7': + dependencies: + tslib: 2.8.1 + + '@wry/trie@0.5.0': + dependencies: + tslib: 2.8.1 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + autoprefixer@10.4.21(postcss@8.5.4): + dependencies: + browserslist: 4.25.0 + caniuse-lite: 1.0.30001721 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.4 + postcss-value-parser: 4.2.0 + + babel-jest@29.7.0(@babel/core@7.27.4): + dependencies: + '@babel/core': 7.27.4 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.27.4) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.27.1 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.7 + + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.4): + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.4): + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) + core-js-compat: 3.43.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.4): + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) + transitivePeerDependencies: + - supports-color + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.4): + dependencies: + '@babel/core': 7.27.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.4) + + babel-preset-jest@29.6.3(@babel/core@7.27.4): + dependencies: + '@babel/core': 7.27.4 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4) + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.25.0: + dependencies: + caniuse-lite: 1.0.30001721 + electron-to-chromium: 1.5.166 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.0) + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001721: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.3: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + + commander@4.1.1: {} + + commander@6.2.1: {} + + commander@7.2.0: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + core-js-compat@3.43.0: + dependencies: + browserslist: 4.25.0 + + create-jest@29.7.0(@types/node@22.15.29): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.15.29) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + 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.0: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + 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.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + 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.0 + 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.1: + dependencies: + ms: 2.1.3 + + dedent@1.6.0: {} + + deepmerge@4.3.1: {} + + delaunator@5.0.1: + dependencies: + robust-predicates: 3.0.2 + + detect-libc@2.0.4: + optional: true + + detect-newline@3.1.0: {} + + didyoumean@1.2.2: {} + + diff-sequences@29.6.3: {} + + dlv@1.1.3: {} + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.166: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + escalade@3.2.0: {} + + escape-string-regexp@2.0.0: {} + + esprima@4.0.1: {} + + esutils@2.0.3: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fraction.js@4.3.7: {} + + fs-readdir-recursive@1.1.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-package-type@0.1.0: {} + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + graceful-fs@4.2.11: {} + + graphql-sse@2.5.4(graphql@16.11.0): + dependencies: + graphql: 16.11.0 + + graphql-tag@2.12.6(graphql@16.11.0): + dependencies: + graphql: 16.11.0 + tslib: 2.8.1 + + graphql@16.11.0: {} + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + html-escaper@2.0.2: {} + + human-signals@2.1.0: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internmap@2.0.3: {} + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: + optional: true + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-stream@2.0.1: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.27.4 + '@babel/parser': 7.27.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.27.4 + '@babel/parser': 7.27.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.6.0 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.15.29): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.15.29) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.15.29) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.15.29): + dependencies: + '@babel/core': 7.27.4 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.27.4) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.15.29 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.15.29 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.27.4 + '@babel/generator': 7.27.5 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) + '@babel/types': 7.27.6 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.29 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.15.29 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.15.29): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.15.29) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json5@2.2.3: {} + + kleur@3.0.3: {} + + leven@3.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.debounce@4.0.8: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@0.488.0(react@19.1.0): + dependencies: + react: 19.1.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + + make-dir@4.0.0: + dependencies: + semver: 7.7.2 + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@next/env': 15.3.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001721 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.4)(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.3.3 + '@next/swc-darwin-x64': 15.3.3 + '@next/swc-linux-arm64-gnu': 15.3.3 + '@next/swc-linux-arm64-musl': 15.3.3 + '@next/swc-linux-x64-gnu': 15.3.3 + '@next/swc-linux-x64-musl': 15.3.3 + '@next/swc-win32-arm64-msvc': 15.3.3 + '@next/swc-win32-x64-msvc': 15.3.3 + sharp: 0.34.2 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optimism@0.18.1: + dependencies: + '@wry/caches': 1.0.1 + '@wry/context': 0.7.4 + '@wry/trie': 0.5.0 + tslib: 2.8.1 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + papaparse@5.5.3: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pify@4.0.1: {} + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + postcss-import@15.1.0(postcss@8.5.4): + dependencies: + postcss: 8.5.4 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.4): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.4 + + postcss-load-config@4.0.2(postcss@8.5.4): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.0 + optionalDependencies: + postcss: 8.5.4 + + postcss-nested@6.2.0(postcss@8.5.4): + dependencies: + postcss: 8.5.4 + postcss-selector-parser: 6.1.2 + + postcss-nesting@13.0.2(postcss@8.5.4): + dependencies: + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + postcss: 8.5.4 + postcss-selector-parser: 7.1.0 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.4: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + 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: {} + + queue-microtask@1.2.3: {} + + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react@19.1.0: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + rehackt@0.1.0(@types/react@19.1.7)(react@19.1.0): + optionalDependencies: + '@types/react': 19.1.7 + react: 19.1.0 + + require-directory@2.1.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@5.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + robust-predicates@3.0.2: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rw@1.3.3: {} + + safer-buffer@2.1.2: {} + + scheduler@0.26.0: {} + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.7.2: {} + + sharp@0.34.2: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.2 + '@img/sharp-darwin-x64': 0.34.2 + '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-linux-arm': 0.34.2 + '@img/sharp-linux-arm64': 0.34.2 + '@img/sharp-linux-s390x': 0.34.2 + '@img/sharp-linux-x64': 0.34.2 + '@img/sharp-linuxmusl-arm64': 0.34.2 + '@img/sharp-linuxmusl-x64': 0.34.2 + '@img/sharp-wasm32': 0.34.2 + '@img/sharp-win32-arm64': 0.34.2 + '@img/sharp-win32-ia32': 0.34.2 + '@img/sharp-win32-x64': 0.34.2 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + + sisteransi@1.0.5: {} + + slash@2.0.0: {} + + slash@3.0.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + streamsearch@1.1.0: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.27.4)(react@19.1.0): + dependencies: + client-only: 0.0.1 + react: 19.1.0 + optionalDependencies: + '@babel/core': 7.27.4 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-observable@4.0.0: {} + + tailwind-merge@2.6.0: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.17): + dependencies: + tailwindcss: 3.4.17 + + tailwindcss@3.4.17: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.4 + postcss-import: 15.1.0(postcss@8.5.4) + postcss-js: 4.0.1(postcss@8.5.4) + postcss-load-config: 4.0.2(postcss@8.5.4) + postcss-nested: 6.2.0(postcss@8.5.4) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-interface-checker@0.1.13: {} + + ts-invariant@0.10.3: + dependencies: + tslib: 2.8.1 + + tslib@2.8.1: {} + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typescript@5.8.3: {} + + undici-types@6.21.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + update-browserslist-db@1.1.3(browserslist@4.25.0): + dependencies: + browserslist: 4.25.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + urql@4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@19.1.0): + dependencies: + '@urql/core': 5.1.1(graphql@16.11.0) + react: 19.1.0 + wonka: 6.3.5 + + util-deprecate@1.0.2: {} + + uuid@11.1.0: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wonka@6.3.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml@2.8.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + zen-observable-ts@1.2.5: + dependencies: + zen-observable: 0.8.15 + + zen-observable@0.8.15: {} diff --git a/agent-events/pnpm-workspace.yaml b/agent-events/pnpm-workspace.yaml new file mode 100644 index 0000000..1952880 --- /dev/null +++ b/agent-events/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - frontend/ From d5b37a9293c8ccc9d7da6a112e061d56769ea3e1 Mon Sep 17 00:00:00 2001 From: danstarns Date: Wed, 11 Jun 2025 14:35:20 +0700 Subject: [PATCH 02/12] * --- agent-events/frontend/app/page.tsx | 128 +++++++++------------------- agent-events/frontend/app/urql.tsx | 3 - agent-events/modus/main.go | 130 +++++------------------------ 3 files changed, 61 insertions(+), 200 deletions(-) diff --git a/agent-events/frontend/app/page.tsx b/agent-events/frontend/app/page.tsx index 44e86c6..4c7d9d7 100644 --- a/agent-events/frontend/app/page.tsx +++ b/agent-events/frontend/app/page.tsx @@ -58,27 +58,21 @@ const CREATE_AGENT = ` } ` -const AUTO_RUN_AGENT_MUTATION = ` - mutation AutoRunAgent($theme: String!) { - autoRunAgent(theme: $theme) - } -` - const SET_AGENT_THEME_MUTATION = ` mutation SetAgentTheme($agentId: String!, $theme: String!) { updateAgentTheme(agentId: $agentId, theme: $theme) } ` -const START_EVENT_GENERATION_QUERY = ` - query StartEventGeneration($agentId: String!) { - startEventGeneration(agentId: $agentId) +const START_EVENT_GENERATION_MUTATION = ` + mutation StartEventGeneration($agentId: String!) { + mutateStartEventGeneration(agentId: $agentId) } ` -const START_RAPID_GENERATION_QUERY = ` - query StartRapidGeneration($agentId: String!) { - startRapidGeneration(agentId: $agentId) +const START_RAPID_GENERATION_MUTATION = ` + mutation StartRapidGeneration($agentId: String!) { + mutateStartRapidGeneration(agentId: $agentId) } ` @@ -89,13 +83,11 @@ function AgentEventSubscription({ agentId: string onEvent: (event: any, agentId: string) => void }) { - const [{ data, error, fetching }] = useSubscription({ + const [{ data, error }] = useSubscription({ query: AGENT_EVENT_SUBSCRIPTION, variables: { agentId }, }) - console.log("Subscription state:", { data, error, fetching, agentId }) - if (error) { console.error("Subscription error details:", { message: error.message, @@ -106,7 +98,6 @@ function AgentEventSubscription({ useEffect(() => { if (data?.agentEvent) { - console.log("Received event:", data.agentEvent) onEvent(data.agentEvent, agentId) } }, [data?.agentEvent, agentId, onEvent]) @@ -116,7 +107,8 @@ function AgentEventSubscription({ export default function Page() { const [events, setEvents] = useState([]) - const [agents, setAgents] = useState([]) + const [agentEventCounts, setAgentEventCounts] = useState>({}) + const [agentLastEvents, setAgentLastEvents] = useState>({}) const [isConnected, setIsConnected] = useState(false) const [newTheme, setNewTheme] = useState("") const [isCreating, setIsCreating] = useState(false) @@ -125,9 +117,8 @@ export default function Page() { const [, createAgent] = useMutation(CREATE_AGENT) const [, setTheme] = useMutation(SET_AGENT_THEME_MUTATION) - const [, autoRunAgent] = useMutation(AUTO_RUN_AGENT_MUTATION) - const [, startEventGeneration] = useQuery({ query: START_EVENT_GENERATION_QUERY, pause: true }) - const [, startRapidGeneration] = useQuery({ query: START_RAPID_GENERATION_QUERY, pause: true }) + const [, startEventGeneration] = useMutation(START_EVENT_GENERATION_MUTATION) + const [, startRapidGeneration] = useMutation(START_RAPID_GENERATION_MUTATION) const getEventType = useCallback( (eventName: string): "info" | "warning" | "success" | "error" => { @@ -142,8 +133,6 @@ export default function Page() { // Handle real agent events from subscriptions - memoized to prevent re-renders const handleAgentEvent = useCallback( (eventData: any, agentId: string) => { - console.log("Processing agent event:", eventData, "for agent:", agentId) - const eventType = getEventType(eventData.name) const newEvent: AgentEvent = { @@ -157,19 +146,16 @@ export default function Page() { setEvents((prev) => [newEvent, ...prev.slice(0, 49)]) // Keep last 50 events - // Update agent status - setAgents((prev) => - prev.map((agent) => - agent.id === agentId - ? { - ...agent, - status: "active" as const, - lastEvent: eventData.name.replace(/_/g, " "), - eventCount: agent.eventCount + 1, - } - : agent, - ), - ) + // Update agent event counts and last events + setAgentEventCounts((prev) => ({ + ...prev, + [agentId]: (prev[agentId] || 0) + 1, + })) + + setAgentLastEvents((prev) => ({ + ...prev, + [agentId]: eventData.name.replace(/_/g, " "), + })) }, [getEventType], ) @@ -180,15 +166,10 @@ export default function Page() { setIsCreating(true) try { - // Step 1: Create the agent const createResult = await createAgent() - console.log("Create agent result:", createResult) - if (createResult.data?.createAgent) { const agentId = createResult.data.createAgent - console.log("Created agent with ID:", agentId) - // Step 2: Set the theme after a brief delay setTimeout(async () => { try { await setTheme({ agentId, theme: newTheme.trim() }) @@ -197,7 +178,7 @@ export default function Page() { } catch (error) { console.error("Failed to set agent theme:", error) } - }, 1000) // 1 second delay to ensure agent is ready + }, 1000) } } catch (error) { console.error("Failed to create agent:", error) @@ -206,37 +187,9 @@ export default function Page() { } } - // Handle auto-running an agent - const handleAutoRunAgent = async () => { - if (!newTheme.trim()) return - - setIsCreating(true) - try { - const result = await autoRunAgent({ theme: newTheme.trim() }) - console.log("Auto-run agent result:", result) - - if (result.data?.autoRunAgent) { - setNewTheme("") - refetchAgents() - } - } catch (error) { - console.error("Failed to auto-run agent:", error) - } finally { - setIsCreating(false) - } - } - - // Initialize agents from GraphQL query + // Track connection status based on agents query useEffect(() => { if (agentsResult.data?.agents) { - console.log("Agents loaded:", agentsResult.data.agents) - setAgents( - agentsResult.data.agents.map((agent: any) => ({ - ...agent, - lastEvent: "Ready for operations", - eventCount: 0, - })), - ) setIsConnected(true) } else if (agentsResult.error) { console.error("Agents query error:", agentsResult.error) @@ -244,6 +197,14 @@ export default function Page() { } }, [agentsResult.data, agentsResult.error]) + // Get enriched agents data combining query data with local state + const enrichedAgents = (agentsResult.data?.agents || []).map((agent: any) => ({ + ...agent, + lastEvent: agentLastEvents[agent.id] || "Ready for operations", + eventCount: agentEventCounts[agent.id] || 0, + status: agentEventCounts[agent.id] > 0 ? "active" : agent.status, + })) + const getEventIcon = (type: string) => { switch (type) { case "warning": @@ -271,7 +232,7 @@ export default function Page() { return (
{/* Real-time subscriptions for each agent - only subscribe to agents with valid IDs */} - {agents + {enrichedAgents .filter((agent) => agent.id && agent.id.trim() !== "") .map((agent) => ( @@ -353,21 +314,6 @@ export default function Page() { )} - -
@@ -396,7 +342,7 @@ export default function Page() {
)} - {!agentsResult.fetching && agents.length === 0 && isConnected && ( + {!agentsResult.fetching && enrichedAgents.length === 0 && isConnected && (

No agents created yet

@@ -405,7 +351,7 @@ export default function Page() { )}
- {agents.map((agent) => ( + {enrichedAgents.map((agent) => (

{agent.name}

@@ -452,13 +398,15 @@ export default function Page() {
Active Agents - {agents.filter((a) => a.status === "active").length} + {enrichedAgents.filter((a) => a.status === "active").length}
Avg Events/Agent - {agents.length > 0 ? Math.round(events.length / agents.length) : 0} + {enrichedAgents.length > 0 + ? Math.round(events.length / enrichedAgents.length) + : 0}
diff --git a/agent-events/frontend/app/urql.tsx b/agent-events/frontend/app/urql.tsx index ccbc18e..065a86a 100644 --- a/agent-events/frontend/app/urql.tsx +++ b/agent-events/frontend/app/urql.tsx @@ -59,7 +59,6 @@ const modusSSEExchange = subscriptionExchange({ if (currentEvent === "next" && currentData) { try { const parsedData = JSON.parse(currentData) - console.log("Received subscription data:", parsedData) sink.next(parsedData) } catch (error) { console.error("Failed to parse SSE data:", error, "Raw data:", currentData) @@ -67,8 +66,6 @@ const modusSSEExchange = subscriptionExchange({ } else if (currentEvent === "complete") { sink.complete() return - } else if (currentEvent === "ack") { - console.log("Subscription acknowledged") } // Reset for next event diff --git a/agent-events/modus/main.go b/agent-events/modus/main.go index e602add..f03d077 100644 --- a/agent-events/modus/main.go +++ b/agent-events/modus/main.go @@ -24,16 +24,9 @@ type ThemedAgent struct { } // Agent event types that will be published -type ThemeEvent struct { - EventType string `json:"eventType"` - Title string `json:"title"` - Description string `json:"description"` - Severity string `json:"severity"` - Location string `json:"location,omitempty"` - Data map[string]interface{} `json:"data,omitempty"` -} +type FlexibleThemeEvent map[string]interface{} -func (e ThemeEvent) EventName() string { +func (e FlexibleThemeEvent) EventName() string { return "theme_event" } @@ -66,7 +59,7 @@ func (a *ThemedAgent) Name() string { } func (a *ThemedAgent) OnInitialize() error { - a.MaxEvents = 10 + a.MaxEvents = 100 a.EventCount = 0 a.StartTime = time.Now() a.IsActive = true @@ -86,13 +79,6 @@ func (a *ThemedAgent) OnInitialize() error { func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*string, error) { switch messageName { - case "set_agent_id": - if data != nil && *data != "" { - a.AgentId = *data - result := fmt.Sprintf("Agent ID set: %s", a.AgentId) - return &result, nil - } - return nil, fmt.Errorf("agent ID data is required") case "initialize_theme": if data != nil && *data != "" { a.Theme = *data @@ -104,8 +90,6 @@ func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*strin return a.startEventGeneration() case "start_rapid_generation": return a.startRapidGeneration() - case "start_auto_generation": - return a.startAutoGeneration() case "get_status": return a.getStatus() case "stop": @@ -182,7 +166,7 @@ func (a *ThemedAgent) startEventGeneration() (*string, error) { } // Publish the themed event - err = a.PublishEvent(*event) + err = a.PublishEvent(event) if err != nil { return nil, fmt.Errorf("failed to publish event: %w", err) } @@ -192,13 +176,15 @@ func (a *ThemedAgent) startEventGeneration() (*string, error) { // Publish status update elapsed := time.Since(a.StartTime) - err = a.PublishEvent(AgentStatusEvent{ + statusEvent := AgentStatusEvent{ Status: "generating", EventCount: a.EventCount, MaxEvents: a.MaxEvents, Theme: a.Theme, TimeElapsed: elapsed.Round(time.Second).String(), - }) + } + + err = a.PublishEvent(statusEvent) if err != nil { return nil, fmt.Errorf("failed to publish status: %w", err) } @@ -239,33 +225,6 @@ func (a *ThemedAgent) startRapidGeneration() (*string, error) { return result, nil } -// New method for auto generation (continues until complete) -func (a *ThemedAgent) startAutoGeneration() (*string, error) { - if !a.IsActive { - result := "Agent is not active" - return &result, nil - } - - if a.EventCount >= a.MaxEvents { - result := "Agent has completed all events" - return &result, nil - } - - // Generate one event - result, err := a.startEventGeneration() - if err != nil { - return nil, err - } - - // If we haven't completed yet, trigger the next auto event - if a.IsActive && a.EventCount < a.MaxEvents && a.AgentId != "" { - // Send async message to continue auto generation - agents.SendMessageAsync(a.AgentId, "start_auto_generation") - } - - return result, nil -} - func (a *ThemedAgent) completeGeneration() (*string, error) { a.IsActive = false duration := time.Since(a.StartTime) @@ -285,7 +244,7 @@ func (a *ThemedAgent) completeGeneration() (*string, error) { return &result, nil } -func (a *ThemedAgent) generateThemeEvent() (*ThemeEvent, error) { +func (a *ThemedAgent) generateThemeEvent() (FlexibleThemeEvent, error) { model, err := models.GetModel[openai.ChatModel]("text-generator") if err != nil { return nil, err @@ -295,25 +254,26 @@ func (a *ThemedAgent) generateThemeEvent() (*ThemeEvent, error) { Generate a realistic pseudo-event that fits this theme. The event should be interesting and dramatic but fictional. -Respond with ONLY a JSON object in this exact format: +Respond with ONLY a JSON object with these required fields plus any additional relevant fields: { "eventType": "type of event (e.g. security_breach, mission_update, system_alert)", "title": "Brief event title", "description": "Detailed description of what happened", "severity": "LOW, MEDIUM, HIGH, or CRITICAL", "location": "where this event occurred (optional)", - "data": { - "additional": "relevant data fields as key-value pairs" - } + "additionalField1": "any other relevant data", + "additionalField2": "more relevant data" } -Make it creative and thematic to "%s" but keep it as valid JSON.`, a.Theme, a.Theme) +Make it creative and thematic to "%s". Add 2-4 additional fields that make sense for the event type and theme. Use flat structure - no nested objects.`, a.Theme, a.Theme) input, err := model.CreateInput( - openai.NewSystemMessage("You are a creative event generator. Always respond with valid JSON only."), + openai.NewSystemMessage("You are a creative event generator. Always respond with valid JSON only. Use flat structure - no nested objects."), openai.NewUserMessage(prompt), ) if err != nil { + // log the error and return a fallback event + fmt.Printf("Error creating model input: %v\n", err) return nil, err } @@ -326,27 +286,14 @@ Make it creative and thematic to "%s" but keep it as valid JSON.`, a.Theme, a.Th content := strings.TrimSpace(output.Choices[0].Message.Content) - // Parse the JSON response - var event ThemeEvent - err = json.Unmarshal([]byte(content), &event) + var eventData map[string]interface{} + err = json.Unmarshal([]byte(content), &eventData) if err != nil { - // Fallback event if JSON parsing fails - event = ThemeEvent{ - EventType: "generation_event", - Title: fmt.Sprintf("%s Event #%d", strings.Title(a.Theme), a.EventCount+1), - Description: fmt.Sprintf("A %s-themed event occurred during the simulation.", a.Theme), - Severity: "MEDIUM", - Location: "Unknown", - Data: map[string]interface{}{ - "theme": a.Theme, - "event_number": a.EventCount + 1, - "generated_at": time.Now().Format(time.RFC3339), - "parsing_error": err.Error(), - }, - } + return nil, fmt.Errorf("failed to parse event JSON: %w", err) } - return &event, nil + event := FlexibleThemeEvent(eventData) + return event, nil } func (a *ThemedAgent) getStatus() (*string, error) { @@ -401,12 +348,6 @@ func CreateAgent() (string, error) { return "", err } - // Set the agent ID in the agent itself - _, err = agents.SendMessage(agentInfo.Id, "set_agent_id", agents.WithData(agentInfo.Id)) - if err != nil { - return "", fmt.Errorf("failed to set agent ID: %w", err) - } - return agentInfo.Id, nil } @@ -429,7 +370,7 @@ func UpdateAgentTheme(agentId string, theme string) (string, error) { } // StartEventGeneration triggers a single event -func StartEventGeneration(agentId string) (string, error) { +func MutateStartEventGeneration(agentId string) (string, error) { err := agents.SendMessageAsync(agentId, "start_generation") if err != nil { return "", err @@ -438,7 +379,7 @@ func StartEventGeneration(agentId string) (string, error) { } // StartRapidGeneration triggers rapid event generation (self-managing) -func StartRapidGeneration(agentId string) (string, error) { +func MutateStartRapidGeneration(agentId string) (string, error) { err := agents.SendMessageAsync(agentId, "start_rapid_generation") if err != nil { return "", err @@ -473,28 +414,3 @@ func StopAgent(agentId string) (string, error) { func Agents() ([]agents.AgentInfo, error) { return agents.ListAll() } - -// AutoRunAgent creates an agent, sets theme, and starts auto-generation -func AutoRunAgent(theme string) (string, error) { - // Create the agent - agentId, err := CreateAgent() - if err != nil { - return "", err - } - - // Set the theme - _, err = UpdateAgentTheme(agentId, theme) - if err != nil { - // If theme setting fails, stop the agent - agents.Stop(agentId) - return "", fmt.Errorf("failed to setup agent theme: %w", err) - } - - // Start auto-generation (agent will self-manage the rest) - err = agents.SendMessageAsync(agentId, "start_auto_generation") - if err != nil { - return "", fmt.Errorf("failed to start auto generation: %w", err) - } - - return fmt.Sprintf("Auto-running agent created with ID: %s and theme '%s'. Auto-generation started.", agentId, theme), nil -} From a5d95296f24d755772e0da0d5c51d553c87aec98 Mon Sep 17 00:00:00 2001 From: danstarns Date: Wed, 11 Jun 2025 14:40:51 +0700 Subject: [PATCH 03/12] * --- agent-events/modus/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/agent-events/modus/main.go b/agent-events/modus/main.go index f03d077..4d24bf4 100644 --- a/agent-events/modus/main.go +++ b/agent-events/modus/main.go @@ -27,6 +27,9 @@ type ThemedAgent struct { type FlexibleThemeEvent map[string]interface{} func (e FlexibleThemeEvent) EventName() string { + if eventType, ok := e["eventType"].(string); ok && eventType != "" { + return eventType + } return "theme_event" } From 365807906ff69547956daff07bb48d7b9b4c3c07 Mon Sep 17 00:00:00 2001 From: danstarns Date: Wed, 11 Jun 2025 15:07:22 +0700 Subject: [PATCH 04/12] * --- agent-events/frontend/app/page.tsx | 24 -- agent-events/modus/agent.go | 288 +++++++++++++++++++++++ agent-events/modus/go.mod | 2 +- agent-events/modus/go.sum | 4 +- agent-events/modus/main.go | 354 ----------------------------- 5 files changed, 291 insertions(+), 381 deletions(-) create mode 100644 agent-events/modus/agent.go diff --git a/agent-events/frontend/app/page.tsx b/agent-events/frontend/app/page.tsx index 4c7d9d7..bb9bc7d 100644 --- a/agent-events/frontend/app/page.tsx +++ b/agent-events/frontend/app/page.tsx @@ -70,12 +70,6 @@ const START_EVENT_GENERATION_MUTATION = ` } ` -const START_RAPID_GENERATION_MUTATION = ` - mutation StartRapidGeneration($agentId: String!) { - mutateStartRapidGeneration(agentId: $agentId) - } -` - function AgentEventSubscription({ agentId, onEvent, @@ -118,7 +112,6 @@ export default function Page() { const [, createAgent] = useMutation(CREATE_AGENT) const [, setTheme] = useMutation(SET_AGENT_THEME_MUTATION) const [, startEventGeneration] = useMutation(START_EVENT_GENERATION_MUTATION) - const [, startRapidGeneration] = useMutation(START_RAPID_GENERATION_MUTATION) const getEventType = useCallback( (eventName: string): "info" | "warning" | "success" | "error" => { @@ -315,16 +308,6 @@ export default function Page() { )}
- -
-

- Create: Manual control with +1 Event and +5 Rapid buttons -

-

- Auto-Run: Creates agent, sets theme, and generates 10 events - automatically -

-
@@ -374,13 +357,6 @@ export default function Page() { > +1 Event - ))} diff --git a/agent-events/modus/agent.go b/agent-events/modus/agent.go new file mode 100644 index 0000000..0138efb --- /dev/null +++ b/agent-events/modus/agent.go @@ -0,0 +1,288 @@ +package main + +import ( + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/hypermodeinc/modus/sdk/go/pkg/agents" + "github.com/hypermodeinc/modus/sdk/go/pkg/models" + "github.com/hypermodeinc/modus/sdk/go/pkg/models/openai" +) + +type ThemedAgent struct { + agents.AgentBase + AgentId string `json:"agent_id"` + Theme string `json:"theme"` + EventCount int `json:"event_count"` + MaxEvents int `json:"max_events"` + StartTime time.Time `json:"start_time"` + IsActive bool `json:"is_active"` + LastEventTime time.Time `json:"last_event_time"` +} + +type FlexibleThemeEvent map[string]interface{} + +func (e FlexibleThemeEvent) EventName() string { + if eventType, ok := e["eventType"].(string); ok && eventType != "" { + return eventType + } + + if title, ok := e["title"].(string); ok && title != "" { + return strings.ToLower(strings.ReplaceAll(title, " ", "_")) + } + + return "theme_event" +} + +type AgentStatusEvent struct { + Status string `json:"status"` + EventCount int `json:"eventCount"` + MaxEvents int `json:"maxEvents"` + Theme string `json:"theme"` + TimeElapsed string `json:"timeElapsed"` +} + +func (e AgentStatusEvent) EventName() string { + return "agent_status" +} + +func (a *ThemedAgent) Name() string { + return "ThemedAgent" +} + +func (a *ThemedAgent) OnInitialize() error { + a.MaxEvents = 100 + a.EventCount = 0 + a.StartTime = time.Now() + a.IsActive = true + a.LastEventTime = time.Now() + + err := a.PublishEvent(AgentStatusEvent{ + Status: "initialized", + EventCount: 0, + MaxEvents: a.MaxEvents, + Theme: a.Theme, + TimeElapsed: "0s", + }) + + return err +} + +func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*string, error) { + switch messageName { + case "initialize_theme": + if data != nil && *data != "" { + a.Theme = *data + result := fmt.Sprintf("Agent initialized with theme: %s", a.Theme) + return &result, nil + } + return nil, fmt.Errorf("theme data is required") + case "start_generation": + return a.startEventGeneration() + case "get_status": + return a.getStatus() + case "stop": + return a.stopGeneration() + default: + return nil, fmt.Errorf("unknown message: %s", messageName) + } +} + +func (a *ThemedAgent) GetState() *string { + state := map[string]interface{}{ + "agent_id": a.AgentId, + "theme": a.Theme, + "event_count": a.EventCount, + "max_events": a.MaxEvents, + "start_time": a.StartTime.Unix(), + "is_active": a.IsActive, + "last_event_time": a.LastEventTime.Unix(), + } + + stateBytes, _ := json.Marshal(state) + stateStr := string(stateBytes) + return &stateStr +} + +func (a *ThemedAgent) SetState(data *string) { + if data == nil || *data == "" { + return + } + + var state map[string]interface{} + if err := json.Unmarshal([]byte(*data), &state); err != nil { + return + } + + if agentId, ok := state["agent_id"].(string); ok { + a.AgentId = agentId + } + if theme, ok := state["theme"].(string); ok { + a.Theme = theme + } + if count, ok := state["event_count"].(float64); ok { + a.EventCount = int(count) + } + if maxEvents, ok := state["max_events"].(float64); ok { + a.MaxEvents = int(maxEvents) + } + if startTime, ok := state["start_time"].(float64); ok { + a.StartTime = time.Unix(int64(startTime), 0) + } + if isActive, ok := state["is_active"].(bool); ok { + a.IsActive = isActive + } + if lastEventTime, ok := state["last_event_time"].(float64); ok { + a.LastEventTime = time.Unix(int64(lastEventTime), 0) + } +} + +func (a *ThemedAgent) startEventGeneration() (*string, error) { + if !a.IsActive { + result := "Agent is not active" + return &result, nil + } + + if a.EventCount >= a.MaxEvents { + result := "Agent has completed all events" + return &result, nil + } + + event, err := a.generateThemeEvent() + if err != nil { + return nil, fmt.Errorf("failed to generate event: %w", err) + } + + err = a.PublishEvent(event) + if err != nil { + return nil, fmt.Errorf("failed to publish event: %w", err) + } + + a.EventCount++ + a.LastEventTime = time.Now() + + elapsed := time.Since(a.StartTime) + statusEvent := AgentStatusEvent{ + Status: "generating", + EventCount: a.EventCount, + MaxEvents: a.MaxEvents, + Theme: a.Theme, + TimeElapsed: elapsed.Round(time.Second).String(), + } + + err = a.PublishEvent(statusEvent) + if err != nil { + return nil, fmt.Errorf("failed to publish status: %w", err) + } + + result := fmt.Sprintf("Generated event %d/%d for theme: %s", a.EventCount, a.MaxEvents, a.Theme) + return &result, nil +} + +func (a *ThemedAgent) generateThemeEvent() (FlexibleThemeEvent, error) { + model, err := models.GetModel[openai.ChatModel]("text-generator") + if err != nil { + return nil, err + } + + prompt := fmt.Sprintf(`You are an event generator for the theme "%s". +Generate a realistic pseudo-event that fits this theme. + +IMPORTANT: The "eventType" field will be used as the event name, so make it descriptive like "security_breach", "system_malfunction", "mission_update", etc. + +Respond with ONLY a JSON object like this: +{ + "eventType": "descriptive_event_name_here", + "title": "Brief event title", + "description": "Detailed description of what happened", + "severity": "LOW, MEDIUM, HIGH, or CRITICAL", + "location": "where this event occurred (optional)", + "additionalField1": "any other relevant data", + "additionalField2": "more relevant data" +} + +Make it creative and thematic to "%s". Add 2-4 additional fields that make sense for the event type and theme. Keep structure flat - no nested objects.`, a.Theme, a.Theme) + + input, err := model.CreateInput( + openai.NewSystemMessage("You are a creative event generator. Always respond with valid JSON only. Use flat structure - no nested objects."), + openai.NewUserMessage(prompt), + ) + if err != nil { + fmt.Printf("Error creating model input: %v\n", err) + return nil, err + } + + input.Temperature = 0.8 + + output, err := model.Invoke(input) + if err != nil { + return nil, err + } + + content := strings.TrimSpace(output.Choices[0].Message.Content) + + var eventData map[string]interface{} + err = json.Unmarshal([]byte(content), &eventData) + if err != nil { + return nil, fmt.Errorf("failed to parse event JSON: %w", err) + } + + // Create the event and ensure it has the correct structure + event := FlexibleThemeEvent(eventData) + + // Ensure we have an eventType at the root level for EventName() to work + if _, hasEventType := event["eventType"]; !hasEventType { + // If no eventType, try to derive it from title or use a default + if title, ok := event["title"].(string); ok { + event["eventType"] = strings.ToLower(strings.ReplaceAll(title, " ", "_")) + } else { + event["eventType"] = "theme_event" + } + } + + return event, nil +} + +func (a *ThemedAgent) getStatus() (*string, error) { + status := map[string]interface{}{ + "agent_id": a.AgentId, + "theme": a.Theme, + "event_count": a.EventCount, + "max_events": a.MaxEvents, + "is_active": a.IsActive, + "elapsed": time.Since(a.StartTime).Round(time.Second).String(), + "progress": float64(a.EventCount) / float64(a.MaxEvents), + } + + statusBytes, err := json.Marshal(status) + if err != nil { + return nil, err + } + + result := string(statusBytes) + return &result, nil +} + +func (a *ThemedAgent) stopGeneration() (*string, error) { + a.IsActive = false + + err := a.PublishEvent(AgentStatusEvent{ + Status: "stopped", + EventCount: a.EventCount, + MaxEvents: a.MaxEvents, + Theme: a.Theme, + TimeElapsed: time.Since(a.StartTime).Round(time.Second).String(), + }) + if err != nil { + return nil, err + } + + result := fmt.Sprintf("Agent stopped. Generated %d/%d events for theme: %s", a.EventCount, a.MaxEvents, a.Theme) + return &result, nil +} + +func init() { + agents.Register(&ThemedAgent{}) +} diff --git a/agent-events/modus/go.mod b/agent-events/modus/go.mod index e8c3900..015b203 100644 --- a/agent-events/modus/go.mod +++ b/agent-events/modus/go.mod @@ -2,7 +2,7 @@ module modus go 1.24.2 -require github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.5 +require github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.6 require ( github.com/tidwall/gjson v1.18.0 // indirect diff --git a/agent-events/modus/go.sum b/agent-events/modus/go.sum index 28b3f75..fd103fd 100644 --- a/agent-events/modus/go.sum +++ b/agent-events/modus/go.sum @@ -1,5 +1,5 @@ -github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.5 h1:Zl9f9ssdyCs/EuNiLDXyoLpwBM9upIYIfJvS0BQuFQ8= -github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.5/go.mod h1:WX/57csiUC+LYaROkVo0bIPiG8jkQRxwD4Ajb7a0s6A= +github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.6 h1:8fZkA5lORW5ayf4EUtWKLhpOPJ63s9n+dThWSLzPuvY= +github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.6/go.mod h1:mIHmDGQb2UDCT/9McFbHp3jdvv07EIyeGtqHOCVVkqo= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= diff --git a/agent-events/modus/main.go b/agent-events/modus/main.go index 4d24bf4..cba56dd 100644 --- a/agent-events/modus/main.go +++ b/agent-events/modus/main.go @@ -1,350 +1,11 @@ package main import ( - "encoding/json" "fmt" - "strings" - "time" "github.com/hypermodeinc/modus/sdk/go/pkg/agents" - "github.com/hypermodeinc/modus/sdk/go/pkg/models" - "github.com/hypermodeinc/modus/sdk/go/pkg/models/openai" ) -// ThemedAgent generates events based on a specific theme -type ThemedAgent struct { - agents.AgentBase - AgentId string `json:"agent_id"` - Theme string `json:"theme"` - EventCount int `json:"event_count"` - MaxEvents int `json:"max_events"` - StartTime time.Time `json:"start_time"` - IsActive bool `json:"is_active"` - LastEventTime time.Time `json:"last_event_time"` -} - -// Agent event types that will be published -type FlexibleThemeEvent map[string]interface{} - -func (e FlexibleThemeEvent) EventName() string { - if eventType, ok := e["eventType"].(string); ok && eventType != "" { - return eventType - } - return "theme_event" -} - -type AgentStatusEvent struct { - Status string `json:"status"` - EventCount int `json:"eventCount"` - MaxEvents int `json:"maxEvents"` - Theme string `json:"theme"` - TimeElapsed string `json:"timeElapsed"` -} - -func (e AgentStatusEvent) EventName() string { - return "agent_status" -} - -type AgentCompletedEvent struct { - Theme string `json:"theme"` - TotalEvents int `json:"totalEvents"` - Duration string `json:"duration"` - FinalMessage string `json:"finalMessage"` -} - -func (e AgentCompletedEvent) EventName() string { - return "agent_completed" -} - -// Agent implementation -func (a *ThemedAgent) Name() string { - return "ThemedAgent" -} - -func (a *ThemedAgent) OnInitialize() error { - a.MaxEvents = 100 - a.EventCount = 0 - a.StartTime = time.Now() - a.IsActive = true - a.LastEventTime = time.Now() - - // Publish initialization event - err := a.PublishEvent(AgentStatusEvent{ - Status: "initialized", - EventCount: 0, - MaxEvents: a.MaxEvents, - Theme: a.Theme, - TimeElapsed: "0s", - }) - - return err -} - -func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*string, error) { - switch messageName { - case "initialize_theme": - if data != nil && *data != "" { - a.Theme = *data - result := fmt.Sprintf("Agent initialized with theme: %s", a.Theme) - return &result, nil - } - return nil, fmt.Errorf("theme data is required") - case "start_generation": - return a.startEventGeneration() - case "start_rapid_generation": - return a.startRapidGeneration() - case "get_status": - return a.getStatus() - case "stop": - return a.stopGeneration() - default: - return nil, fmt.Errorf("unknown message: %s", messageName) - } -} - -func (a *ThemedAgent) GetState() *string { - state := map[string]interface{}{ - "agent_id": a.AgentId, - "theme": a.Theme, - "event_count": a.EventCount, - "max_events": a.MaxEvents, - "start_time": a.StartTime.Unix(), - "is_active": a.IsActive, - "last_event_time": a.LastEventTime.Unix(), - } - - stateBytes, _ := json.Marshal(state) - stateStr := string(stateBytes) - return &stateStr -} - -func (a *ThemedAgent) SetState(data *string) { - if data == nil || *data == "" { - return - } - - var state map[string]interface{} - if err := json.Unmarshal([]byte(*data), &state); err != nil { - return - } - - if agentId, ok := state["agent_id"].(string); ok { - a.AgentId = agentId - } - if theme, ok := state["theme"].(string); ok { - a.Theme = theme - } - if count, ok := state["event_count"].(float64); ok { - a.EventCount = int(count) - } - if maxEvents, ok := state["max_events"].(float64); ok { - a.MaxEvents = int(maxEvents) - } - if startTime, ok := state["start_time"].(float64); ok { - a.StartTime = time.Unix(int64(startTime), 0) - } - if isActive, ok := state["is_active"].(bool); ok { - a.IsActive = isActive - } - if lastEventTime, ok := state["last_event_time"].(float64); ok { - a.LastEventTime = time.Unix(int64(lastEventTime), 0) - } -} - -func (a *ThemedAgent) startEventGeneration() (*string, error) { - if !a.IsActive { - result := "Agent is not active" - return &result, nil - } - - if a.EventCount >= a.MaxEvents { - result := "Agent has completed all events" - return &result, nil - } - - // Generate and publish event - event, err := a.generateThemeEvent() - if err != nil { - return nil, fmt.Errorf("failed to generate event: %w", err) - } - - // Publish the themed event - err = a.PublishEvent(event) - if err != nil { - return nil, fmt.Errorf("failed to publish event: %w", err) - } - - a.EventCount++ - a.LastEventTime = time.Now() - - // Publish status update - elapsed := time.Since(a.StartTime) - statusEvent := AgentStatusEvent{ - Status: "generating", - EventCount: a.EventCount, - MaxEvents: a.MaxEvents, - Theme: a.Theme, - TimeElapsed: elapsed.Round(time.Second).String(), - } - - err = a.PublishEvent(statusEvent) - if err != nil { - return nil, fmt.Errorf("failed to publish status: %w", err) - } - - // Check if we've reached the limit - if a.EventCount >= a.MaxEvents { - return a.completeGeneration() - } - - result := fmt.Sprintf("Generated event %d/%d for theme: %s", a.EventCount, a.MaxEvents, a.Theme) - return &result, nil -} - -// New method for rapid generation (5 events in sequence) -func (a *ThemedAgent) startRapidGeneration() (*string, error) { - if !a.IsActive { - result := "Agent is not active" - return &result, nil - } - - if a.EventCount >= a.MaxEvents { - result := "Agent has completed all events" - return &result, nil - } - - // Generate one event first - result, err := a.startEventGeneration() - if err != nil { - return nil, err - } - - // If we haven't completed yet, trigger the next rapid event - if a.IsActive && a.EventCount < a.MaxEvents && a.AgentId != "" { - // Send async message to continue rapid generation - agents.SendMessageAsync(a.AgentId, "start_generation") - } - - return result, nil -} - -func (a *ThemedAgent) completeGeneration() (*string, error) { - a.IsActive = false - duration := time.Since(a.StartTime) - - // Publish completion event - err := a.PublishEvent(AgentCompletedEvent{ - Theme: a.Theme, - TotalEvents: a.EventCount, - Duration: duration.Round(time.Second).String(), - FinalMessage: fmt.Sprintf("Completed %d themed events for '%s' in %v", a.EventCount, a.Theme, duration.Round(time.Second)), - }) - if err != nil { - return nil, fmt.Errorf("failed to publish completion: %w", err) - } - - result := fmt.Sprintf("Agent completed! Generated %d events for theme '%s' in %v", a.EventCount, a.Theme, duration.Round(time.Second)) - return &result, nil -} - -func (a *ThemedAgent) generateThemeEvent() (FlexibleThemeEvent, error) { - model, err := models.GetModel[openai.ChatModel]("text-generator") - if err != nil { - return nil, err - } - - prompt := fmt.Sprintf(`You are an event generator for the theme "%s". -Generate a realistic pseudo-event that fits this theme. - -The event should be interesting and dramatic but fictional. -Respond with ONLY a JSON object with these required fields plus any additional relevant fields: -{ - "eventType": "type of event (e.g. security_breach, mission_update, system_alert)", - "title": "Brief event title", - "description": "Detailed description of what happened", - "severity": "LOW, MEDIUM, HIGH, or CRITICAL", - "location": "where this event occurred (optional)", - "additionalField1": "any other relevant data", - "additionalField2": "more relevant data" -} - -Make it creative and thematic to "%s". Add 2-4 additional fields that make sense for the event type and theme. Use flat structure - no nested objects.`, a.Theme, a.Theme) - - input, err := model.CreateInput( - openai.NewSystemMessage("You are a creative event generator. Always respond with valid JSON only. Use flat structure - no nested objects."), - openai.NewUserMessage(prompt), - ) - if err != nil { - // log the error and return a fallback event - fmt.Printf("Error creating model input: %v\n", err) - return nil, err - } - - input.Temperature = 0.8 // Higher temperature for creativity - - output, err := model.Invoke(input) - if err != nil { - return nil, err - } - - content := strings.TrimSpace(output.Choices[0].Message.Content) - - var eventData map[string]interface{} - err = json.Unmarshal([]byte(content), &eventData) - if err != nil { - return nil, fmt.Errorf("failed to parse event JSON: %w", err) - } - - event := FlexibleThemeEvent(eventData) - return event, nil -} - -func (a *ThemedAgent) getStatus() (*string, error) { - status := map[string]interface{}{ - "agent_id": a.AgentId, - "theme": a.Theme, - "event_count": a.EventCount, - "max_events": a.MaxEvents, - "is_active": a.IsActive, - "elapsed": time.Since(a.StartTime).Round(time.Second).String(), - "progress": float64(a.EventCount) / float64(a.MaxEvents), - } - - statusBytes, err := json.Marshal(status) - if err != nil { - return nil, err - } - - result := string(statusBytes) - return &result, nil -} - -func (a *ThemedAgent) stopGeneration() (*string, error) { - a.IsActive = false - - err := a.PublishEvent(AgentStatusEvent{ - Status: "stopped", - EventCount: a.EventCount, - MaxEvents: a.MaxEvents, - Theme: a.Theme, - TimeElapsed: time.Since(a.StartTime).Round(time.Second).String(), - }) - if err != nil { - return nil, err - } - - result := fmt.Sprintf("Agent stopped. Generated %d/%d events for theme: %s", a.EventCount, a.MaxEvents, a.Theme) - return &result, nil -} - -// Register the agent -func init() { - agents.Register(&ThemedAgent{}) -} - -// Public functions that become GraphQL mutations/queries - -// CreateAgent creates a new agent and returns just the ID func CreateAgent() (string, error) { agentInfo, err := agents.Start("ThemedAgent") if err != nil { @@ -354,7 +15,6 @@ func CreateAgent() (string, error) { return agentInfo.Id, nil } -// SetTheme sets the theme for an existing agent func UpdateAgentTheme(agentId string, theme string) (string, error) { if theme == "" { return "", fmt.Errorf("theme cannot be empty") @@ -372,7 +32,6 @@ func UpdateAgentTheme(agentId string, theme string) (string, error) { return *result, nil } -// StartEventGeneration triggers a single event func MutateStartEventGeneration(agentId string) (string, error) { err := agents.SendMessageAsync(agentId, "start_generation") if err != nil { @@ -381,16 +40,6 @@ func MutateStartEventGeneration(agentId string) (string, error) { return fmt.Sprintf("Event generation triggered for agent: %s", agentId), nil } -// StartRapidGeneration triggers rapid event generation (self-managing) -func MutateStartRapidGeneration(agentId string) (string, error) { - err := agents.SendMessageAsync(agentId, "start_rapid_generation") - if err != nil { - return "", err - } - return fmt.Sprintf("Rapid event generation started for agent: %s", agentId), nil -} - -// GetAgentStatus returns the current status of an agent func GetAgentStatus(agentId string) (string, error) { result, err := agents.SendMessage(agentId, "get_status") if err != nil { @@ -402,9 +51,7 @@ func GetAgentStatus(agentId string) (string, error) { return *result, nil } -// StopAgent stops an agent's event generation asynchronously func StopAgent(agentId string) (string, error) { - // Use async message to stop the agent err := agents.SendMessageAsync(agentId, "stop") if err != nil { return "", err @@ -413,7 +60,6 @@ func StopAgent(agentId string) (string, error) { return fmt.Sprintf("Stop signal sent to agent: %s", agentId), nil } -// Agents returns all active agents (renamed from ListAgents to match GraphQL field name) func Agents() ([]agents.AgentInfo, error) { return agents.ListAll() } From f99c7667ee30f0c89d09d959e232276b46a1bbf8 Mon Sep 17 00:00:00 2001 From: danstarns Date: Wed, 11 Jun 2025 15:08:33 +0700 Subject: [PATCH 05/12] * --- agent-events/frontend/app/urql.tsx | 108 +++++------------------------ 1 file changed, 18 insertions(+), 90 deletions(-) diff --git a/agent-events/frontend/app/urql.tsx b/agent-events/frontend/app/urql.tsx index 065a86a..73eef2f 100644 --- a/agent-events/frontend/app/urql.tsx +++ b/agent-events/frontend/app/urql.tsx @@ -1,102 +1,30 @@ "use client" import { createClient, Provider, cacheExchange, fetchExchange, subscriptionExchange } from "urql" +import { createClient as createSSEClient } from "graphql-sse" -const modusSSEExchange = subscriptionExchange({ - forwardSubscription(request) { - return { - subscribe(sink) { - const controller = new AbortController() - - const runSubscription = async () => { - try { - const response = await fetch("http://localhost:8686/graphql", { - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "text/event-stream", - }, - body: JSON.stringify({ - query: request.query, - variables: request.variables, - }), - signal: controller.signal, - }) - - if (!response.ok) { - throw new Error(`HTTP ${response.status}: ${response.statusText}`) - } - - const reader = response.body?.getReader() - if (!reader) { - throw new Error("No response body") - } - - const decoder = new TextDecoder() - let buffer = "" - - while (true) { - const { done, value } = await reader.read() - - if (done) break - - buffer += decoder.decode(value, { stream: true }) - const lines = buffer.split("\n") - - // Keep the last incomplete line in the buffer - buffer = lines.pop() || "" - - let currentEvent = "" - let currentData = "" - - for (const line of lines) { - if (line.startsWith("event: ")) { - currentEvent = line.slice(7).trim() - } else if (line.startsWith("data: ")) { - currentData = line.slice(6) - } else if (line === "") { - // End of event - process if it's a "next" event with data - if (currentEvent === "next" && currentData) { - try { - const parsedData = JSON.parse(currentData) - sink.next(parsedData) - } catch (error) { - console.error("Failed to parse SSE data:", error, "Raw data:", currentData) - } - } else if (currentEvent === "complete") { - sink.complete() - return - } - - // Reset for next event - currentEvent = "" - currentData = "" - } - } - } - } catch (error) { - if (error.name !== "AbortError") { - console.error("SSE subscription error:", error) - sink.error(error) - } - } - } - - runSubscription() +const sseClient = createSSEClient({ + url: "http://localhost:8686/graphql", +}) +export const client = createClient({ + url: "http://localhost:8686/graphql", + exchanges: [ + cacheExchange, + fetchExchange, + subscriptionExchange({ + forwardSubscription(operation) { return { - unsubscribe() { - controller.abort() + subscribe: (sink) => { + const dispose = sseClient.subscribe(operation, sink) + return { + unsubscribe: dispose, + } }, } }, - } - }, -}) - -const client = createClient({ - url: "http://localhost:8686/graphql", - exchanges: [cacheExchange, fetchExchange, modusSSEExchange], + }), + ], }) interface GraphQLProviderProps { From 966ffc9d9917d5889a332d96bdd40ce893812cc4 Mon Sep 17 00:00:00 2001 From: danstarns Date: Wed, 11 Jun 2025 23:41:13 +0700 Subject: [PATCH 06/12] * --- agent-events/modus/agent.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/agent-events/modus/agent.go b/agent-events/modus/agent.go index 0138efb..9e0f251 100644 --- a/agent-events/modus/agent.go +++ b/agent-events/modus/agent.go @@ -150,16 +150,6 @@ func (a *ThemedAgent) startEventGeneration() (*string, error) { return &result, nil } - event, err := a.generateThemeEvent() - if err != nil { - return nil, fmt.Errorf("failed to generate event: %w", err) - } - - err = a.PublishEvent(event) - if err != nil { - return nil, fmt.Errorf("failed to publish event: %w", err) - } - a.EventCount++ a.LastEventTime = time.Now() @@ -172,11 +162,21 @@ func (a *ThemedAgent) startEventGeneration() (*string, error) { TimeElapsed: elapsed.Round(time.Second).String(), } - err = a.PublishEvent(statusEvent) + err := a.PublishEvent(statusEvent) if err != nil { return nil, fmt.Errorf("failed to publish status: %w", err) } + event, err := a.generateThemeEvent() + if err != nil { + return nil, fmt.Errorf("failed to generate event: %w", err) + } + + err = a.PublishEvent(event) + if err != nil { + return nil, fmt.Errorf("failed to publish event: %w", err) + } + result := fmt.Sprintf("Generated event %d/%d for theme: %s", a.EventCount, a.MaxEvents, a.Theme) return &result, nil } From 5b7d5d10d1c9a82a326d0d67ec1f8c8003d457ed Mon Sep 17 00:00:00 2001 From: danstarns Date: Thu, 12 Jun 2025 12:39:25 +0700 Subject: [PATCH 07/12] modus v0.18.0-alpha.7 --- agent-events/modus/go.mod | 2 +- agent-events/modus/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent-events/modus/go.mod b/agent-events/modus/go.mod index 015b203..5a83d48 100644 --- a/agent-events/modus/go.mod +++ b/agent-events/modus/go.mod @@ -2,7 +2,7 @@ module modus go 1.24.2 -require github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.6 +require github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.7 require ( github.com/tidwall/gjson v1.18.0 // indirect diff --git a/agent-events/modus/go.sum b/agent-events/modus/go.sum index fd103fd..d835c2d 100644 --- a/agent-events/modus/go.sum +++ b/agent-events/modus/go.sum @@ -1,5 +1,5 @@ -github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.6 h1:8fZkA5lORW5ayf4EUtWKLhpOPJ63s9n+dThWSLzPuvY= -github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.6/go.mod h1:mIHmDGQb2UDCT/9McFbHp3jdvv07EIyeGtqHOCVVkqo= +github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.7 h1:q19+G8lc6thQNHTWin0i1zbz8GmGBg6z4Exb3rLZuMQ= +github.com/hypermodeinc/modus/sdk/go v0.18.0-alpha.7/go.mod h1:mIHmDGQb2UDCT/9McFbHp3jdvv07EIyeGtqHOCVVkqo= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= From e05bbf92c5411beac5603c28cd787a69ccf6b7d8 Mon Sep 17 00:00:00 2001 From: danstarns Date: Thu, 12 Jun 2025 13:10:32 +0700 Subject: [PATCH 08/12] * --- agent-events/frontend/app/page.tsx | 100 ++++++++++++++++++----------- agent-events/modus/agent.go | 37 +++-------- agent-events/modus/main.go | 24 +++---- 3 files changed, 80 insertions(+), 81 deletions(-) diff --git a/agent-events/frontend/app/page.tsx b/agent-events/frontend/app/page.tsx index bb9bc7d..903c2d6 100644 --- a/agent-events/frontend/app/page.tsx +++ b/agent-events/frontend/app/page.tsx @@ -13,6 +13,7 @@ import { WifiOff, Plus, Play, + Square, } from "lucide-react" interface AgentEvent { @@ -52,15 +53,9 @@ const GET_ALL_AGENTS_QUERY = ` } ` -const CREATE_AGENT = ` - mutation CreateAgent { - createAgent - } -` - -const SET_AGENT_THEME_MUTATION = ` - mutation SetAgentTheme($agentId: String!, $theme: String!) { - updateAgentTheme(agentId: $agentId, theme: $theme) +const CREATE_THEMED_AGENT_MUTATION = ` + mutation CreateThemedAgent($theme: String!) { + createThemedAgent(theme: $theme) } ` @@ -70,6 +65,12 @@ const START_EVENT_GENERATION_MUTATION = ` } ` +const STOP_AGENT_MUTATION = ` + mutation StopAgent($agentId: String!) { + stopAgent(agentId: $agentId) + } +` + function AgentEventSubscription({ agentId, onEvent, @@ -107,11 +108,14 @@ export default function Page() { const [newTheme, setNewTheme] = useState("") const [isCreating, setIsCreating] = useState(false) - const [agentsResult, refetchAgents] = useQuery({ query: GET_ALL_AGENTS_QUERY }) + const [agentsResult, refetchAgents] = useQuery({ + query: GET_ALL_AGENTS_QUERY, + requestPolicy: "cache-and-network", // Always fetch fresh data + }) - const [, createAgent] = useMutation(CREATE_AGENT) - const [, setTheme] = useMutation(SET_AGENT_THEME_MUTATION) + const [, createThemedAgent] = useMutation(CREATE_THEMED_AGENT_MUTATION) const [, startEventGeneration] = useMutation(START_EVENT_GENERATION_MUTATION) + const [, stopAgent] = useMutation(STOP_AGENT_MUTATION) const getEventType = useCallback( (eventName: string): "info" | "warning" | "success" | "error" => { @@ -153,34 +157,35 @@ export default function Page() { [getEventType], ) - // Handle creating a new themed agent (two-step process hidden from user) + // Handle stopping an agent + const handleStopAgent = async (agentId: string) => { + try { + await stopAgent({ agentId }) + // Refetch to update agent status + refetchAgents({ requestPolicy: "network-only" }) + } catch (error) { + console.error("Failed to stop agent:", error) + } + } const handleCreateAgent = async () => { if (!newTheme.trim()) return setIsCreating(true) try { - const createResult = await createAgent() - if (createResult.data?.createAgent) { - const agentId = createResult.data.createAgent - - setTimeout(async () => { - try { - await setTheme({ agentId, theme: newTheme.trim() }) - setNewTheme("") - refetchAgents() - } catch (error) { - console.error("Failed to set agent theme:", error) - } - }, 1000) + const result = await createThemedAgent({ theme: newTheme.trim() }) + if (result.data?.createThemedAgent) { + setNewTheme("") + // Force refetch and wait for it to complete to get new agents + await refetchAgents({ requestPolicy: "network-only" }) } } catch (error) { - console.error("Failed to create agent:", error) + console.error("Failed to create themed agent:", error) } finally { setIsCreating(false) } } - // Track connection status based on agents query + // Track connection status and refetch agents periodically useEffect(() => { if (agentsResult.data?.agents) { setIsConnected(true) @@ -188,7 +193,16 @@ export default function Page() { console.error("Agents query error:", agentsResult.error) setIsConnected(false) } - }, [agentsResult.data, agentsResult.error]) + + // Set up periodic refetch to catch any missed agents + const interval = setInterval(() => { + if (isConnected) { + refetchAgents({ requestPolicy: "network-only" }) + } + }, 5000) // Refetch every 5 seconds + + return () => clearInterval(interval) + }, [agentsResult.data, agentsResult.error, isConnected, refetchAgents]) // Get enriched agents data combining query data with local state const enrichedAgents = (agentsResult.data?.agents || []).map((agent: any) => ({ @@ -224,11 +238,15 @@ export default function Page() { return (
- {/* Real-time subscriptions for each agent - only subscribe to agents with valid IDs */} + {/* Real-time subscriptions for each agent - dynamically subscribe to all current agents */} {enrichedAgents .filter((agent) => agent.id && agent.id.trim() !== "") .map((agent) => ( - + ))}
@@ -289,6 +307,7 @@ export default function Page() { placeholder="e.g., matrix, cyberpunk, space, medieval..." className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" disabled={isCreating || !isConnected} + onKeyPress={(e) => e.key === "Enter" && handleCreateAgent()} />
@@ -352,10 +371,19 @@ export default function Page() {
+
@@ -477,8 +505,8 @@ subscription AgentEvents($agentId: String!) { cd modus && modus dev # Backend should expose: -query { listAgents { id name status } } -mutation { createThemedAgent(theme: $theme) { id name status } }`} +query { agents { id name status } } +mutation { createThemedAgent(theme: $theme) }`} diff --git a/agent-events/modus/agent.go b/agent-events/modus/agent.go index 9e0f251..13410c9 100644 --- a/agent-events/modus/agent.go +++ b/agent-events/modus/agent.go @@ -49,6 +49,9 @@ func (e AgentStatusEvent) EventName() string { } func (a *ThemedAgent) Name() string { + if a.Theme != "" { + return fmt.Sprintf("ThemedAgent_%s", strings.ReplaceAll(a.Theme, " ", "_")) + } return "ThemedAgent" } @@ -59,15 +62,7 @@ func (a *ThemedAgent) OnInitialize() error { a.IsActive = true a.LastEventTime = time.Now() - err := a.PublishEvent(AgentStatusEvent{ - Status: "initialized", - EventCount: 0, - MaxEvents: a.MaxEvents, - Theme: a.Theme, - TimeElapsed: "0s", - }) - - return err + return nil } func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*string, error) { @@ -83,8 +78,6 @@ func (a *ThemedAgent) OnReceiveMessage(messageName string, data *string) (*strin return a.startEventGeneration() case "get_status": return a.getStatus() - case "stop": - return a.stopGeneration() default: return nil, fmt.Errorf("unknown message: %s", messageName) } @@ -140,6 +133,10 @@ func (a *ThemedAgent) SetState(data *string) { } func (a *ThemedAgent) startEventGeneration() (*string, error) { + if a.Theme == "" { + return nil, fmt.Errorf("agent theme not set") + } + if !a.IsActive { result := "Agent is not active" return &result, nil @@ -265,24 +262,6 @@ func (a *ThemedAgent) getStatus() (*string, error) { return &result, nil } -func (a *ThemedAgent) stopGeneration() (*string, error) { - a.IsActive = false - - err := a.PublishEvent(AgentStatusEvent{ - Status: "stopped", - EventCount: a.EventCount, - MaxEvents: a.MaxEvents, - Theme: a.Theme, - TimeElapsed: time.Since(a.StartTime).Round(time.Second).String(), - }) - if err != nil { - return nil, err - } - - result := fmt.Sprintf("Agent stopped. Generated %d/%d events for theme: %s", a.EventCount, a.MaxEvents, a.Theme) - return &result, nil -} - func init() { agents.Register(&ThemedAgent{}) } diff --git a/agent-events/modus/main.go b/agent-events/modus/main.go index cba56dd..6c43a6c 100644 --- a/agent-events/modus/main.go +++ b/agent-events/modus/main.go @@ -6,30 +6,22 @@ import ( "github.com/hypermodeinc/modus/sdk/go/pkg/agents" ) -func CreateAgent() (string, error) { - agentInfo, err := agents.Start("ThemedAgent") - if err != nil { - return "", err - } - - return agentInfo.Id, nil -} - -func UpdateAgentTheme(agentId string, theme string) (string, error) { +func CreateThemedAgent(theme string) (string, error) { if theme == "" { return "", fmt.Errorf("theme cannot be empty") } - result, err := agents.SendMessage(agentId, "initialize_theme", agents.WithData(theme)) + agentInfo, err := agents.Start("ThemedAgent") if err != nil { - return "", fmt.Errorf("failed to set theme for agent: %w", err) + return "", fmt.Errorf("failed to start agent: %w", err) } - if result == nil { - return "", fmt.Errorf("no response from agent") + _, err = agents.SendMessage(agentInfo.Id, "initialize_theme", agents.WithData(theme)) + if err != nil { + return "", fmt.Errorf("failed to set theme for agent: %w", err) } - return *result, nil + return agentInfo.Id, nil } func MutateStartEventGeneration(agentId string) (string, error) { @@ -52,7 +44,7 @@ func GetAgentStatus(agentId string) (string, error) { } func StopAgent(agentId string) (string, error) { - err := agents.SendMessageAsync(agentId, "stop") + _, err := agents.Stop(agentId) if err != nil { return "", err } From de1917cdf3e49b472f3f0b9b341e7c541ca4239d Mon Sep 17 00:00:00 2001 From: danstarns Date: Thu, 12 Jun 2025 17:39:15 +0700 Subject: [PATCH 09/12] * --- agent-events/frontend/app/page.tsx | 8 ++++---- agent-events/frontend/app/urql.tsx | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/agent-events/frontend/app/page.tsx b/agent-events/frontend/app/page.tsx index 903c2d6..f55967f 100644 --- a/agent-events/frontend/app/page.tsx +++ b/agent-events/frontend/app/page.tsx @@ -240,8 +240,8 @@ export default function Page() {
{/* Real-time subscriptions for each agent - dynamically subscribe to all current agents */} {enrichedAgents - .filter((agent) => agent.id && agent.id.trim() !== "") - .map((agent) => ( + .filter((agent: Agent) => agent.id && agent.id.trim() !== "") + .map((agent: Agent) => ( - {enrichedAgents.map((agent) => ( + {enrichedAgents.map((agent: Agent) => (

{agent.name}

@@ -402,7 +402,7 @@ export default function Page() {
Active Agents - {enrichedAgents.filter((a) => a.status === "active").length} + {enrichedAgents.filter((a: Agent) => a.status === "active").length}
diff --git a/agent-events/frontend/app/urql.tsx b/agent-events/frontend/app/urql.tsx index 73eef2f..6ad8b68 100644 --- a/agent-events/frontend/app/urql.tsx +++ b/agent-events/frontend/app/urql.tsx @@ -16,6 +16,7 @@ export const client = createClient({ forwardSubscription(operation) { return { subscribe: (sink) => { + // @ts-ignore const dispose = sseClient.subscribe(operation, sink) return { unsubscribe: dispose, From 2790a30459e4e516af434d2b78bf5a1d50253a32 Mon Sep 17 00:00:00 2001 From: danstarns Date: Thu, 12 Jun 2025 17:51:43 +0700 Subject: [PATCH 10/12] * --- agent-events/README.md | 165 ++++++++++++++++++++++++++++++++++++ agent-events/screenshot.png | Bin 0 -> 208860 bytes 2 files changed, 165 insertions(+) create mode 100644 agent-events/README.md create mode 100644 agent-events/screenshot.png diff --git a/agent-events/README.md b/agent-events/README.md new file mode 100644 index 0000000..6a72ab8 --- /dev/null +++ b/agent-events/README.md @@ -0,0 +1,165 @@ +# Agent Events Dashboard + +Real-time monitoring dashboard for Modus agents. Create themed agents and watch their events in +real-time. + +

+ Agent Events Dashboard +

+ +## Tech Stack + +- **Frontend**: Next.js 15 + TypeScript + Tailwind CSS +- **Backend**: Modus (Go) + GraphQL +- **Real-time**: Server-Sent Events (SSE) via `graphql-sse` + URQL +- **AI**: OpenAI GPT-4o-mini for event generation + +## Setup + +1. **Install dependencies** + + ```bash + npm install -g pnpm + pnpm install + ``` + +2. **Configure OpenAI API** + +```bash +cd modus +echo "MODUS_OPENAI_KEY=your-openai-api-key" > .env +``` + +## Running + +Start both servers: + +```bash +# Terminal 1: Backend +cd modus +modus dev + +# Terminal 2: Frontend +pnpm dev:frontend +``` + +Visit `http://localhost:3000` + +## Usage + +1. **Create Agent**: Enter a theme (e.g., "cyberpunk", "space station") and click Create +2. **Generate Events**: Click "Generate Event" or agents auto-generate themed events +3. **Monitor**: Watch real-time events in the dashboard + +## Real-time Architecture + +The app uses **Server-Sent Events (SSE)** for real-time updates: + +- **URQL** GraphQL client with `subscriptionExchange` +- **graphql-sse** for SSE-based GraphQL subscriptions +- Events stream from Modus backend via `/graphql` endpoint + +```typescript +// SSE client setup +const sseClient = createSSEClient({ + url: "http://localhost:8686/graphql", +}) + +// URQL with SSE subscriptions +const client = createClient({ + url: "http://localhost:8686/graphql", + exchanges: [ + cacheExchange, + fetchExchange, + subscriptionExchange({ + forwardSubscription(operation) { + return { + subscribe: (sink) => { + const dispose = sseClient.subscribe(operation, sink) + return { unsubscribe: dispose } + }, + } + }, + }), + ], +}) +``` + +**SSE Event Stream Example:** You can view the raw SSE stream per agent in browser dev tools: + +```text +event: next +data: { + "data": { + "agentEvent": { + "name": "agent_status", + "data": { + "eventCount": 2, + "maxEvents": 100, + "status": "generating", + "theme": "matrix", + "timeElapsed": "3m46s" + }, + "timestamp": "2025-06-12T10:46:57.973Z" + } + } +} + +event: next +data: { + "data": { + "agentEvent": { + "name": "system_malfunction", + "data": { + "affectedUsers": "Approximately 350 users", + "description": "A critical subroutine designed to manage digital reality parameters encountered a malfunction", + "errorCode": "MTRX-404-GLITCH", + "eventType": "system_malfunction", + "location": "Virtual Reality Hub, Sector 7", + "severity": "HIGH", + "timeOfIncident": "2023-10-15T14:30:00Z", + "title": "Subroutine Failure in Simulation" + }, + "timestamp": "2025-06-12T10:47:01.029Z" + } + } +} +``` + +## GraphQL API + +**Queries:** + +```graphql +query { + agents { + id + name + status + } +} +``` + +**Mutations:** + +```graphql +mutation { + createThemedAgent(theme: "cyberpunk") +} + +mutation { + mutateStartEventGeneration(agentId: "agent_123") +} +``` + +**Subscriptions:** + +```graphql +subscription { + agentEvent(agentId: "agent_123") { + name + data + timestamp + } +} +``` diff --git a/agent-events/screenshot.png b/agent-events/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..59039b6c08e2b2bc6cc6b5c7d47d76e467a99d96 GIT binary patch literal 208860 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

3%m^At=E6Q|`D}j=I9)a@^zZK#TSFAc~!T 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

#qIzf8D&KtJ|?5H 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 =h5j!_n6(8kuarzf*H!d|R#sz) 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 literal 0 HcmV?d00001 From d65f145fd76241b237e0bfe218d12005b6b410c9 Mon Sep 17 00:00:00 2001 From: danstarns Date: Thu, 12 Jun 2025 17:55:06 +0700 Subject: [PATCH 11/12] * --- agent-events/frontend/package.json | 14 +- agent-events/pnpm-lock.yaml | 261 ----------------------------- 2 files changed, 2 insertions(+), 273 deletions(-) diff --git a/agent-events/frontend/package.json b/agent-events/frontend/package.json index eadda5f..4287b24 100644 --- a/agent-events/frontend/package.json +++ b/agent-events/frontend/package.json @@ -5,14 +5,9 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start", - "lint": "eslint .", - "format": "prettier . --write --ignore-path .prettierignore", - "format:check": "prettier . --check --ignore-path .prettierignore" + "start": "next start" }, "dependencies": { - "@apollo/client": "latest", - "@apollo/experimental-nextjs-app-support": "latest", "autoprefixer": "^10.4.20", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -21,17 +16,12 @@ "graphql-sse": "^2.5.4", "lucide-react": "^0.488.0", "next": "^15.3.1", - "papaparse": "^5.5.2", "react": "^19", "react-dom": "^19", "tailwind-merge": "^2.5.5", - "urql": "^4.2.2", - "uuid": "^11.1.0" + "urql": "^4.2.2" }, "devDependencies": { - "@types/node": "^22", - "@types/react": "^19", - "@types/react-dom": "^19", "postcss": "^8", "postcss-nesting": "^13.0.1", "tailwindcss": "3.4.17", diff --git a/agent-events/pnpm-lock.yaml b/agent-events/pnpm-lock.yaml index 5c20134..90bb8cf 100644 --- a/agent-events/pnpm-lock.yaml +++ b/agent-events/pnpm-lock.yaml @@ -56,12 +56,6 @@ importers: frontend: dependencies: - '@apollo/client': - specifier: latest - version: 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@apollo/experimental-nextjs-app-support': - specifier: latest - version: 0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) autoprefixer: specifier: ^10.4.20 version: 10.4.21(postcss@8.5.4) @@ -86,9 +80,6 @@ importers: next: specifier: ^15.3.1 version: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - papaparse: - specifier: ^5.5.2 - version: 5.5.3 react: specifier: ^19 version: 19.1.0 @@ -101,19 +92,7 @@ importers: urql: specifier: ^4.2.2 version: 4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@19.1.0) - uuid: - specifier: ^11.1.0 - version: 11.1.0 devDependencies: - '@types/node': - specifier: ^22 - version: 22.15.29 - '@types/react': - specifier: ^19 - version: 19.1.7 - '@types/react-dom': - specifier: ^19 - version: 19.1.6(@types/react@19.1.7) postcss: specifier: ^8 version: 8.5.4 @@ -148,46 +127,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@apollo/client-integration-nextjs@0.12.2': - resolution: {integrity: sha512-Nsoe/onkEqCfIcQfoklnimRGibtaYXmkst6moXJw9Jl0sFqxpEyNMv3xvdPXItN6lZABBeKM8N+u+/7iqyZDig==} - peerDependencies: - '@apollo/client': ^3.13.0 - next: ^15.2.3 - react: ^19 - - '@apollo/client-react-streaming@0.12.2': - resolution: {integrity: sha512-zVc6QmvvR+9DZaLPUES1Rp63MC2VAnvHJC7gNVagH5kI3IZgeJGNgxKX/RMpYJ2+a2EclOG50czFCD7XkXe24w==} - peerDependencies: - '@apollo/client': ^3.13.0 - graphql: ^16 || >=17.0.0-alpha.2 - react: ^19 - react-dom: ^19 - - '@apollo/client@3.13.8': - resolution: {integrity: sha512-YM9lQpm0VfVco4DSyKooHS/fDTiKQcCHfxr7i3iL6a0kP/jNO5+4NFK6vtRDxaYisd5BrwOZHLJpPBnvRVpKPg==} - peerDependencies: - graphql: ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 || ^6.0.3 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - react-dom: - optional: true - subscriptions-transport-ws: - optional: true - - '@apollo/experimental-nextjs-app-support@0.12.2': - resolution: {integrity: sha512-a+WpKGuabj1rAgDCSwaAt8LYitusVcTm/W2jGNFqTz4nerJ0XeWaN1JTmJI8uoCWMyXdRIa2ZzUjX3UcDKsBeQ==} - peerDependencies: - '@apollo/client': ^3.13.0 - next: ^15.2.3 - react: ^19 - '@babel/cli@7.27.2': resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} engines: {node: '>=6.9.0'} @@ -795,11 +734,6 @@ packages: '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@img/sharp-darwin-arm64@0.34.2': resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1156,22 +1090,6 @@ packages: '@urql/core@5.1.1': resolution: {integrity: sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==} - '@wry/caches@1.0.1': - resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} - engines: {node: '>=8'} - - '@wry/context@0.7.4': - resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} - engines: {node: '>=8'} - - '@wry/equality@0.5.7': - resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} - engines: {node: '>=8'} - - '@wry/trie@0.5.0': - resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} - engines: {node: '>=8'} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1703,12 +1621,6 @@ packages: peerDependencies: graphql: '>=0.11 <=16' - graphql-tag@2.12.6: - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.11.0: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -1721,9 +1633,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -2003,10 +1912,6 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2123,9 +2028,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - optimism@0.18.1: - resolution: {integrity: sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -2145,9 +2047,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - papaparse@5.5.3: - resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2257,9 +2156,6 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} @@ -2271,9 +2167,6 @@ packages: peerDependencies: react: ^19.1.0 - 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==} @@ -2306,17 +2199,6 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true - rehackt@0.1.0: - resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} - peerDependencies: - '@types/react': '*' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2487,10 +2369,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} - tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} @@ -2525,10 +2403,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-invariant@0.10.3: - resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} - engines: {node: '>=8'} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2579,10 +2453,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} @@ -2637,12 +2507,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zen-observable-ts@1.2.5: - resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} - - zen-observable@0.8.15: - resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} - snapshots: '@0no-co/graphql.web@1.1.2(graphql@16.11.0)': @@ -2656,62 +2520,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@apollo/client-integration-nextjs@0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@apollo/client': 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@apollo/client-react-streaming': 0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - next: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - transitivePeerDependencies: - - '@types/react' - - graphql - - react-dom - - '@apollo/client-react-streaming@0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@apollo/client': 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@wry/equality': 0.5.7 - graphql: 16.11.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - ts-invariant: 0.10.3 - transitivePeerDependencies: - - '@types/react' - - '@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@wry/caches': 1.0.1 - '@wry/equality': 0.5.7 - '@wry/trie': 0.5.0 - graphql: 16.11.0 - graphql-tag: 2.12.6(graphql@16.11.0) - hoist-non-react-statics: 3.3.2 - optimism: 0.18.1 - prop-types: 15.8.1 - rehackt: 0.1.0(@types/react@19.1.7)(react@19.1.0) - symbol-observable: 4.0.0 - ts-invariant: 0.10.3 - tslib: 2.8.1 - zen-observable-ts: 1.2.5 - optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@types/react' - - '@apollo/experimental-nextjs-app-support@0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@apollo/client': 3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@apollo/client-integration-nextjs': 0.12.2(@apollo/client@3.13.8(@types/react@19.1.7)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(graphql@16.11.0)(next@15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - next: 15.3.3(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - transitivePeerDependencies: - - '@types/react' - - graphql - - react-dom - '@babel/cli@7.27.2(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -3480,10 +3288,6 @@ snapshots: tslib: 2.8.1 optional: true - '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': - dependencies: - graphql: 16.11.0 - '@img/sharp-darwin-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.1.0 @@ -3900,22 +3704,6 @@ snapshots: transitivePeerDependencies: - graphql - '@wry/caches@1.0.1': - dependencies: - tslib: 2.8.1 - - '@wry/context@0.7.4': - dependencies: - tslib: 2.8.1 - - '@wry/equality@0.5.7': - dependencies: - tslib: 2.8.1 - - '@wry/trie@0.5.0': - dependencies: - tslib: 2.8.1 - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -4480,11 +4268,6 @@ snapshots: dependencies: graphql: 16.11.0 - graphql-tag@2.12.6(graphql@16.11.0): - dependencies: - graphql: 16.11.0 - tslib: 2.8.1 - graphql@16.11.0: {} has-flag@4.0.0: {} @@ -4493,10 +4276,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - html-escaper@2.0.2: {} human-signals@2.1.0: {} @@ -4936,10 +4715,6 @@ snapshots: lodash.debounce@4.0.8: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -5045,13 +4820,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - optimism@0.18.1: - dependencies: - '@wry/caches': 1.0.1 - '@wry/context': 0.7.4 - '@wry/trie': 0.5.0 - tslib: 2.8.1 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -5068,8 +4836,6 @@ snapshots: package-json-from-dist@1.0.1: {} - papaparse@5.5.3: {} - parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -5170,12 +4936,6 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - 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: {} queue-microtask@1.2.3: {} @@ -5185,8 +4945,6 @@ snapshots: react: 19.1.0 scheduler: 0.26.0 - react-is@16.13.1: {} - react-is@18.3.1: {} react@19.1.0: {} @@ -5220,11 +4978,6 @@ snapshots: dependencies: jsesc: 3.0.2 - rehackt@0.1.0(@types/react@19.1.7)(react@19.1.0): - optionalDependencies: - '@types/react': 19.1.7 - react: 19.1.0 - require-directory@2.1.1: {} resolve-cwd@3.0.0: @@ -5386,8 +5139,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - symbol-observable@4.0.0: {} - tailwind-merge@2.6.0: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.17): @@ -5443,10 +5194,6 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-invariant@0.10.3: - dependencies: - tslib: 2.8.1 - tslib@2.8.1: {} type-detect@4.0.8: {} @@ -5482,8 +5229,6 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.1.0: {} - v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -5538,9 +5283,3 @@ snapshots: yargs-parser: 21.1.1 yocto-queue@0.1.0: {} - - zen-observable-ts@1.2.5: - dependencies: - zen-observable: 0.8.15 - - zen-observable@0.8.15: {} From 0c39d41afecb0b5f0e72a32ba061ded8037531aa Mon Sep 17 00:00:00 2001 From: danstarns Date: Thu, 12 Jun 2025 17:55:43 +0700 Subject: [PATCH 12/12] * --- agent-events/frontend/app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent-events/frontend/app/layout.tsx b/agent-events/frontend/app/layout.tsx index 16373d6..b4fddbb 100644 --- a/agent-events/frontend/app/layout.tsx +++ b/agent-events/frontend/app/layout.tsx @@ -1,5 +1,5 @@ import { GraphQLProvider } from "./urql" -import "./globals.css" // Assuming you have global styles +import "./globals.css" export const metadata = { title: "Agent Events Dashboard",