From 507210b0b851ed15aed6a96867fed45c4da3ed71 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 16:17:18 -0500 Subject: [PATCH 01/12] Migrate --- README.md | 81 +- babel.config.cjs | 13 - eslint.config.js | 37 - index.css | 14 + index.html | 39 + index.tsx | 10 + .../components}/ErrorBoundary.test.tsx | 46 +- .../components/ErrorBoundary.tsx | 25 +- {src => lib/context}/ErrorBoundaryContext.ts | 4 +- lib/hooks/useErrorBoundary.test.tsx | 91 + lib/hooks/useErrorBoundary.ts | 48 + lib/index.ts | 17 + lib/types.ts | 87 + lib/utils/assert.ts | 8 + lib/utils/assertErrorBoundaryContext.ts | 10 + lib/utils/isErrorBoundaryContext.ts | 15 + {src => lib/utils}/withErrorBoundary.test.tsx | 30 +- lib/utils/withErrorBoundary.ts | 27 + other/MAINTAINING.md | 84 - other/USERS.md | 12 - other/manual-releases.md | 44 - package.json | 170 +- pnpm-lock.yaml | 7757 +++++++++-------- pnpm-workspace.yaml | 7 + public/favicon.svg | 16 + public/generated/docs/ErrorBoundary.json | 88 + .../examples/AutoSizerPropsRoute.tsx | 3 + public/generated/examples/BasicUsageRoute.tsx | 3 + .../examples/ErrorBoundaryPropsRoute.tsx | 3 + .../generated/examples/FallbackComponent.json | 3 + .../examples/FallbackComponentRoute.tsx | 3 + .../generated/examples/FallbackContent.json | 3 + .../examples/FallbackContentRoute.tsx | 3 + .../examples/GettingStartedRoute.tsx | 3 + public/generated/examples/PageNotFound.tsx | 3 + public/generated/examples/RenderProp.json | 3 + public/generated/examples/RenderPropRoute.tsx | 3 + public/generated/examples/SupportRoute.tsx | 3 + public/og.html | 46 + public/og.png | Bin 0 -> 109526 bytes public/robots.txt | 2 + scripts/compile-docs.ts | 9 + scripts/compile-examples.ts | 3 + src/App.tsx | 34 + src/assertErrorBoundaryContext.ts | 13 - src/components/ContinueLink.tsx | 10 + src/components/Divider.tsx | 3 + src/components/Link.tsx | 12 + src/env-conditions/development.ts | 1 - src/env-conditions/production.ts | 1 - src/index.ts | 8 - src/routes.ts | 20 + src/routes/ErrorBoundaryPropsRoute.tsx | 10 + src/routes/FallbackComponentRoute.tsx | 15 + src/routes/FallbackContentRoute.tsx | 12 + src/routes/GettingStartedRoute.tsx | 43 + src/routes/PageNotFound.tsx | 16 + src/routes/RenderPropRoute.tsx | 18 + src/routes/SupportRoute.tsx | 32 + .../examples/FallbackComponent.example.tsx | 29 + .../examples/FallbackContent.example.tsx | 13 + src/routes/examples/RenderProp.example.tsx | 25 + src/types.ts | 39 - src/useErrorBoundary.test.tsx | 103 - src/useErrorBoundary.ts | 44 - src/vite-env.d.ts | 2 + src/withErrorBoundary.ts | 33 - tsconfig.json | 46 +- vite.config.ts | 84 + vitest.config.ts | 33 +- vitest.d.ts | 7 + vitest.setup.ts | 74 + 72 files changed, 5246 insertions(+), 4410 deletions(-) delete mode 100644 babel.config.cjs delete mode 100644 eslint.config.js create mode 100644 index.css create mode 100644 index.html create mode 100644 index.tsx rename {src => lib/components}/ErrorBoundary.test.tsx (89%) rename src/ErrorBoundary.ts => lib/components/ErrorBoundary.tsx (74%) rename {src => lib/context}/ErrorBoundaryContext.ts (72%) create mode 100644 lib/hooks/useErrorBoundary.test.tsx create mode 100644 lib/hooks/useErrorBoundary.ts create mode 100644 lib/index.ts create mode 100644 lib/types.ts create mode 100644 lib/utils/assert.ts create mode 100644 lib/utils/assertErrorBoundaryContext.ts create mode 100644 lib/utils/isErrorBoundaryContext.ts rename {src => lib/utils}/withErrorBoundary.test.tsx (71%) create mode 100644 lib/utils/withErrorBoundary.ts delete mode 100644 other/MAINTAINING.md delete mode 100644 other/USERS.md delete mode 100644 other/manual-releases.md create mode 100644 pnpm-workspace.yaml create mode 100644 public/favicon.svg create mode 100644 public/generated/docs/ErrorBoundary.json create mode 100644 public/generated/examples/AutoSizerPropsRoute.tsx create mode 100644 public/generated/examples/BasicUsageRoute.tsx create mode 100644 public/generated/examples/ErrorBoundaryPropsRoute.tsx create mode 100644 public/generated/examples/FallbackComponent.json create mode 100644 public/generated/examples/FallbackComponentRoute.tsx create mode 100644 public/generated/examples/FallbackContent.json create mode 100644 public/generated/examples/FallbackContentRoute.tsx create mode 100644 public/generated/examples/GettingStartedRoute.tsx create mode 100644 public/generated/examples/PageNotFound.tsx create mode 100644 public/generated/examples/RenderProp.json create mode 100644 public/generated/examples/RenderPropRoute.tsx create mode 100644 public/generated/examples/SupportRoute.tsx create mode 100644 public/og.html create mode 100644 public/og.png create mode 100644 public/robots.txt create mode 100644 scripts/compile-docs.ts create mode 100644 scripts/compile-examples.ts create mode 100644 src/App.tsx delete mode 100644 src/assertErrorBoundaryContext.ts create mode 100644 src/components/ContinueLink.tsx create mode 100644 src/components/Divider.tsx create mode 100644 src/components/Link.tsx delete mode 100644 src/env-conditions/development.ts delete mode 100644 src/env-conditions/production.ts delete mode 100644 src/index.ts create mode 100644 src/routes.ts create mode 100644 src/routes/ErrorBoundaryPropsRoute.tsx create mode 100644 src/routes/FallbackComponentRoute.tsx create mode 100644 src/routes/FallbackContentRoute.tsx create mode 100644 src/routes/GettingStartedRoute.tsx create mode 100644 src/routes/PageNotFound.tsx create mode 100644 src/routes/RenderPropRoute.tsx create mode 100644 src/routes/SupportRoute.tsx create mode 100644 src/routes/examples/FallbackComponent.example.tsx create mode 100644 src/routes/examples/FallbackContent.example.tsx create mode 100644 src/routes/examples/RenderProp.example.tsx delete mode 100644 src/types.ts delete mode 100644 src/useErrorBoundary.test.tsx delete mode 100644 src/useErrorBoundary.ts create mode 100644 src/vite-env.d.ts delete mode 100644 src/withErrorBoundary.ts create mode 100644 vite.config.ts create mode 100644 vitest.d.ts create mode 100644 vitest.setup.ts diff --git a/README.md b/README.md index 56dc9cf9..4ca87a76 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,83 @@ yarn add react-error-boundary ## API -### `ErrorBoundary` component -Wrap an `ErrorBoundary` component around other React components to "catch" errors and render a fallback UI. The component supports several ways to render a fallback (as shown below). - -> **Note** `ErrorBoundary` is a _client_ component. You can only pass props to it that are serializeable or use it in files that have a `"use client";` directive. +### ErrorBoundary + + +A reusable React [error boundary](https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary) component. +Wrap this component around other React components to "catch" errors and render a fallback UI. + + +ℹ️ The component provides several ways to render a fallback: `fallback`, `fallbackRender`, and `FallbackComponent`. +Refer to the documentation to determine which is best for your application. + +ℹ️ This is a **client component**. You can only pass props to it that are serializeable or use it in files that have a `"use client";` directive. + + +#### Required props + + +None + + +#### Optional props + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
onError

Optional callback to enable e.g. logging error information to a server. +@param error Error that was thrown +@param info React "component stack" identifying where the error was thrown

+
onReset

Optional callback to to be notified when an error boundary is "reset" so React can retry the failed render.

+
resetKeys

When changed, these keys will reset a triggered error boundary. +This can be useful when an error condition may be tied to some specific state (that can be uniquely identified by key). +See the the documentation for examples of how to use this prop.

+
fallback

Static content to render in place of an error if one is thrown.

+
<ErrorBoundary fallback={<div class="text-red">Something went wrong</div>} />
+
+
FallbackComponent

React component responsible for returning a fallback UI based on a thrown value.

+
<ErrorBoundary FallbackComponent={Fallback} />
+
+
fallbackRender

Render prop function responsible for returning a fallback UI based on a thrown value.

+
<ErrorBoundary fallbackRender={({ error, resetErrorBoundary }) => <div>...</div>} />
+
+
+ + + +## Examples #### `ErrorBoundary` with `fallback` prop The simplest way to render a default "something went wrong" type of error message. diff --git a/babel.config.cjs b/babel.config.cjs deleted file mode 100644 index 3b6bb0df..00000000 --- a/babel.config.cjs +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - presets: [ - "@babel/preset-typescript", - [ - "@babel/preset-env", - { - targets: { - safari: "12", - }, - }, - ], - ], -}; diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 7979bf07..00000000 --- a/eslint.config.js +++ /dev/null @@ -1,37 +0,0 @@ -import globals from "globals"; -import { defineConfig } from "eslint/config"; -import tseslint from "typescript-eslint"; -import reactPlugin from "eslint-plugin-react"; -import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; - -export default defineConfig( - { - ignores: ["dist"], - }, - reactPlugin.configs.flat.recommended, - tseslint.configs.recommended, - { - languageOptions: { - globals: { - ...globals.browser, - ...globals.es2021, - }, - parser: tseslint.parser, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - }, - }, - plugins: { - react: reactPlugin, - "@typescript-eslint": tseslint.plugin, - }, - rules: { - "react/no-did-update-set-state": "off", - "react/react-in-jsx-scope": "off", - "react/prop-types": "off", - "@typescript-eslint/no-explicit-any": "off", - }, - }, - eslintPluginPrettierRecommended -); diff --git a/index.css b/index.css new file mode 100644 index 00000000..43133881 --- /dev/null +++ b/index.css @@ -0,0 +1,14 @@ +@source "node_modules/react-lib-tools"; + +@import "tailwindcss"; +@import "react-lib-tools/styles.css"; + +:root { + --template-gradient-color-1: var(--color-rose-600); + --template-gradient-color-2: var(--color-fuchsia-800); + --template-gradient-color-3: var(--color-rose-700); + + --template-focus-color-300: var(--color-sky-300); + --template-focus-color-400: var(--color-sky-400); + --template-focus-color-600: var(--color-sky-600); +} diff --git a/index.html b/index.html new file mode 100644 index 00000000..1fa17bc5 --- /dev/null +++ b/index.html @@ -0,0 +1,39 @@ + + + + react-error-boundary | (re)sizing helper component + + + + + + + + + + + + + + + +
+ + + + diff --git a/index.tsx b/index.tsx new file mode 100644 index 00000000..7cce5685 --- /dev/null +++ b/index.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./index.css"; +import App from "./src/App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + +); diff --git a/src/ErrorBoundary.test.tsx b/lib/components/ErrorBoundary.test.tsx similarity index 89% rename from src/ErrorBoundary.test.tsx rename to lib/components/ErrorBoundary.test.tsx index b078ccc1..9c372629 100644 --- a/src/ErrorBoundary.test.tsx +++ b/lib/components/ErrorBoundary.test.tsx @@ -1,21 +1,27 @@ -import { describe, beforeEach, vi, it, expect, Mock } from "vitest"; -import assert from "assert"; -import { createRef, PropsWithChildren, ReactElement, RefObject } from "react"; +import { + createRef, + type PropsWithChildren, + type ReactElement, + type RefObject, +} from "react"; import { createRoot } from "react-dom/client"; import { act } from "react-dom/test-utils"; +import { beforeEach, describe, expect, it, vi, type Mock } from "vitest"; +import { assert } from "../utils/assert"; import { ErrorBoundary } from "./ErrorBoundary"; -import { +import type { ErrorBoundaryPropsWithComponent, ErrorBoundaryPropsWithFallback, ErrorBoundaryPropsWithRender, FallbackProps, -} from "./types"; + OnErrorCallback, +} from "../types"; describe("ErrorBoundary", () => { let container: HTMLDivElement; let root: ReturnType; let shouldThrow = true; - let valueToThrow: any; + let valueToThrow: unknown; beforeEach(() => { // @ts-expect-error This is a React internal @@ -36,7 +42,7 @@ describe("ErrorBoundary", () => { if (shouldThrow) { throw valueToThrow; } - return children as any; + return children; } it("should render children", () => { @@ -54,10 +60,10 @@ describe("ErrorBoundary", () => { }); describe("fallback props", () => { - let errorBoundaryRef: RefObject; + let errorBoundaryRef: RefObject; beforeEach(() => { - errorBoundaryRef = createRef(); + errorBoundaryRef = createRef(); }); function render(props: Omit) { @@ -73,7 +79,7 @@ describe("ErrorBoundary", () => { it('should call "onError" prop if one is provided', () => { shouldThrow = true; - const onError: Mock<(...args: any[]) => any> = vi.fn(); + const onError: Mock = vi.fn(); render({ onError }); @@ -84,7 +90,7 @@ describe("ErrorBoundary", () => { it('should call "onReset" when boundary reset via imperative API', () => { shouldThrow = true; - const onReset: Mock<(...args: any[]) => any> = vi.fn(); + const onReset: Mock<(...args: unknown[]) => unknown> = vi.fn(); render({ onReset }); expect(onReset).not.toHaveBeenCalled(); @@ -97,7 +103,7 @@ describe("ErrorBoundary", () => { it('should call "onReset" when boundary reset via "resetKeys"', () => { shouldThrow = false; - const onReset: Mock<(...args: any[]) => any> = vi.fn(); + const onReset: Mock<(...args: unknown[]) => unknown> = vi.fn(); render({ onReset, resetKeys: [1] }); expect(onReset).not.toHaveBeenCalled(); @@ -163,7 +169,7 @@ describe("ErrorBoundary", () => { describe('"FallbackComponent"', () => { let fallbackComponent: Mock<(props: FallbackProps) => ReactElement>; - let lastRenderedError: any = null; + let lastRenderedError: Error | null = null; let lastRenderedResetErrorBoundary: | FallbackProps["resetErrorBoundary"] | null = null; @@ -198,7 +204,7 @@ describe("ErrorBoundary", () => { it("should render fallback in the event of an error", () => { shouldThrow = true; render(); - expect(lastRenderedError.message).toBe("💥💥💥"); + expect(lastRenderedError?.message).toBe("💥💥💥"); expect(container.textContent).toBe("FallbackComponent"); }); @@ -229,7 +235,7 @@ describe("ErrorBoundary", () => { }); describe('"fallbackRender" render prop', () => { - let lastRenderedError: any = null; + let lastRenderedError: Error | null = null; let lastRenderedResetErrorBoundary: | FallbackProps["resetErrorBoundary"] | null = null; @@ -265,7 +271,7 @@ describe("ErrorBoundary", () => { it("should render fallback in the event of an error", () => { shouldThrow = true; render(); - expect(lastRenderedError.message).toBe("💥💥💥"); + expect(lastRenderedError?.message).toBe("💥💥💥"); expect(fallbackRender).toHaveBeenCalled(); expect(container.textContent).toBe("fallbackRender"); }); @@ -273,7 +279,7 @@ describe("ErrorBoundary", () => { it("should re-render children if boundary is reset via prop", () => { shouldThrow = true; render(); - expect(lastRenderedError.message).toBe("💥💥💥"); + expect(lastRenderedError?.message).toBe("💥💥💥"); expect(fallbackRender).toHaveBeenCalled(); expect(container.textContent).toBe("fallbackRender"); @@ -289,7 +295,7 @@ describe("ErrorBoundary", () => { it("should re-render children if boundary is reset reset keys", () => { shouldThrow = true; render({ resetKeys: [1] }); - expect(lastRenderedError.message).toBe("💥💥💥"); + expect(lastRenderedError?.message).toBe("💥💥💥"); expect(fallbackRender).toHaveBeenCalled(); expect(container.textContent).toBe("fallbackRender"); @@ -300,9 +306,9 @@ describe("ErrorBoundary", () => { }); describe("thrown values", () => { - let lastRenderedError: any = null; + let lastRenderedError: Error | null = null; let fallbackRender: (props: FallbackProps) => ReactElement; - let onError: Mock<(...args: any[]) => any>; + let onError: Mock<(...args: unknown[]) => unknown>; beforeEach(() => { lastRenderedError = null; diff --git a/src/ErrorBoundary.ts b/lib/components/ErrorBoundary.tsx similarity index 74% rename from src/ErrorBoundary.ts rename to lib/components/ErrorBoundary.tsx index f93dc373..93481e24 100644 --- a/src/ErrorBoundary.ts +++ b/lib/components/ErrorBoundary.tsx @@ -1,12 +1,13 @@ -import { isDevelopment } from "#is-development"; -import { Component, createElement, ErrorInfo } from "react"; -import { ErrorBoundaryContext } from "./ErrorBoundaryContext"; -import { ErrorBoundaryProps, FallbackProps } from "./types"; +import { Component, createElement, type ErrorInfo } from "react"; +import { ErrorBoundaryContext } from "../context/ErrorBoundaryContext"; +import type { ErrorBoundaryProps, FallbackProps } from "../types"; + +const isDevelopment = import.meta.env.DEV; type ErrorBoundaryState = | { didCatch: true; - error: any; + error: Error; } | { didCatch: false; @@ -18,6 +19,16 @@ const initialState: ErrorBoundaryState = { error: null, }; +/** + * A reusable React [error boundary](https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary) component. + * Wrap this component around other React components to "catch" errors and render a fallback UI. + * + * + * ℹ️ The component provides several ways to render a fallback: `fallback`, `fallbackRender`, and `FallbackComponent`. + * Refer to the documentation to determine which is best for your application. + * + * ℹ️ This is a **client component**. You can only pass props to it that are serializeable or use it in files that have a `"use client";` directive. + */ export class ErrorBoundary extends Component< ErrorBoundaryProps, ErrorBoundaryState @@ -33,7 +44,7 @@ export class ErrorBoundary extends Component< return { didCatch: true, error }; } - resetErrorBoundary(...args: any[]) { + resetErrorBoundary(...args: unknown[]) { const { error } = this.state; if (error !== null) { @@ -121,7 +132,7 @@ export class ErrorBoundary extends Component< } } -function hasArrayChanged(a: any[] = [], b: any[] = []) { +function hasArrayChanged(a: unknown[] = [], b: unknown[] = []) { return ( a.length !== b.length || a.some((item, index) => !Object.is(item, b[index])) ); diff --git a/src/ErrorBoundaryContext.ts b/lib/context/ErrorBoundaryContext.ts similarity index 72% rename from src/ErrorBoundaryContext.ts rename to lib/context/ErrorBoundaryContext.ts index aab7cad2..6ec98c53 100644 --- a/src/ErrorBoundaryContext.ts +++ b/lib/context/ErrorBoundaryContext.ts @@ -2,8 +2,8 @@ import { createContext } from "react"; export type ErrorBoundaryContextType = { didCatch: boolean; - error: any; - resetErrorBoundary: (...args: any[]) => void; + error: Error | null; + resetErrorBoundary: (...args: unknown[]) => void; }; export const ErrorBoundaryContext = diff --git a/lib/hooks/useErrorBoundary.test.tsx b/lib/hooks/useErrorBoundary.test.tsx new file mode 100644 index 00000000..377270eb --- /dev/null +++ b/lib/hooks/useErrorBoundary.test.tsx @@ -0,0 +1,91 @@ +import { act, useLayoutEffect, type ReactNode } from "react"; +import { createRoot } from "react-dom/client"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { ErrorBoundary } from "../components/ErrorBoundary"; +import { assert } from "../utils/assert"; +import { useErrorBoundary, type UseErrorBoundaryApi } from "./useErrorBoundary"; + +describe("useErrorBoundary", () => { + let container: HTMLDivElement; + + beforeEach(() => { + vi.spyOn(console, "error").mockImplementation(() => { + // Don't clutter the console with expected error text + }); + + container = document.createElement("div"); + }); + + function render(content: ReactNode) { + const root = createRoot(container); + act(() => { + root.render(content); + }); + return root; + } + + it("should activate and deactivate the nearest error boundary", () => { + let resetBoundaryFn: UseErrorBoundaryApi["resetBoundary"] | null = null; + let showBoundaryFn: UseErrorBoundaryApi["showBoundary"] | null = null; + + function Child() { + const { resetBoundary, showBoundary } = useErrorBoundary(); + + useLayoutEffect(() => { + resetBoundaryFn = resetBoundary; + showBoundaryFn = showBoundary; + }, [resetBoundary, showBoundary]); + + return
Child
; + } + + render( +
Fallback: {error.message}
} + > + +
+ ); + expect(container.textContent).toBe("Child"); + + act(() => { + assert(showBoundaryFn != null); + showBoundaryFn(new Error("Example")); + }); + expect(container.textContent).toBe("Fallback: Example"); + + act(() => { + assert(resetBoundaryFn != null); + resetBoundaryFn(); + }); + expect(container.textContent).toBe("Child"); + }); + + it("should expose the current error to a fallback component", () => { + const errorToThrow = new Error("Thrown"); + + function Child() { + const { error } = useErrorBoundary(); + expect(error).toBe(null); + + throw errorToThrow; + + return null; + } + + function Fallback() { + const { error } = useErrorBoundary(); + expect(error).toBe(errorToThrow); + + return "Fallback"; + } + + render( + + + + ); + + expect(container.textContent).toBe("Fallback"); + }); +}); diff --git a/lib/hooks/useErrorBoundary.ts b/lib/hooks/useErrorBoundary.ts new file mode 100644 index 00000000..253d24d6 --- /dev/null +++ b/lib/hooks/useErrorBoundary.ts @@ -0,0 +1,48 @@ +import { useContext, useMemo, useState } from "react"; +import { ErrorBoundaryContext } from "../context/ErrorBoundaryContext"; +import { assertErrorBoundaryContext } from "../utils/assertErrorBoundaryContext"; + +type UseErrorBoundaryState = + | { error: Error; hasError: true } + | { error: null; hasError: false }; + +export type UseErrorBoundaryApi = { + error: Error | null; + resetBoundary: () => void; + showBoundary: (error: Error) => void; +}; + +export function useErrorBoundary(): UseErrorBoundaryApi { + const context = useContext(ErrorBoundaryContext); + + assertErrorBoundaryContext(context); + + const { error, resetErrorBoundary } = context; + + const [state, setState] = useState({ + error: null, + hasError: false, + }); + + const memoized = useMemo( + () => ({ + error, + resetBoundary: () => { + resetErrorBoundary(); + setState({ error: null, hasError: false }); + }, + showBoundary: (error: Error) => + setState({ + error, + hasError: true, + }), + }), + [error, resetErrorBoundary] + ); + + if (state.hasError) { + throw state.error; + } + + return memoized; +} diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 00000000..b3739d7f --- /dev/null +++ b/lib/index.ts @@ -0,0 +1,17 @@ +"use client"; + +export { ErrorBoundary } from "./components/ErrorBoundary"; +export { ErrorBoundaryContext } from "./context/ErrorBoundaryContext"; +export { useErrorBoundary } from "./hooks/useErrorBoundary"; +export { withErrorBoundary } from "./utils/withErrorBoundary"; + +export type { ErrorBoundaryContextType } from "./context/ErrorBoundaryContext"; +export type { UseErrorBoundaryApi } from "./hooks/useErrorBoundary"; +export type { + ErrorBoundaryProps, + ErrorBoundaryPropsWithComponent, + ErrorBoundaryPropsWithFallback, + ErrorBoundaryPropsWithRender, + FallbackProps, + OnErrorCallback, +} from "./types"; diff --git a/lib/types.ts b/lib/types.ts new file mode 100644 index 00000000..4a6403ce --- /dev/null +++ b/lib/types.ts @@ -0,0 +1,87 @@ +import type { + ComponentType, + ErrorInfo, + PropsWithChildren, + ReactNode, +} from "react"; + +export type FallbackProps = { + error: Error; + resetErrorBoundary: (...args: unknown[]) => void; +}; + +export type OnErrorCallback = (error: Error, info: ErrorInfo) => void; + +type ErrorBoundarySharedProps = PropsWithChildren<{ + /** + * Optional callback to enable e.g. logging error information to a server. + * + * @param error Error that was thrown + * @param info React "component stack" identifying where the error was thrown + */ + onError?: (error: Error, info: ErrorInfo) => void; + + /** + * Optional callback to to be notified when an error boundary is "reset" so React can retry the failed render. + */ + onReset?: ( + details: + | { reason: "imperative-api"; args: unknown[] } + | { + reason: "keys"; + prev: unknown[] | undefined; + next: unknown[] | undefined; + } + ) => void; + + /** + * When changed, these keys will reset a triggered error boundary. + * This can be useful when an error condition may be tied to some specific state (that can be uniquely identified by key). + * See the the documentation for examples of how to use this prop. + */ + resetKeys?: unknown[]; +}>; + +export type ErrorBoundaryPropsWithComponent = ErrorBoundarySharedProps & { + fallback?: never; + /** + * React component responsible for returning a fallback UI based on a thrown value. + * + * ```tsx + * + * ``` + */ + FallbackComponent: ComponentType; + fallbackRender?: never; +}; + +export type ErrorBoundaryPropsWithRender = ErrorBoundarySharedProps & { + fallback?: never; + FallbackComponent?: never; + /** + * [Render prop](https://react.dev/reference/react/Children#calling-a-render-prop-to-customize-rendering) function responsible for returning a fallback UI based on a thrown value. + * + * ```tsx + *
...
} /> + * ``` + */ + fallbackRender: (props: FallbackProps) => ReactNode; +}; + +export type ErrorBoundaryPropsWithFallback = ErrorBoundarySharedProps & { + /** + * Static content to render in place of an error if one is thrown. + * + * ```tsx + * Something went wrong} /> + * ``` + */ + fallback: ReactNode; + FallbackComponent?: never; + fallbackRender?: never; +}; + +export type ErrorBoundaryProps = + | ErrorBoundaryPropsWithFallback + | ErrorBoundaryPropsWithComponent + | ErrorBoundaryPropsWithRender; diff --git a/lib/utils/assert.ts b/lib/utils/assert.ts new file mode 100644 index 00000000..9c70efc9 --- /dev/null +++ b/lib/utils/assert.ts @@ -0,0 +1,8 @@ +export function assert( + expectedCondition: unknown, + message: string = "Assertion error" +): asserts expectedCondition { + if (!expectedCondition) { + throw Error(message); + } +} diff --git a/lib/utils/assertErrorBoundaryContext.ts b/lib/utils/assertErrorBoundaryContext.ts new file mode 100644 index 00000000..610973b0 --- /dev/null +++ b/lib/utils/assertErrorBoundaryContext.ts @@ -0,0 +1,10 @@ +import type { ErrorBoundaryContextType } from "../context/ErrorBoundaryContext"; +import { isErrorBoundaryContext } from "./isErrorBoundaryContext"; + +export function assertErrorBoundaryContext( + value: unknown +): asserts value is ErrorBoundaryContextType { + if (!isErrorBoundaryContext(value)) { + throw new Error("ErrorBoundaryContext not found"); + } +} diff --git a/lib/utils/isErrorBoundaryContext.ts b/lib/utils/isErrorBoundaryContext.ts new file mode 100644 index 00000000..41bfd811 --- /dev/null +++ b/lib/utils/isErrorBoundaryContext.ts @@ -0,0 +1,15 @@ +import type { ErrorBoundaryContextType } from "../context/ErrorBoundaryContext"; + +export function isErrorBoundaryContext( + value: unknown +): value is ErrorBoundaryContextType { + return ( + value !== null && + typeof value === "object" && + "didCatch" in value && + typeof value.didCatch === "boolean" && + "error" in value && + "resetErrorBoundary" in value && + typeof value.resetErrorBoundary === "function" + ); +} diff --git a/src/withErrorBoundary.test.tsx b/lib/utils/withErrorBoundary.test.tsx similarity index 71% rename from src/withErrorBoundary.test.tsx rename to lib/utils/withErrorBoundary.test.tsx index 70277be0..940be2f8 100644 --- a/src/withErrorBoundary.test.tsx +++ b/lib/utils/withErrorBoundary.test.tsx @@ -1,14 +1,14 @@ -import { describe, beforeEach, vi, it, expect } from "vitest"; -import { Component, createRef, forwardRef, PropsWithChildren } from "react"; +import { Component, createRef, type PropsWithChildren } from "react"; import { createRoot } from "react-dom/client"; import { act } from "react-dom/test-utils"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { withErrorBoundary } from "./withErrorBoundary"; describe("withErrorBoundary", () => { let container: HTMLDivElement; let root: ReturnType; let shouldThrow = true; - let valueToThrow: any; + let valueToThrow: unknown; beforeEach(() => { // @ts-expect-error This is a React internal @@ -29,7 +29,7 @@ describe("withErrorBoundary", () => { if (shouldThrow) { throw valueToThrow; } - return children as any; + return children; } function render() { @@ -78,26 +78,4 @@ describe("withErrorBoundary", () => { expect(ref.current).not.toBeNull(); expect(typeof ref.current?.test).toBe("function"); }); - - it("should forward dom refs", () => { - type Props = { foo: string }; - - const Div = forwardRef((props, ref) => { - return
{props.foo}
; - }); - Div.displayName = "Div"; - - const Wrapped = withErrorBoundary(Div, { - fallback:
Error
, - }); - - const ref = createRef(); - - act(() => { - root.render(); - }); - - expect(ref.current).not.toBeNull(); - expect(ref.current).toBeInstanceOf(HTMLDivElement); - }); }); diff --git a/lib/utils/withErrorBoundary.ts b/lib/utils/withErrorBoundary.ts new file mode 100644 index 00000000..f7423b58 --- /dev/null +++ b/lib/utils/withErrorBoundary.ts @@ -0,0 +1,27 @@ +import { + createElement, + forwardRef, + type ComponentClass, + type ComponentType, +} from "react"; +import { ErrorBoundary } from "../components/ErrorBoundary"; +import type { ErrorBoundaryProps } from "../types"; + +export function withErrorBoundary< + Type extends ComponentClass, + Props extends object, +>(Component: ComponentType, errorBoundaryProps: ErrorBoundaryProps) { + const Wrapped = forwardRef, Props>((props, ref) => + createElement( + ErrorBoundary, + errorBoundaryProps, + createElement(Component, { ...props, ref } as Props) + ) + ); + + // Format for display in DevTools + const name = Component.displayName || Component.name || "Unknown"; + Wrapped.displayName = `withErrorBoundary(${name})`; + + return Wrapped; +} diff --git a/other/MAINTAINING.md b/other/MAINTAINING.md deleted file mode 100644 index 852f19da..00000000 --- a/other/MAINTAINING.md +++ /dev/null @@ -1,84 +0,0 @@ -# Maintaining - - - - -**Table of Contents** - -- [Code of Conduct](#code-of-conduct) -- [Issues](#issues) -- [Pull Requests](#pull-requests) -- [Release](#release) -- [Thanks!](#thanks) - - - -This is documentation for maintainers of this project. - -## Code of Conduct - -Please review, understand, and be an example of it. Violations of the code of -conduct are taken seriously, even (especially) for maintainers. - -## Issues - -We want to support and build the community. We do that best by helping people -learn to solve their own problems. We have an issue template and hopefully most -folks follow it. If it's not clear what the issue is, invite them to create a -minimal reproduction of what they're trying to accomplish or the bug they think -they've found. - -Once it's determined that a code change is necessary, point people to -[makeapullrequest.com](https://makeapullrequest.com) and invite them to make a -pull request. If they're the one who needs the feature, they're the one who can -build it. If they need some hand holding and you have time to lend a hand, -please do so. It's an investment into another human being, and an investment -into a potential maintainer. - -Remember that this is open source, so the code is not yours, it's ours. If -someone needs a change in the codebase, you don't have to make it happen -yourself. Commit as much time to the project as you want/need to. Nobody can ask -any more of you than that. - -## Pull Requests - -As a maintainer, you're fine to make your branches on the main repo or on your -own fork. Either way is fine. - -When we receive a pull request, a GitHub Action is kicked off automatically (see -the `.github/workflows/validate.yml` for what runs in the Action). We avoid -merging anything that breaks the GitHub Action. - -Please review PRs and focus on the code rather than the individual. You never -know when this is someone's first ever PR and we want their experience to be as -positive as possible, so be uplifting and constructive. - -When you merge the pull request, 99% of the time you should use the -[Squash and merge](https://help.github.com/articles/merging-a-pull-request/) -feature. This keeps our git history clean, but more importantly, this allows us -to make any necessary changes to the commit message so we release what we want -to release. See the next section on Releases for more about that. - -## Release - -Our releases are automatic. They happen whenever code lands into `main`. A -GitHub Action gets kicked off and if it's successful, a tool called -[`semantic-release`](https://github.com/semantic-release/semantic-release) is -used to automatically publish a new release to npm as well as a changelog to -GitHub. It is only able to determine the version and whether a release is -necessary by the git commit messages. With this in mind, **please brush up on -[the commit message convention][commit] which drives our releases.** - -> One important note about this: Please make sure that commit messages do NOT -> contain the words "BREAKING CHANGE" in them unless we want to push a major -> version. I've been burned by this more than once where someone will include -> "BREAKING CHANGE: None" and it will end up releasing a new major version. Not -> a huge deal honestly, but kind of annoying... - -## Thanks! - -Thank you so much for helping to maintain this project! - - -[commit]: https://github.com/conventional-changelog-archived-repos/conventional-changelog-angular/blob/ed32559941719a130bb0327f886d6a32a8cbc2ba/convention.md - diff --git a/other/USERS.md b/other/USERS.md deleted file mode 100644 index 4bc12816..00000000 --- a/other/USERS.md +++ /dev/null @@ -1,12 +0,0 @@ -# Users - -If you or your company uses this project, add your name to this list! Eventually -we may have a website to showcase these (wanna build it!?) - -> No users have been added yet! - - diff --git a/other/manual-releases.md b/other/manual-releases.md deleted file mode 100644 index 8b722dba..00000000 --- a/other/manual-releases.md +++ /dev/null @@ -1,44 +0,0 @@ -# manual-releases - -This project has an automated release set up. So things are only released when -there are useful changes in the code that justify a release. But sometimes -things get messed up one way or another and we need to trigger the release -ourselves. When this happens, simply bump the number below and commit that with -the following commit message based on your needs: - -**Major** - -``` -fix(release): manually release a major version - -There was an issue with a major release, so this manual-releases.md -change is to release a new major version. - -Reference: # - -BREAKING CHANGE: -``` - -**Minor** - -``` -feat(release): manually release a minor version - -There was an issue with a minor release, so this manual-releases.md -change is to release a new minor version. - -Reference: # -``` - -**Patch** - -``` -fix(release): manually release a patch version - -There was an issue with a patch release, so this manual-releases.md -change is to release a new patch version. - -Reference: # -``` - -The number of times we've had to do a manual release is: 0 diff --git a/package.json b/package.json index e6b43f79..4041e445 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "react-error-boundary", + "name": "react-error-boundary", "version": "6.0.0", "type": "module", "description": "Simple reusable React error boundary component", @@ -9,74 +9,124 @@ "type": "git", "url": "https://github.com/bvaughn/react-error-boundary" }, - "packageManager": "pnpm@9.6.0", - "exports": { - ".": { - "types": "./dist/react-error-boundary.js", - "development": "./dist/react-error-boundary.development.js", - "default": "./dist/react-error-boundary.js" - }, - "./package.json": "./package.json" - }, - "imports": { - "#is-development": { - "development": "./src/env-conditions/development.ts", - "default": "./src/env-conditions/production.ts" - } - }, + "contributors": [ + "Brian Vaughn (https://github.com/bvaughn/)" + ], + "homepage": "http://react-error-boundary.now.sh/", + "keywords": [ + "react", + "reactjs", + "virtual", + "window", + "windowed", + "list", + "scrolling", + "infinite", + "virtualized", + "table", + "grid", + "spreadsheet" + ], + "main": "dist/react-error-boundary.cjs", + "module": "dist/react-error-boundary.js", "types": "dist/react-error-boundary.d.ts", "files": [ "dist" ], - "sideEffects": false, "scripts": { - "clear": "pnpm clear:builds & pnpm clear:node_modules", - "clear:builds": "rimraf ./dist", - "clear:node_modules": "rimraf ./node_modules", - "prerelease": "preconstruct build", + "dev": "vite", + "dev:integrations": "pnpm -C integrations/vite/ run dev", + "build": "pnpm run build:lib && pnpm run build:docs", + "build:docs": "TARGET=docs vite build", + "build:lib": "TARGET=lib vite build", + "compile": "pnpm run compile:docs && pnpm run compile:examples", + "compile:docs": "tsx ./scripts/compile-docs", + "compile:examples": "tsx ./scripts/compile-examples", + "e2e:install": "pnpm -C integrations/vite/ exec playwright install --with-deps", + "e2e:test": "pnpm -C integrations/vite/ run test", "lint": "eslint .", - "lint:fix": "eslint . --fix", - "test": "vitest --environment=jsdom --watch=false", - "test:watch": "vitest --environment=jsdom --watch", - "typescript": "tsc --noEmit", - "typescript:watch": "tsc --noEmit --watch" + "prerelease": "rm -rf dist && pnpm run build:lib", + "prettier": "prettier --write \"**/*.{css,html,js,json,jsx,ts,tsx}\"", + "prettier:ci": "prettier --check \"**/*.{css,html,js,json,jsx,ts,tsx}\"", + "preview": "vite preview", + "test": "vitest", + "test:ci": "vitest run", + "test:debug": "vitest --inspect-brk=127.0.0.1:3000 --no-file-parallelism", + "tsc": "tsc -b" }, - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "devDependencies": { - "@babel/preset-env": "^7.22.5", - "@babel/preset-typescript": "^7.21.5", - "@preconstruct/cli": "^2.8.12", - "@types/assert": "^1.5.10", - "@types/react": "^18.3.17", - "@types/react-dom": "^18", - "assert": "^2.0.0", - "eslint": "^9.35.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.37.2", - "globals": "^15.11.0", - "prettier": "^3.0.1", - "react": "^18", - "react-dom": "^18", - "rimraf": "^6.0.1", - "typescript": "^5.8.3", - "typescript-eslint": "^8.43.0", - "vitest": "^3.1.2" + "lint-staged": { + "**/*": "prettier --write --ignore-unknown" }, "peerDependencies": { - "react": ">=16.13.1" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, - "preconstruct": { - "exports": { - "importConditionDefaultExport": "default" - }, - "___experimentalFlags_WILL_CHANGE_IN_PATCH": { - "distInRoot": true, - "importsConditions": true, - "typeModule": true - } + "devDependencies": { + "@codemirror/lang-css": "latest", + "@codemirror/lang-html": "latest", + "@codemirror/lang-javascript": "latest", + "@codemirror/lang-markdown": "latest", + "@codemirror/language": "latest", + "@codemirror/state": "latest", + "@csstools/postcss-oklab-function": "^4.0.11", + "@eslint/js": "^9.30.1", + "@headlessui/react": "^2.2.4", + "@headlessui/tailwindcss": "^0.2.2", + "@heroicons/react": "^2.2.0", + "@lezer/highlight": "latest", + "@tailwindcss/vite": "^4.1.11", + "@tailwindplus/elements": "^1.0.5", + "@testing-library/jest-dom": "^6.6.4", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@ts-ast-parser/core": "^0.8.0", + "@types/compression": "^1.8.1", + "@types/express": "^5.0.5", + "@types/markdown-it": "^14.1.2", + "@types/node": "^24.2.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react-swc": "^3.10.2", + "clsx": "^2.1.1", + "compression": "^1.8.1", + "csstype": "^3.1.3", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "express": "^5.1.0", + "globals": "^16.3.0", + "husky": "^9.1.7", + "jsdom": "^26.1.0", + "lint-staged": "^16.1.4", + "markdown-it": "^14.1.0", + "marked": "^16.4.1", + "postcss": "^8.5.6", + "prettier": "3.6.2", + "prettier-plugin-tailwindcss": "^0.7.1", + "react": "^19.2.3", + "react-docgen-typescript": "^2.4.0", + "react-dom": "^19.2.3", + "react-error-boundary": "^6.0.0", + "react-lib-tools": "^0.0.6", + "react-router-dom": "^7.6.3", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-visualizer": "^6.0.3", + "rollup-preserve-directives": "^1.1.3", + "sirv": "^3.0.2", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^4.1.11", + "terser": "^5.43.1", + "ts-blank-space": "^0.6.2", + "ts-node": "^10.9.2", + "tsx": "^4.21.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "typescript-json-schema": "^0.65.1", + "vite": "^7.0.4", + "vite-plugin-dts": "^4.5.4", + "vite-plugin-svgr": "^4.3.0", + "vitest": "^3.2.4", + "vitest-fail-on-console": "^0.10.1", + "zustand": "^5.0.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47c92886..d438f354 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,1196 +7,1369 @@ settings: importers: .: - dependencies: - '@babel/runtime': - specifier: ^7.12.5 - version: 7.22.6 devDependencies: - '@babel/preset-env': - specifier: ^7.22.5 - version: 7.22.6(@babel/core@7.22.6) - '@babel/preset-typescript': - specifier: ^7.21.5 - version: 7.22.5(@babel/core@7.22.6) - '@preconstruct/cli': - specifier: ^2.8.12 - version: 2.8.12 - '@types/assert': - specifier: ^1.5.10 - version: 1.5.10 + '@codemirror/lang-css': + specifier: latest + version: 6.3.1 + '@codemirror/lang-html': + specifier: latest + version: 6.4.11 + '@codemirror/lang-javascript': + specifier: latest + version: 6.2.4 + '@codemirror/lang-markdown': + specifier: latest + version: 6.5.0 + '@codemirror/language': + specifier: latest + version: 6.11.3 + '@codemirror/state': + specifier: latest + version: 6.5.2 + '@csstools/postcss-oklab-function': + specifier: ^4.0.11 + version: 4.0.11(postcss@8.5.6) + '@eslint/js': + specifier: ^9.30.1 + version: 9.39.2 + '@headlessui/react': + specifier: ^2.2.4 + version: 2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@headlessui/tailwindcss': + specifier: ^0.2.2 + version: 0.2.2(tailwindcss@4.1.17) + '@heroicons/react': + specifier: ^2.2.0 + version: 2.2.0(react@19.2.3) + '@lezer/highlight': + specifier: latest + version: 1.2.1 + '@tailwindcss/vite': + specifier: ^4.1.11 + version: 4.1.17(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)) + '@tailwindplus/elements': + specifier: ^1.0.5 + version: 1.0.19 + '@testing-library/jest-dom': + specifier: ^6.6.4 + version: 6.8.0 + '@testing-library/react': + specifier: ^16.3.0 + version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@testing-library/user-event': + specifier: ^14.6.1 + version: 14.6.1(@testing-library/dom@10.4.1) + '@ts-ast-parser/core': + specifier: ^0.8.0 + version: 0.8.0(typescript@5.8.3) + '@types/compression': + specifier: ^1.8.1 + version: 1.8.1 + '@types/express': + specifier: ^5.0.5 + version: 5.0.5 + '@types/markdown-it': + specifier: ^14.1.2 + version: 14.1.2 + '@types/node': + specifier: ^24.2.0 + version: 24.10.4 '@types/react': - specifier: ^18.3.17 - version: 18.3.18 + specifier: ^19.1.8 + version: 19.2.7 '@types/react-dom': - specifier: ^18 - version: 18.2.6 - assert: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) + '@vitejs/plugin-react-swc': + specifier: ^3.10.2 + version: 3.11.0(@swc/helpers@0.5.17)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)) + clsx: + specifier: ^2.1.1 + version: 2.1.1 + compression: + specifier: ^1.8.1 + version: 1.8.1 + csstype: + specifier: ^3.1.3 + version: 3.2.3 eslint: - specifier: ^9.35.0 - version: 9.35.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@9.35.0) - eslint-plugin-import: - specifier: ^2.25.2 - version: 2.28.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3))(eslint@9.35.0) - eslint-plugin-prettier: - specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.35.0))(eslint@9.35.0)(prettier@3.0.1) - eslint-plugin-react: - specifier: ^7.37.2 - version: 7.37.2(eslint@9.35.0) + specifier: ^9.30.1 + version: 9.39.2(jiti@2.6.1) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-react-refresh: + specifier: ^0.4.20 + version: 0.4.26(eslint@9.39.2(jiti@2.6.1)) + express: + specifier: ^5.1.0 + version: 5.1.0 globals: - specifier: ^15.11.0 - version: 15.11.0 + specifier: ^16.3.0 + version: 16.5.0 + husky: + specifier: ^9.1.7 + version: 9.1.7 + jsdom: + specifier: ^26.1.0 + version: 26.1.0 + lint-staged: + specifier: ^16.1.4 + version: 16.1.6 + markdown-it: + specifier: ^14.1.0 + version: 14.1.0 + marked: + specifier: ^16.4.1 + version: 16.4.1 + postcss: + specifier: ^8.5.6 + version: 8.5.6 prettier: - specifier: ^3.0.1 - version: 3.0.1 + specifier: 3.6.2 + version: 3.6.2 + prettier-plugin-tailwindcss: + specifier: ^0.7.1 + version: 0.7.1(prettier@3.6.2) react: - specifier: ^18 - version: 18.2.0 + specifier: ^19.2.3 + version: 19.2.3 + react-docgen-typescript: + specifier: ^2.4.0 + version: 2.4.0(typescript@5.8.3) react-dom: - specifier: ^18 - version: 18.2.0(react@18.2.0) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) + react-error-boundary: + specifier: ^6.0.0 + version: 6.0.0(react@19.2.3) + react-lib-tools: + specifier: ^0.0.6 + version: 0.0.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-router-dom: + specifier: ^7.6.3 + version: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + rollup-plugin-terser: + specifier: ^7.0.2 + version: 7.0.2(rollup@4.49.0) + rollup-plugin-visualizer: + specifier: ^6.0.3 + version: 6.0.3(rollup@4.49.0) + rollup-preserve-directives: + specifier: ^1.1.3 + version: 1.1.3(rollup@4.49.0) + sirv: + specifier: ^3.0.2 + version: 3.0.2 + tailwind-merge: + specifier: ^3.3.1 + version: 3.4.0 + tailwindcss: + specifier: ^4.1.11 + version: 4.1.17 + terser: + specifier: ^5.43.1 + version: 5.43.1 + ts-blank-space: + specifier: ^0.6.2 + version: 0.6.2 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.10.4)(typescript@5.8.3) + tsx: + specifier: ^4.21.0 + version: 4.21.0 typescript: - specifier: ^5.8.3 + specifier: ~5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.43.0 - version: 8.43.0(eslint@9.35.0)(typescript@5.8.3) + specifier: ^8.35.1 + version: 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + typescript-json-schema: + specifier: ^0.65.1 + version: 0.65.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) + vite: + specifier: ^7.0.4 + version: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + vite-plugin-dts: + specifier: ^4.5.4 + version: 4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.8.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)) + vite-plugin-svgr: + specifier: ^4.3.0 + version: 4.5.0(rollup@4.49.0)(typescript@5.8.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: ^3.1.2 - version: 3.1.2(@types/node@20.3.3)(jsdom@20.0.3)(terser@5.18.2) + specifier: ^3.2.4 + version: 3.2.4(@types/node@24.10.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + vitest-fail-on-console: + specifier: ^0.10.1 + version: 0.10.1(@vitest/utils@3.2.4)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1))(vitest@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)) + zustand: + specifier: ^5.0.7 + version: 5.0.9(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) packages: - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@babel/code-frame@7.22.5': - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@babel/compat-data@7.22.6': - resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/core@7.22.6': - resolution: {integrity: sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.22.5': - resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': - resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.22.6': - resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.22.6': - resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.22.6': - resolution: {integrity: sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.4.0': - resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} - peerDependencies: - '@babel/core': ^7.4.0-0 - - '@babel/helper-environment-visitor@7.22.5': - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.22.5': - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.22.5': - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.22.5': - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} - engines: {node: '>=6.9.0'} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true - '@babel/helper-module-transforms@7.22.5': - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + '@babel/runtime@7.28.3': + resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} engines: {node: '>=6.9.0'} - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.22.5': - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.22.5': - resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.22.5': - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} - engines: {node: '>=6.9.0'} + '@codemirror/autocomplete@6.18.7': + resolution: {integrity: sha512-8EzdeIoWPJDsMBwz3zdzwXnUpCzMiCyz5/A3FIPpriaclFCGDkAzK13sMcnsu5rowqiyeQN2Vs2TsOcoDPZirQ==} - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} + '@codemirror/lang-html@6.4.11': + resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==} - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} + '@codemirror/lang-javascript@6.2.4': + resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==} - '@babel/helper-string-parser@7.22.5': - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} + '@codemirror/lang-markdown@6.5.0': + resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} - '@babel/helper-validator-identifier@7.22.5': - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} + '@codemirror/language@6.11.3': + resolution: {integrity: sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==} - '@babel/helper-validator-option@7.22.5': - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} - engines: {node: '>=6.9.0'} + '@codemirror/lint@6.8.5': + resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} - '@babel/helper-wrap-function@7.22.5': - resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} - engines: {node: '>=6.9.0'} + '@codemirror/state@6.5.2': + resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} - '@babel/helpers@7.22.6': - resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} - engines: {node: '>=6.9.0'} + '@codemirror/view@6.38.2': + resolution: {integrity: sha512-bTWAJxL6EOFLPzTx+O5P5xAO3gTqpatQ2b/ARQ8itfU/v2LlpS3pH2fkL0A3E/Fx8Y2St2KES7ZEV0sHTsSW/A==} - '@babel/highlight@7.22.5': - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} - engines: {node: '>=6.9.0'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} - '@babel/parser@7.22.6': - resolution: {integrity: sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==} - engines: {node: '>=6.0.0'} - hasBin: true + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5': - resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} - engines: {node: '>=6.9.0'} + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5': - resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} - engines: {node: '>=6.9.0'} + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.13.0 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@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'} + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-tokenizer': ^3.0.4 - '@babel/plugin-proposal-unicode-property-regex@7.18.6': - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + '@csstools/postcss-oklab-function@4.0.11': + resolution: {integrity: sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig==} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0-0 + postcss: ^8.4 - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + '@csstools/postcss-progressive-custom-properties@4.2.0': + resolution: {integrity: sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA==} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0-0 + postcss: ^8.4 - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + '@csstools/utilities@2.0.0': + resolution: {integrity: sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0-0 + postcss: ^8.4 - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - '@babel/plugin-syntax-import-assertions@7.22.5': - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - '@babel/plugin-syntax-import-attributes@7.22.5': - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - '@babel/plugin-syntax-jsx@7.22.5': - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - '@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 + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - '@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 + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - '@babel/plugin-syntax-typescript@7.22.5': - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - '@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 + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] - '@babel/plugin-transform-arrow-functions@7.22.5': - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - '@babel/plugin-transform-async-generator-functions@7.22.5': - resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] - '@babel/plugin-transform-async-to-generator@7.22.5': - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - '@babel/plugin-transform-block-scoped-functions@7.22.5': - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] - '@babel/plugin-transform-block-scoping@7.22.5': - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] - '@babel/plugin-transform-class-properties@7.22.5': - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - '@babel/plugin-transform-class-static-block@7.22.5': - resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] - '@babel/plugin-transform-classes@7.22.6': - resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] - '@babel/plugin-transform-computed-properties@7.22.5': - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] - '@babel/plugin-transform-destructuring@7.22.5': - resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} - engines: {node: '>=6.9.0'} + '@eslint-community/eslint-utils@4.8.0': + resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@babel/core': ^7.0.0-0 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@babel/plugin-transform-dotall-regex@7.22.5': - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@babel/plugin-transform-duplicate-keys@7.22.5': - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-dynamic-import@7.22.5': - resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-exponentiation-operator@7.22.5': - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-export-namespace-from@7.22.5': - resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-for-of@7.22.5': - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-function-name@7.22.5': - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-json-strings@7.22.5': - resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@babel/plugin-transform-literals@7.22.5': - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@babel/plugin-transform-logical-assignment-operators@7.22.5': - resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - '@babel/plugin-transform-member-expression-literals@7.22.5': - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} - engines: {node: '>=6.9.0'} + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} peerDependencies: - '@babel/core': ^7.0.0-0 + react: '>=16.8.0' + react-dom: '>=16.8.0' - '@babel/plugin-transform-modules-amd@7.22.5': - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} - engines: {node: '>=6.9.0'} + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} peerDependencies: - '@babel/core': ^7.0.0-0 + react: '>=16.8.0' + react-dom: '>=16.8.0' - '@babel/plugin-transform-modules-commonjs@7.22.5': - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@babel/plugin-transform-modules-systemjs@7.22.5': - resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} - engines: {node: '>=6.9.0'} + '@headlessui/react@2.2.9': + resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==} + engines: {node: '>=10'} peerDependencies: - '@babel/core': ^7.0.0-0 + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc - '@babel/plugin-transform-modules-umd@7.22.5': - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} - engines: {node: '>=6.9.0'} + '@headlessui/tailwindcss@0.2.2': + resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==} + engines: {node: '>=10'} peerDependencies: - '@babel/core': ^7.0.0-0 + tailwindcss: ^3.0 || ^4.0 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} + '@heroicons/react@2.2.0': + resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==} peerDependencies: - '@babel/core': ^7.0.0 + react: '>= 16 || ^19.0.0-rc' - '@babel/plugin-transform-new-target@7.22.5': - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - '@babel/plugin-transform-nullish-coalescing-operator@7.22.5': - resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} - '@babel/plugin-transform-numeric-separator@7.22.5': - resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} - '@babel/plugin-transform-object-rest-spread@7.22.5': - resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} - '@babel/plugin-transform-object-super@7.22.5': - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} - '@babel/plugin-transform-optional-catch-binding@7.22.5': - resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} - '@babel/plugin-transform-optional-chaining@7.22.6': - resolution: {integrity: sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@babel/plugin-transform-parameters@7.22.5': - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - '@babel/plugin-transform-private-methods@7.22.5': - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - '@babel/plugin-transform-private-property-in-object@7.22.5': - resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@babel/plugin-transform-property-literals@7.22.5': - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@babel/plugin-transform-regenerator@7.22.5': - resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} - '@babel/plugin-transform-reserved-words@7.22.5': - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@babel/plugin-transform-shorthand-properties@7.22.5': - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} - '@babel/plugin-transform-spread@7.22.5': - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/css@1.3.0': + resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==} - '@babel/plugin-transform-sticky-regex@7.22.5': - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/highlight@1.2.1': + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} - '@babel/plugin-transform-template-literals@7.22.5': - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/html@1.3.12': + resolution: {integrity: sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==} - '@babel/plugin-transform-typeof-symbol@7.22.5': - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/javascript@1.5.2': + resolution: {integrity: sha512-oJDMyptbtS/zhSi/uOszsqCm7/0l6QpbnvjoXBgNiFlk4NHrqoP/+psiVxYKYe9GHRr6K7jBSxwmIW61TrtZOQ==} - '@babel/plugin-transform-typescript@7.22.5': - resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/lr@1.4.2': + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} - '@babel/plugin-transform-unicode-escapes@7.22.5': - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@lezer/markdown@1.6.1': + resolution: {integrity: sha512-72ah+Sml7lD8Wn7lnz9vwYmZBo9aQT+I2gjK/0epI+gjdwUbWw3MJ/ZBGEqG1UfrIauRqH37/c5mVHXeCTGXtA==} - '@babel/plugin-transform-unicode-property-regex@7.22.5': - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} - '@babel/plugin-transform-unicode-regex@7.22.5': - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@microsoft/api-extractor-model@7.30.7': + resolution: {integrity: sha512-TBbmSI2/BHpfR9YhQA7nH0nqVmGgJ0xH0Ex4D99/qBDAUpnhA2oikGmdXanbw9AWWY/ExBYIpkmY8dBHdla3YQ==} - '@babel/plugin-transform-unicode-sets-regex@7.22.5': - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@microsoft/api-extractor@7.52.13': + resolution: {integrity: sha512-K6/bBt8zZfn9yc06gNvA+/NlBGJC/iJlObpdufXHEJtqcD4Dln4ITCLZpwP3DNZ5NyBFeTkKdv596go3V72qlA==} + hasBin: true - '@babel/preset-env@7.22.6': - resolution: {integrity: sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} - '@babel/preset-modules@0.1.5': - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + '@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'} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@react-aria/focus@3.21.2': + resolution: {integrity: sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==} peerDependencies: - '@babel/core': ^7.0.0-0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@babel/preset-typescript@7.22.5': - resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} - engines: {node: '>=6.9.0'} + '@react-aria/interactions@3.25.6': + resolution: {integrity: sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==} peerDependencies: - '@babel/core': ^7.0.0-0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + '@react-aria/ssr@3.9.10': + resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@babel/runtime@7.22.6': - resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} - engines: {node: '>=6.9.0'} + '@react-aria/utils@3.31.0': + resolution: {integrity: sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@babel/template@7.22.5': - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} - engines: {node: '>=6.9.0'} + '@react-stately/flags@3.1.2': + resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} - '@babel/traverse@7.22.6': - resolution: {integrity: sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==} - engines: {node: '>=6.9.0'} + '@react-stately/utils@3.10.8': + resolution: {integrity: sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@babel/types@7.22.5': - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} - engines: {node: '>=6.9.0'} + '@react-types/shared@3.32.1': + resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@esbuild/aix-ppc64@0.25.3': - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@esbuild/android-arm64@0.25.3': - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true - '@esbuild/android-arm@0.25.3': - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} - engines: {node: '>=18'} + '@rollup/rollup-android-arm-eabi@4.49.0': + resolution: {integrity: sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.3': - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} - engines: {node: '>=18'} - cpu: [x64] + '@rollup/rollup-android-arm64@4.49.0': + resolution: {integrity: sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==} + cpu: [arm64] os: [android] - '@esbuild/darwin-arm64@0.25.3': - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} - engines: {node: '>=18'} + '@rollup/rollup-darwin-arm64@4.49.0': + resolution: {integrity: sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.3': - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} - engines: {node: '>=18'} + '@rollup/rollup-darwin-x64@4.49.0': + resolution: {integrity: sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.3': - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} - engines: {node: '>=18'} + '@rollup/rollup-freebsd-arm64@4.49.0': + resolution: {integrity: sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} - engines: {node: '>=18'} + '@rollup/rollup-freebsd-x64@4.49.0': + resolution: {integrity: sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.3': - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} - engines: {node: '>=18'} - cpu: [arm64] + '@rollup/rollup-linux-arm-gnueabihf@4.49.0': + resolution: {integrity: sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==} + cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.3': - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} - engines: {node: '>=18'} + '@rollup/rollup-linux-arm-musleabihf@4.49.0': + resolution: {integrity: sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.3': - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} - engines: {node: '>=18'} - cpu: [ia32] + '@rollup/rollup-linux-arm64-gnu@4.49.0': + resolution: {integrity: sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==} + cpu: [arm64] os: [linux] - '@esbuild/linux-loong64@0.25.3': - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} - engines: {node: '>=18'} - cpu: [loong64] + '@rollup/rollup-linux-arm64-musl@4.49.0': + resolution: {integrity: sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==} + cpu: [arm64] os: [linux] - '@esbuild/linux-mips64el@0.25.3': - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} - engines: {node: '>=18'} - cpu: [mips64el] + '@rollup/rollup-linux-loongarch64-gnu@4.49.0': + resolution: {integrity: sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==} + cpu: [loong64] os: [linux] - '@esbuild/linux-ppc64@0.25.3': - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} - engines: {node: '>=18'} + '@rollup/rollup-linux-ppc64-gnu@4.49.0': + resolution: {integrity: sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.3': - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} - engines: {node: '>=18'} + '@rollup/rollup-linux-riscv64-gnu@4.49.0': + resolution: {integrity: sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.3': - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} - engines: {node: '>=18'} - cpu: [s390x] + '@rollup/rollup-linux-riscv64-musl@4.49.0': + resolution: {integrity: sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==} + cpu: [riscv64] os: [linux] - '@esbuild/linux-x64@0.25.3': - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} - engines: {node: '>=18'} - cpu: [x64] + '@rollup/rollup-linux-s390x-gnu@4.49.0': + resolution: {integrity: sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==} + cpu: [s390x] os: [linux] - '@esbuild/netbsd-arm64@0.25.3': - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.3': - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} - engines: {node: '>=18'} + '@rollup/rollup-linux-x64-gnu@4.49.0': + resolution: {integrity: sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==} cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.3': - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.3': - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] + os: [linux] - '@esbuild/sunos-x64@0.25.3': - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} - engines: {node: '>=18'} + '@rollup/rollup-linux-x64-musl@4.49.0': + resolution: {integrity: sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==} cpu: [x64] - os: [sunos] + os: [linux] - '@esbuild/win32-arm64@0.25.3': - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} - engines: {node: '>=18'} + '@rollup/rollup-win32-arm64-msvc@4.49.0': + resolution: {integrity: sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.3': - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} - engines: {node: '>=18'} + '@rollup/rollup-win32-ia32-msvc@4.49.0': + resolution: {integrity: sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.3': - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} - engines: {node: '>=18'} + '@rollup/rollup-win32-x64-msvc@4.49.0': + resolution: {integrity: sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@rushstack/node-core-library@5.14.0': + resolution: {integrity: sha512-eRong84/rwQUlATGFW3TMTYVyqL1vfW9Lf10PH+mVGfIb9HzU3h5AASNIw+axnBLjnD0n3rT5uQBwu9fvzATrg==} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.3.1': - resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.2': - resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@eslint/js@9.35.0': - resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@rushstack/terminal@0.16.0': + resolution: {integrity: sha512-WEvNuKkoR1PXorr9SxO0dqFdSp1BA+xzDrIm/Bwlc5YHg2FFg6oS+uCTYjerOhFuqCW+A3vKBm6EmKWSHfgx/A==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@rushstack/ts-command-line@5.0.3': + resolution: {integrity: sha512-bgPhQEqLVv/2hwKLYv/XvsTWNZ9B/+X1zJ7WgQE9rO5oiLzrOZvkIW4pk13yOQBhHyjcND5qMOa6p83t+Z66iQ==} - '@eslint/plugin-kit@0.3.5': - resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} + '@svgr/babel-plugin-svg-dynamic-title@8.0.0': + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@svgr/babel-plugin-svg-em-dimensions@8.0.0': + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@svgr/babel-plugin-transform-react-native-svg@8.1.0': + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/resolve-uri@3.1.0': - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} + '@svgr/babel-plugin-transform-svg-component@8.0.0': + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + '@svgr/babel-preset@8.1.0': + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@jridgewell/source-map@0.3.5': - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + '@svgr/core@8.1.0': + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} - '@jridgewell/sourcemap-codec@1.4.14': - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + '@svgr/hast-util-to-babel-ast@8.0.0': + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@svgr/plugin-jsx@8.1.0': + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' - '@jridgewell/trace-mapping@0.3.18': - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + '@swc/core-darwin-arm64@1.13.5': + resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] - '@nicolo-ribaudo/semver-v6@6.3.3': - resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} - hasBin: true + '@swc/core-darwin-x64@1.13.5': + resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@swc/core-linux-arm-gnueabihf@1.13.5': + resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@swc/core-linux-arm64-gnu@1.13.5': + resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@swc/core-linux-arm64-musl@1.13.5': + resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@swc/core-linux-x64-gnu@1.13.5': + resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] - '@preconstruct/cli@2.8.12': - resolution: {integrity: sha512-SMsMICUWROmu/vb4cmrk7EJUiWhgNjB3U3tM654K9bu9yECXqrPN473vliO7KPV3CSLhmtl3S4nfcMirEJmyZg==} - hasBin: true + '@swc/core-linux-x64-musl@1.13.5': + resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] - '@preconstruct/hook@0.4.0': - resolution: {integrity: sha512-a7mrlPTM3tAFJyz43qb4pPVpUx8j8TzZBFsNFqcKcE/sEakNXRlQAuCT4RGZRf9dQiiUnBahzSIWawU4rENl+Q==} + '@swc/core-win32-arm64-msvc@1.13.5': + resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] - '@rollup/plugin-alias@3.1.9': - resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} - engines: {node: '>=8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@swc/core-win32-ia32-msvc@1.13.5': + resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] - '@rollup/plugin-commonjs@15.1.0': - resolution: {integrity: sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^2.22.0 + '@swc/core-win32-x64-msvc@1.13.5': + resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] - '@rollup/plugin-json@4.1.0': - resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + '@swc/core@1.13.5': + resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==} + engines: {node: '>=10'} peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true - '@rollup/plugin-node-resolve@11.2.1': - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@rollup/plugin-replace@2.4.2': - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@rollup/pluginutils@3.1.0': - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@rollup/rollup-android-arm-eabi@4.40.1': - resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} - cpu: [arm] - os: [android] + '@tailwindcss/node@4.1.17': + resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} - '@rollup/rollup-android-arm64@4.40.1': - resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} + '@tailwindcss/oxide-android-arm64@4.1.17': + resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.40.1': - resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} + '@tailwindcss/oxide-darwin-arm64@4.1.17': + resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.1': - resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} + '@tailwindcss/oxide-darwin-x64@4.1.17': + resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.40.1': - resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.40.1': - resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} + '@tailwindcss/oxide-freebsd-x64@4.1.17': + resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} + engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': - resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.40.1': - resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} + engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.1': - resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.1': - resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': - resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': - resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.40.1': - resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.40.1': - resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.40.1': - resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.40.1': - resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.1': - resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.40.1': - resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.1': - resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.40.1': - resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + '@tailwindcss/oxide@4.1.17': + resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} engines: {node: '>= 10'} - '@types/assert@1.5.10': - resolution: {integrity: sha512-qEO+AUgYab7GVbeDDgUNCU3o0aZUoIMpNAe+w5LDbRxfxQX7vQAdDgwj1AroX+i8KaV56FWg0srXlSZROnsrIQ==} + '@tailwindcss/vite@4.1.17': + resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + + '@tailwindplus/elements@1.0.19': + resolution: {integrity: sha512-JMtqgYmZYNXO3VWu+SFxt2DChD/FL2A42jEhkUC9maQpFjfi0rhLm8lBFFo39Xbe9dwH0rT3fOi6DhSNFFnuzA==} + + '@tanstack/react-virtual@3.13.12': + resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/virtual-core@3.13.12': + resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.8.0': + resolution: {integrity: sha512-WgXcWzVM6idy5JaftTVC8Vs83NKRmGJz4Hqs4oyOuO2J4r/y79vvKZsb+CaGyCSEbUPI6OsewfPd0G1A0/TUZQ==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.3.0': + resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@ts-ast-parser/comment@0.2.0': + resolution: {integrity: sha512-W/nxZGgoK0HS90Zuy5tg4I2TF6izsW3U8jIHk+M9dEvpBjvVMLOZCmZbaewsOsu8xA11vAiLAD4IMBjLMuUwcQ==} + engines: {node: 18.x || 20.x || 21.x} + + '@ts-ast-parser/core@0.8.0': + resolution: {integrity: sha512-UN78bQwfayfefhJ5f3Z7GnSTh7/oKC1G/Fp5BIR6NxP8EebEC8DRmtSDIBwO6nnLVJjI69W0R57Fa3/EzgtcvA==} + engines: {node: 18.x || 20.x || 21.x} + peerDependencies: + typescript: ^4.6.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + + '@types/compression@1.8.1': + resolution: {integrity: sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/estree@0.0.39': - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + '@types/express-serve-static-core@5.1.0': + resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/express@5.0.5': + resolution: {integrity: sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + + '@types/node@24.10.4': + resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} + + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/node@20.3.3': - resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} - '@types/react-dom@18.2.6': - resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==} + '@types/send@0.17.6': + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} - '@types/react@18.3.18': - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - '@types/resolve@1.17.1': - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} - '@typescript-eslint/eslint-plugin@8.43.0': - resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} + '@typescript-eslint/eslint-plugin@8.50.0': + resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.43.0 + '@typescript-eslint/parser': ^8.50.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.43.0': - resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} + '@typescript-eslint/parser@8.50.0': + resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.43.0': - resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} + '@typescript-eslint/project-service@8.50.0': + resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.43.0': - resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} + '@typescript-eslint/scope-manager@8.50.0': + resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.43.0': - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} + '@typescript-eslint/tsconfig-utils@8.50.0': + resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.43.0': - resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} + '@typescript-eslint/type-utils@8.50.0': + resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.43.0': - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} + '@typescript-eslint/types@8.50.0': + resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.43.0': - resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} + '@typescript-eslint/typescript-estree@8.50.0': + resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.43.0': - resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} + '@typescript-eslint/utils@8.50.0': + resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.43.0': - resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + '@typescript-eslint/visitor-keys@8.50.0': + resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/expect@3.1.2': - resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==} + '@vitejs/plugin-react-swc@3.11.0': + resolution: {integrity: sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==} + peerDependencies: + vite: ^4 || ^5 || ^6 || ^7 + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@3.1.2': - resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.2': - resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@volar/language-core@2.4.23': + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} - '@vitest/runner@3.1.2': - resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==} + '@volar/source-map@2.4.23': + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} - '@vitest/snapshot@3.1.2': - resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==} + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} - '@vitest/spy@3.1.2': - resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==} + '@vue/compiler-core@3.5.22': + resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} - '@vitest/utils@3.1.2': - resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==} + '@vue/compiler-dom@3.5.22': + resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} - abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/shared@3.5.22': + resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1207,123 +1380,96 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + + ansi-escapes@7.1.0: + resolution: {integrity: sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==} + engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - 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'} - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.2: - resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} - engines: {node: '>= 0.4'} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - assert@2.0.0: - resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-plugin-polyfill-corejs2@0.4.3: - resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - babel-plugin-polyfill-corejs3@0.8.1: - resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - babel-plugin-polyfill-regenerator@0.5.0: - resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -1332,17 +1478,17 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + browserslist@4.25.4: + resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} @@ -1352,120 +1498,151 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001512: - resolution: {integrity: sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + caniuse-lite@1.0.30001739: + resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.0: + resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + 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'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - core-js-compat@3.31.0: - resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - - cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - - data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1491,70 +1668,74 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} - domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.449: - resolution: {integrity: sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==} + electron-to-chromium@1.5.214: + resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} + + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} - enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1563,120 +1744,39 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.1.0: - resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} - engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - es6-object-assign@1.1.0: - resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} - - esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.28.0: - resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react@7.37.2: - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} - engines: {node: '>=4'} + eslint-plugin-react-refresh@0.4.26: + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint: '>=8.40' eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} @@ -1690,8 +1790,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.35.0: - resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1704,11 +1804,6 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -1721,9 +1816,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -1734,23 +1826,27 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} - fast-deep-equal@2.0.1: - resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -1761,11 +1857,12 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1780,6 +1877,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1788,23 +1889,20 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + engines: {node: '>=14.14'} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1817,20 +1915,17 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} @@ -1840,16 +1935,8 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - glob-base@0.3.0: - resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==} - engines: {node: '>=0.10.0'} - - glob-parent@2.0.0: - resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1859,33 +1946,21 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@11.0.0: - resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} - engines: {node: 20 || >=22} - 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'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.11.0: - resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} @@ -1894,66 +1969,47 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ignore-walk@3.0.4: - resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1966,10 +2022,18 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + 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. @@ -1977,98 +2041,42 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-dotfile@1.0.3: - resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==} - engines: {node: '>=0.10.0'} - - is-extglob@1.0.0: - resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} - engines: {node: '>=0.10.0'} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} - is-glob@2.0.1: - resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} - engines: {node: '>=0.10.0'} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2076,85 +2084,49 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} - engines: {node: '>= 0.4'} - - jackspeak@4.0.2: - resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} - engines: {node: 20 || >=22} - jest-worker@26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} peerDependencies: - canvas: ^2.5.0 + canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: @@ -2166,69 +2138,187 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + 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==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + lint-staged@16.1.6: + resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.3: + resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==} + engines: {node: '>=20.0.0'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} - lru-cache@11.0.1: - resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} - engines: {node: 20 || >=22} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + marked@16.4.1: + resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} + engines: {node: '>= 20'} + hasBin: true math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -2240,16 +2330,24 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} minimatch@3.1.2: @@ -2259,16 +2357,26 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} + engines: {node: '>=20.17'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2277,65 +2385,46 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} - npm-bundled@1.1.2: - resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} - npm-normalize-package-bin@1.0.1: - resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - npm-packlist@2.2.2: - resolution: {integrity: sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==} - engines: {node: '>=10'} - hasBin: true + node-releases@2.0.20: + resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} nwsapi@2.2.22: resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.0: - resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -2348,17 +2437,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-glob@3.0.4: - resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==} - engines: {node: '>=0.10.0'} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2366,6 +2448,16 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-equal@1.2.5: + resolution: {integrity: sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2381,15 +2473,23 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} picocolors@1.1.1: @@ -2399,144 +2499,254 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + prettier-plugin-tailwindcss@0.7.1: + resolution: {integrity: sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==} + engines: {node: '>=20.19'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-svelte: + optional: true - prettier@3.0.1: - resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} + peerDependencies: + typescript: '>= 4.3.x' - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + peerDependencies: + react: ^19.2.3 - regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} + react-error-boundary@6.0.0: + resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==} + peerDependencies: + react: '>=16.13.1' - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + react-lib-tools@0.0.6: + resolution: {integrity: sha512-1oJB9AqKSL/wmUzBr98PDXeNCuWhKFZs1A+XDOQsNbgSscXPSmoHle0D+sNmRwjKw5Fw5JHKYPcpISaVIwk/3g==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 - regenerator-transform@0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + react-router-dom@7.10.1: + resolution: {integrity: sha512-JNBANI6ChGVjA5bwsUIwJk7LHKmqB4JYnYfzFwyp2t12Izva11elds2jx7Yfoup2zssedntwU0oZ5DEmk5Sdaw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} + react-router@7.10.1: + resolution: {integrity: sha512-gHL89dRa3kwlUYtRQ+m8NmxGI6CgqN+k4XyGjwcFoQwwCWF6xXpOCUlDovkXClS0d0XJN/5q7kc5W3kiFEd0Yw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + engines: {node: '>=0.10.0'} - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + + rollup-plugin-visualizer@6.0.3: + resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} + engines: {node: '>=18'} hasBin: true + peerDependencies: + rolldown: 1.x || ^1.0.0-beta + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup-preserve-directives@1.1.3: + resolution: {integrity: sha512-oXqxd6ZzkoQej8Qt0k+S/yvO2+S4CEVEVv2g85oL15o0cjAKTKEuo2MzyA8FcsBBXbtytBzBMFAbhvQg4YyPUQ==} + peerDependencies: + rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.40.1: - resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} + rollup@4.49.0: + resolution: {integrity: sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2545,30 +2755,39 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -2578,8 +2797,20 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -2589,9 +2820,24 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -2604,41 +2850,38 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + 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'} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -2648,35 +2891,53 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} 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'} + svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} + tabbable@6.3.0: + resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} + + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + + tailwindcss@4.1.17: + resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} - terser@5.18.2: - resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==} + tapable@2.2.3: + resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} + engines: {node: '>=6'} + + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true @@ -2686,37 +2947,48 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} @@ -2724,73 +2996,92 @@ packages: peerDependencies: typescript: '>=4.8.4' - tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + ts-blank-space@0.6.2: + resolution: {integrity: sha512-hZjcHdHrveEKI67v8OzI90a1bizgoDkY7ekE4fH89qJhZgxvmjfBOv98aibCU7OpKbvV3R9p/qd3DrzZqT1cFQ==} + engines: {node: '>=18.0.0'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tslib@2.8.0: - resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} - typescript-eslint@8.43.0: - resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} + typescript-eslint@8.50.0: + resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + typescript-json-schema@0.65.1: + resolution: {integrity: sha512-tuGH7ff2jPaUYi6as3lHyHcKpSmXIqN7/mu50x3HlYn0EHzLpmt3nplZ7EuhUkO0eqDRc9GqWNkfjgBPIS9kxg==} + hasBin: true + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.0.11: - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2798,33 +3089,50 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - v8-compile-cache@2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} - vite-node@3.1.2: - resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.3.4: - resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite-plugin-dts@4.5.4: + resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite-plugin-svgr@4.5.0: + resolution: {integrity: sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==} + peerDependencies: + vite: '>=2.6.0' + + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -2852,16 +3160,23 @@ packages: yaml: optional: true - vitest@3.1.2: - resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} + vitest-fail-on-console@0.10.1: + resolution: {integrity: sha512-Xjy2SpgND547qSy0s0zYVnh1G/WyGtdjAbi4PFV8mkYRmTq+6NzRUJYdc08BHrw7HJLpO2kMxHFB8PWn7FOVsg==} + peerDependencies: + '@vitest/utils': '>=0.26.2' + vite: '>=4.5.2' + vitest: '>=0.26.2' + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.2 - '@vitest/ui': 3.1.2 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2880,40 +3195,31 @@ packages: jsdom: optional: true - w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} - whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -2933,9 +3239,9 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2952,1181 +3258,1099 @@ packages: utf-8-validate: optional: true - xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + 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'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.21.4: - resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + zustand@5.0.9: + resolution: {integrity: sha512-ALBtUj0AfjJt3uNRQoL1tL2tMvj6Gp/6e39dnfT6uzpelGru8v1tPOGBzayOWbPJvujM8JojDk3E1LxeFisBNg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true snapshots: - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@adobe/css-tools@4.4.4': {} - '@babel/code-frame@7.22.5': + '@asamuzakjp/css-color@3.2.0': dependencies: - '@babel/highlight': 7.22.5 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 - '@babel/compat-data@7.22.6': {} - - '@babel/core@7.22.6': + '@babel/code-frame@7.27.1': dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.6) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.6 - '@babel/parser': 7.22.6 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.6 - '@babel/types': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - convert-source-map: 1.9.0 - debug: 4.4.0 + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.4': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + 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.22.5': + '@babel/generator@7.28.5': dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.22.5': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/types': 7.22.5 + '@babel/compat-data': 7.28.4 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.4 + lru-cache: 5.1.1 + semver: 6.3.1 - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': - dependencies: - '@babel/types': 7.22.5 + '@babel/helper-globals@7.28.0': {} - '@babel/helper-compilation-targets@7.22.6(@babel/core@7.22.6)': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.6 - '@babel/helper-validator-option': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - browserslist: 4.21.9 - lru-cache: 5.1.1 - - '@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@nicolo-ribaudo/semver-v6': 6.3.3 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.22.6(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - regexpu-core: 5.3.2 - - '@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.6)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.4.0 - lodash.debounce: 4.0.8 - resolve: 1.22.4 - semver: 6.3.1 + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.22.5': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-function-name@7.22.5': - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 + '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.22.5 + '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-member-expression-to-functions@7.22.5': + '@babel/helpers@7.28.4': dependencies: - '@babel/types': 7.22.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 - '@babel/helper-module-imports@7.22.5': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.28.5 - '@babel/helper-module-transforms@7.22.5': - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.6 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + '@babel/runtime@7.28.3': {} - '@babel/helper-optimise-call-expression@7.22.5': + '@babel/template@7.27.2': dependencies: - '@babel/types': 7.22.5 - - '@babel/helper-plugin-utils@7.22.5': {} + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 - '@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.6)': + '@babel/traverse@7.28.5': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-wrap-function': 7.22.5 - '@babel/types': 7.22.5 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.22.5': + '@babel/types@7.28.5': dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.6 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 - '@babel/helper-simple-access@7.22.5': + '@codemirror/autocomplete@6.18.7': dependencies: - '@babel/types': 7.22.5 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.2 + '@lezer/common': 1.2.3 - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + '@codemirror/lang-css@6.3.1': dependencies: - '@babel/types': 7.22.5 + '@codemirror/autocomplete': 6.18.7 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.2.3 + '@lezer/css': 1.3.0 - '@babel/helper-split-export-declaration@7.22.6': + '@codemirror/lang-html@6.4.11': dependencies: - '@babel/types': 7.22.5 - - '@babel/helper-string-parser@7.22.5': {} + '@codemirror/autocomplete': 6.18.7 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.2 + '@lezer/common': 1.2.3 + '@lezer/css': 1.3.0 + '@lezer/html': 1.3.12 - '@babel/helper-validator-identifier@7.22.5': {} - - '@babel/helper-validator-option@7.22.5': {} - - '@babel/helper-wrap-function@7.22.5': + '@codemirror/lang-javascript@6.2.4': dependencies: - '@babel/helper-function-name': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.6 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + '@codemirror/autocomplete': 6.18.7 + '@codemirror/language': 6.11.3 + '@codemirror/lint': 6.8.5 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.2 + '@lezer/common': 1.2.3 + '@lezer/javascript': 1.5.2 - '@babel/helpers@7.22.6': + '@codemirror/lang-markdown@6.5.0': dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.6 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + '@codemirror/autocomplete': 6.18.7 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.2 + '@lezer/common': 1.2.3 + '@lezer/markdown': 1.6.1 - '@babel/highlight@7.22.5': + '@codemirror/language@6.11.3': dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + style-mod: 4.1.2 - '@babel/parser@7.22.6': + '@codemirror/lint@6.8.5': dependencies: - '@babel/types': 7.22.5 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.2 + crelt: 1.0.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.6)': + '@codemirror/state@6.5.2': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@marijn/find-cluster-break': 1.0.2 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.6)': + '@codemirror/view@6.38.2': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.6) + '@codemirror/state': 6.5.2 + crelt: 1.0.6 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.6)': + '@cspotcode/source-map-support@0.8.1': dependencies: - '@babel/core': 7.22.6 + '@jridgewell/trace-mapping': 0.3.9 - '@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 + '@csstools/color-helpers@5.1.0': {} - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.6)': + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.6)': + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.6)': + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@csstools/css-tokenizer': 3.0.4 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@csstools/css-tokenizer@3.0.4': {} - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.6)': + '@csstools/postcss-oklab-function@4.0.11(postcss@8.5.6)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) + '@csstools/utilities': 2.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.6)': + '@csstools/postcss-progressive-custom-properties@4.2.0(postcss@8.5.6)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 - '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.6)': + '@csstools/utilities@2.0.0(postcss@8.5.6)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + postcss: 8.5.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/aix-ppc64@0.27.2': + optional: true - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/android-arm64@0.27.2': + optional: true - '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/android-arm@0.27.2': + optional: true - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/android-x64@0.27.2': + optional: true - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/darwin-arm64@0.27.2': + optional: true - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/darwin-x64@0.27.2': + optional: true - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/freebsd-arm64@0.27.2': + optional: true - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/freebsd-x64@0.27.2': + optional: true - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/linux-arm64@0.27.2': + optional: true - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/linux-arm@0.27.2': + optional: true - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/linux-ia32@0.27.2': + optional: true - '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/linux-loong64@0.27.2': + optional: true - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/linux-mips64el@0.27.2': + optional: true - '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true - '@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.22.6)': + '@eslint-community/eslint-utils@4.8.0(eslint@9.39.2(jiti@2.6.1))': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.6) - transitivePeerDependencies: - - supports-color + eslint: 9.39.2(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 - '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.6)': + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.1': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.6) + '@eslint/object-schema': 2.1.7 + debug: 4.4.1 + minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.6)': + '@eslint/config-helpers@0.4.2': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@eslint/core': 0.17.0 - '@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.6)': + '@eslint/core@0.17.0': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@types/json-schema': 7.0.15 - '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.6)': + '@eslint/eslintrc@3.3.1': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 + ajv: 6.12.6 + debug: 4.4.1 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.6) - transitivePeerDependencies: - - supports-color + '@eslint/js@9.39.2': {} - '@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.6) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@eslint/object-schema@2.1.7': {} - '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.6)': + '@eslint/plugin-kit@0.4.1': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 + '@eslint/core': 0.17.0 + levn: 0.4.1 - '@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.6)': + '@floating-ui/core@1.7.3': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@floating-ui/utils': 0.2.10 - '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.6)': + '@floating-ui/dom@1.7.4': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 - '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.6)': + '@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@floating-ui/dom': 1.7.4 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.6)': + '@floating-ui/react@0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.6) + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@floating-ui/utils': 0.2.10 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + tabbable: 6.3.0 - '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@floating-ui/utils@0.2.10': {} - '@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.6)': + '@headlessui/react@2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.6) + '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/focus': 3.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@tanstack/react-virtual': 3.13.12(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) - '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.6)': + '@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.17)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + tailwindcss: 4.1.17 - '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.6)': + '@heroicons/react@2.2.0(react@19.2.3)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.6) - '@babel/helper-function-name': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + react: 19.2.3 - '@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.6) + '@humanfs/core@0.19.1': {} - '@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.6)': + '@humanfs/node@0.16.7': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 - '@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.6) + '@humanwhocodes/module-importer@1.0.1': {} - '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@humanwhocodes/retry@0.4.3': {} - '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color + '@isaacs/balanced-match@4.0.1': {} - '@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.6)': + '@isaacs/brace-expansion@5.0.0': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - transitivePeerDependencies: - - supports-color + '@isaacs/balanced-match': 4.0.1 - '@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.6)': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - transitivePeerDependencies: - - supports-color + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 - '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.6)': + '@jridgewell/remapping@2.3.5': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 + '@jridgewell/resolve-uri@3.1.2': {} - '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.6)': + '@jridgewell/source-map@0.3.11': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 - '@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.6) + '@jridgewell/sourcemap-codec@1.5.5': {} - '@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.6)': + '@jridgewell/trace-mapping@0.3.30': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.6) + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - '@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.6)': + '@jridgewell/trace-mapping@0.3.9': dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.6) + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - transitivePeerDependencies: - - supports-color + '@lezer/common@1.2.3': {} - '@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.6)': + '@lezer/css@1.3.0': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.6) + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 - '@babel/plugin-transform-optional-chaining@7.22.6(@babel/core@7.22.6)': + '@lezer/highlight@1.2.1': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.6) + '@lezer/common': 1.2.3 - '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.6)': + '@lezer/html@1.3.12': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 - '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.6)': + '@lezer/javascript@1.5.2': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 - '@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.6)': + '@lezer/lr@1.4.2': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.6) - transitivePeerDependencies: - - supports-color + '@lezer/common': 1.2.3 - '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.6)': + '@lezer/markdown@1.6.1': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 - '@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.1 + '@marijn/find-cluster-break@1.0.2': {} - '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.6)': + '@microsoft/api-extractor-model@7.30.7(@types/node@24.10.4)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.14.0(@types/node@24.10.4) + transitivePeerDependencies: + - '@types/node' - '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@microsoft/api-extractor@7.52.13(@types/node@24.10.4)': + dependencies: + '@microsoft/api-extractor-model': 7.30.7(@types/node@24.10.4) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.14.0(@types/node@24.10.4) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.16.0(@types/node@24.10.4) + '@rushstack/ts-command-line': 5.0.3(@types/node@24.10.4) + lodash: 4.17.21 + minimatch: 10.0.3 + resolve: 1.22.10 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.8.2 + transitivePeerDependencies: + - '@types/node' - '@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.6)': + '@microsoft/tsdoc-config@0.17.1': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@microsoft/tsdoc': 0.15.1 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.10 - '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@microsoft/tsdoc@0.15.1': {} - '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.6)': + '@nodelib/fs.scandir@2.1.5': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 + '@nodelib/fs.stat@2.0.5': {} - '@babel/plugin-transform-typescript@7.22.5(@babel/core@7.22.6)': + '@nodelib/fs.walk@1.2.8': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.6) - transitivePeerDependencies: - - supports-color + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 - '@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.6)': - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/preset-env@7.22.6(@babel/core@7.22.6)': - dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.6) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.6) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.6) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.6) - '@babel/preset-modules': 0.1.5(@babel/core@7.22.6) - '@babel/types': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.6) - babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.6) - babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.6) - core-js-compat: 3.31.0 - transitivePeerDependencies: - - supports-color + '@polka/url@1.0.0-next.29': {} - '@babel/preset-modules@0.1.5(@babel/core@7.22.6)': + '@react-aria/focus@3.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.6) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.6) - '@babel/types': 7.22.5 - esutils: 2.0.3 + '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@babel/preset-typescript@7.22.5(@babel/core@7.22.6)': + '@react-aria/interactions@3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/core': 7.22.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.6) - '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.6) - transitivePeerDependencies: - - supports-color - - '@babel/regjsgen@0.8.0': {} + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@babel/runtime@7.22.6': + '@react-aria/ssr@3.9.10(react@19.2.3)': dependencies: - regenerator-runtime: 0.13.11 + '@swc/helpers': 0.5.17 + react: 19.2.3 - '@babel/template@7.22.5': + '@react-aria/utils@3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.6 - '@babel/types': 7.22.5 + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-stately/utils': 3.10.8(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - '@babel/traverse@7.22.6': + '@react-stately/flags@3.1.2': dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.6 - '@babel/types': 7.22.5 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@swc/helpers': 0.5.17 - '@babel/types@7.22.5': + '@react-stately/utils@3.10.8(react@19.2.3)': dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - - '@esbuild/aix-ppc64@0.25.3': - optional: true - - '@esbuild/android-arm64@0.25.3': - optional: true - - '@esbuild/android-arm@0.25.3': - optional: true - - '@esbuild/android-x64@0.25.3': - optional: true - - '@esbuild/darwin-arm64@0.25.3': - optional: true - - '@esbuild/darwin-x64@0.25.3': - optional: true - - '@esbuild/freebsd-arm64@0.25.3': - optional: true - - '@esbuild/freebsd-x64@0.25.3': - optional: true - - '@esbuild/linux-arm64@0.25.3': - optional: true - - '@esbuild/linux-arm@0.25.3': - optional: true - - '@esbuild/linux-ia32@0.25.3': - optional: true - - '@esbuild/linux-loong64@0.25.3': - optional: true - - '@esbuild/linux-mips64el@0.25.3': - optional: true - - '@esbuild/linux-ppc64@0.25.3': - optional: true + '@swc/helpers': 0.5.17 + react: 19.2.3 - '@esbuild/linux-riscv64@0.25.3': - optional: true + '@react-types/shared@3.32.1(react@19.2.3)': + dependencies: + react: 19.2.3 - '@esbuild/linux-s390x@0.25.3': - optional: true + '@rolldown/pluginutils@1.0.0-beta.27': {} - '@esbuild/linux-x64@0.25.3': - optional: true + '@rollup/pluginutils@5.3.0(rollup@4.49.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.49.0 - '@esbuild/netbsd-arm64@0.25.3': + '@rollup/rollup-android-arm-eabi@4.49.0': optional: true - '@esbuild/netbsd-x64@0.25.3': + '@rollup/rollup-android-arm64@4.49.0': optional: true - '@esbuild/openbsd-arm64@0.25.3': + '@rollup/rollup-darwin-arm64@4.49.0': optional: true - '@esbuild/openbsd-x64@0.25.3': + '@rollup/rollup-darwin-x64@4.49.0': optional: true - '@esbuild/sunos-x64@0.25.3': + '@rollup/rollup-freebsd-arm64@4.49.0': optional: true - '@esbuild/win32-arm64@0.25.3': + '@rollup/rollup-freebsd-x64@4.49.0': optional: true - '@esbuild/win32-ia32@0.25.3': + '@rollup/rollup-linux-arm-gnueabihf@4.49.0': optional: true - '@esbuild/win32-x64@0.25.3': + '@rollup/rollup-linux-arm-musleabihf@4.49.0': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0)': - dependencies: - eslint: 9.35.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.21.0': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.3.1': {} - - '@eslint/core@0.15.2': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + '@rollup/rollup-linux-arm64-gnu@4.49.0': + optional: true - '@eslint/js@9.35.0': {} + '@rollup/rollup-linux-arm64-musl@4.49.0': + optional: true - '@eslint/object-schema@2.1.6': {} + '@rollup/rollup-linux-loongarch64-gnu@4.49.0': + optional: true - '@eslint/plugin-kit@0.3.5': - dependencies: - '@eslint/core': 0.15.2 - levn: 0.4.1 + '@rollup/rollup-linux-ppc64-gnu@4.49.0': + optional: true - '@humanfs/core@0.19.1': {} + '@rollup/rollup-linux-riscv64-gnu@4.49.0': + optional: true - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@rollup/rollup-linux-riscv64-musl@4.49.0': + optional: true - '@humanwhocodes/module-importer@1.0.1': {} + '@rollup/rollup-linux-s390x-gnu@4.49.0': + optional: true - '@humanwhocodes/retry@0.3.1': {} + '@rollup/rollup-linux-x64-gnu@4.49.0': + optional: true - '@humanwhocodes/retry@0.4.3': {} + '@rollup/rollup-linux-x64-musl@4.49.0': + 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 + '@rollup/rollup-win32-arm64-msvc@4.49.0': + optional: true - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.18 + '@rollup/rollup-win32-ia32-msvc@4.49.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.49.0': + optional: true - '@jridgewell/resolve-uri@3.1.0': {} + '@rushstack/node-core-library@5.14.0(@types/node@24.10.4)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) + fs-extra: 11.3.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.10 + semver: 7.5.4 + optionalDependencies: + '@types/node': 24.10.4 - '@jridgewell/set-array@1.1.2': {} + '@rushstack/rig-package@0.5.3': + dependencies: + resolve: 1.22.10 + strip-json-comments: 3.1.1 - '@jridgewell/source-map@0.3.5': + '@rushstack/terminal@0.16.0(@types/node@24.10.4)': dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@rushstack/node-core-library': 5.14.0(@types/node@24.10.4) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 24.10.4 - '@jridgewell/sourcemap-codec@1.4.14': {} + '@rushstack/ts-command-line@5.0.3(@types/node@24.10.4)': + dependencies: + '@rushstack/terminal': 0.16.0(@types/node@24.10.4) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' - '@jridgewell/sourcemap-codec@1.5.0': {} + '@sindresorhus/merge-streams@2.3.0': {} - '@jridgewell/trace-mapping@0.3.18': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)': dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@babel/core': 7.28.5 - '@nicolo-ribaudo/semver-v6@6.3.3': {} + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 - '@nodelib/fs.scandir@2.1.5': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.5)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@babel/core': 7.28.5 - '@nodelib/fs.stat@2.0.5': {} + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 - '@nodelib/fs.walk@1.2.8': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.5)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgr/core@0.1.1': {} - - '@preconstruct/cli@2.8.12': - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/core': 7.22.6 - '@babel/helper-module-imports': 7.22.5 - '@babel/runtime': 7.22.6 - '@preconstruct/hook': 0.4.0 - '@rollup/plugin-alias': 3.1.9(rollup@2.79.1) - '@rollup/plugin-commonjs': 15.1.0(rollup@2.79.1) - '@rollup/plugin-json': 4.1.0(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - builtin-modules: 3.3.0 - chalk: 4.1.2 - ci-info: 3.8.0 - dataloader: 2.2.2 - detect-indent: 6.1.0 - enquirer: 2.3.6 - estree-walker: 2.0.2 - fast-deep-equal: 2.0.1 - fast-glob: 3.3.2 - fs-extra: 9.1.0 - is-reference: 1.2.1 - jest-worker: 26.6.2 - magic-string: 0.30.17 - ms: 2.1.3 - normalize-path: 3.0.0 - npm-packlist: 2.2.2 - p-limit: 3.1.0 - parse-glob: 3.0.4 - parse-json: 5.2.0 - quick-lru: 5.1.1 - resolve-from: 5.0.0 - rollup: 2.79.1 - semver: 7.6.3 - terser: 5.18.2 - v8-compile-cache: 2.3.0 - zod: 3.21.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.28.5 - '@preconstruct/hook@0.4.0': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.22.6 - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.6) - pirates: 4.0.6 - source-map-support: 0.5.21 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.28.5 - '@rollup/plugin-alias@3.1.9(rollup@2.79.1)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.5)': dependencies: - rollup: 2.79.1 - slash: 3.0.0 + '@babel/core': 7.28.5 - '@rollup/plugin-commonjs@15.1.0(rollup@2.79.1)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.5)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.4 - rollup: 2.79.1 + '@babel/core': 7.28.5 - '@rollup/plugin-json@4.1.0(rollup@2.79.1)': + '@svgr/babel-preset@8.1.0(@babel/core@7.28.5)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 + '@babel/core': 7.28.5 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.5) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.5) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.5) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.5) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.5) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.5) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.5) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.5) - '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1)': + '@svgr/core@8.1.0(typescript@5.8.3)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.4 - rollup: 2.79.1 + '@babel/core': 7.28.5 + '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5) + camelcase: 6.3.0 + cosmiconfig: 8.3.6(typescript@5.8.3) + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + - typescript - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 + '@babel/types': 7.28.5 + entities: 4.5.0 - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))': dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 + '@babel/core': 7.28.5 + '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5) + '@svgr/core': 8.1.0(typescript@5.8.3) + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@swc/core-darwin-arm64@1.13.5': + optional: true - '@rollup/rollup-android-arm-eabi@4.40.1': + '@swc/core-darwin-x64@1.13.5': optional: true - '@rollup/rollup-android-arm64@4.40.1': + '@swc/core-linux-arm-gnueabihf@1.13.5': optional: true - '@rollup/rollup-darwin-arm64@4.40.1': + '@swc/core-linux-arm64-gnu@1.13.5': optional: true - '@rollup/rollup-darwin-x64@4.40.1': + '@swc/core-linux-arm64-musl@1.13.5': optional: true - '@rollup/rollup-freebsd-arm64@4.40.1': + '@swc/core-linux-x64-gnu@1.13.5': optional: true - '@rollup/rollup-freebsd-x64@4.40.1': + '@swc/core-linux-x64-musl@1.13.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': + '@swc/core-win32-arm64-msvc@1.13.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.1': + '@swc/core-win32-ia32-msvc@1.13.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.1': + '@swc/core-win32-x64-msvc@1.13.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.1': + '@swc/core@1.13.5(@swc/helpers@0.5.17)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.13.5 + '@swc/core-darwin-x64': 1.13.5 + '@swc/core-linux-arm-gnueabihf': 1.13.5 + '@swc/core-linux-arm64-gnu': 1.13.5 + '@swc/core-linux-arm64-musl': 1.13.5 + '@swc/core-linux-x64-gnu': 1.13.5 + '@swc/core-linux-x64-musl': 1.13.5 + '@swc/core-win32-arm64-msvc': 1.13.5 + '@swc/core-win32-ia32-msvc': 1.13.5 + '@swc/core-win32-x64-msvc': 1.13.5 + '@swc/helpers': 0.5.17 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@swc/types@0.1.25': + dependencies: + '@swc/counter': 0.1.3 + + '@tailwindcss/node@4.1.17': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.17 + + '@tailwindcss/oxide-android-arm64@4.1.17': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': + '@tailwindcss/oxide-darwin-arm64@4.1.17': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': + '@tailwindcss/oxide-darwin-x64@4.1.17': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.1': + '@tailwindcss/oxide-freebsd-x64@4.1.17': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.1': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.1': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.1': + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': optional: true - '@rollup/rollup-linux-x64-musl@4.40.1': + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.1': + '@tailwindcss/oxide-linux-x64-musl@4.1.17': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.1': + '@tailwindcss/oxide-wasm32-wasi@4.1.17': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.1': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': optional: true - '@tootallnate/once@2.0.0': + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': optional: true - '@types/assert@1.5.10': {} + '@tailwindcss/oxide@4.1.17': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-x64': 4.1.17 + '@tailwindcss/oxide-freebsd-x64': 4.1.17 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-x64-musl': 4.1.17 + '@tailwindcss/oxide-wasm32-wasi': 4.1.17 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 + + '@tailwindcss/vite@4.1.17(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1))': + dependencies: + '@tailwindcss/node': 4.1.17 + '@tailwindcss/oxide': 4.1.17 + tailwindcss: 4.1.17 + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + + '@tailwindplus/elements@1.0.19': {} + + '@tanstack/react-virtual@3.13.12(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@tanstack/virtual-core': 3.13.12 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@tanstack/virtual-core@3.13.12': {} + + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.28.3 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.8.0': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@babel/runtime': 7.28.3 + '@testing-library/dom': 10.4.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + + '@ts-ast-parser/comment@0.2.0': + dependencies: + tslib: 2.8.1 + + '@ts-ast-parser/core@0.8.0(typescript@5.8.3)': + dependencies: + '@ts-ast-parser/comment': 0.2.0 + globby: 14.1.0 + tslib: 2.8.1 + typescript: 5.8.3 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/argparse@1.0.38': {} + + '@types/aria-query@5.0.4': {} + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 24.10.4 + + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + + '@types/compression@1.8.1': + dependencies: + '@types/express': 5.0.5 + '@types/node': 24.10.4 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 24.10.4 + + '@types/deep-eql@4.0.2': {} - '@types/estree@0.0.39': {} + '@types/estree@1.0.8': {} + + '@types/express-serve-static-core@5.1.0': + dependencies: + '@types/node': 24.10.4 + '@types/qs': 6.14.0 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 + + '@types/express@5.0.5': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.1.0 + '@types/serve-static': 1.15.10 - '@types/estree@1.0.7': {} + '@types/http-errors@2.0.5': {} '@types/json-schema@7.0.15': {} - '@types/json5@0.0.29': {} + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdurl@2.0.0': {} + + '@types/mime@1.3.5': {} + + '@types/node@18.19.130': + dependencies: + undici-types: 5.26.5 + + '@types/node@24.10.4': + dependencies: + undici-types: 7.16.0 + + '@types/qs@6.14.0': {} + + '@types/range-parser@1.2.7': {} - '@types/node@20.3.3': {} + '@types/react-dom@19.2.3(@types/react@19.2.7)': + dependencies: + '@types/react': 19.2.7 - '@types/prop-types@15.7.5': {} + '@types/react@19.2.7': + dependencies: + csstype: 3.2.3 - '@types/react-dom@18.2.6': + '@types/send@0.17.6': dependencies: - '@types/react': 18.3.18 + '@types/mime': 1.3.5 + '@types/node': 24.10.4 - '@types/react@18.3.18': + '@types/send@1.2.1': dependencies: - '@types/prop-types': 15.7.5 - csstype: 3.1.2 + '@types/node': 24.10.4 - '@types/resolve@1.17.1': + '@types/serve-static@1.15.10': dependencies: - '@types/node': 20.3.3 + '@types/http-errors': 2.0.5 + '@types/node': 24.10.4 + '@types/send': 0.17.6 - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3))(eslint@9.35.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.43.0 - eslint: 9.35.0 - graphemer: 1.4.0 + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.50.0 + eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) @@ -4134,130 +4358,180 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.1 - eslint: 9.35.0 + eslint: 9.39.2(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.43.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.50.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.8.3) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3) + '@typescript-eslint/types': 8.50.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.43.0': + '@typescript-eslint/scope-manager@8.50.0': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.8.3) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.35.0 + eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.43.0': {} + '@typescript-eslint/types@8.50.0': {} - '@typescript-eslint/typescript-estree@8.43.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.50.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.8.3) - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/project-service': 8.50.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.3 + tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.43.0(eslint@9.35.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.8.3) - eslint: 9.35.0 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.43.0': + '@typescript-eslint/visitor-keys@8.50.0': dependencies: - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.50.0 eslint-visitor-keys: 4.2.1 - '@vitest/expect@3.1.2': + '@vitejs/plugin-react-swc@3.11.0(@swc/helpers@0.5.17)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.27 + '@swc/core': 1.13.5(@swc/helpers@0.5.17) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + transitivePeerDependencies: + - '@swc/helpers' + + '@vitest/expect@3.2.4': dependencies: - '@vitest/spy': 3.1.2 - '@vitest/utils': 3.1.2 - chai: 5.2.0 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.2(vite@6.3.4(@types/node@20.3.3)(terser@5.18.2))': + '@vitest/mocker@3.2.4(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1))': dependencies: - '@vitest/spy': 3.1.2 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: - vite: 6.3.4(@types/node@20.3.3)(terser@5.18.2) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) - '@vitest/pretty-format@3.1.2': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.2': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.1.2 + '@vitest/utils': 3.2.4 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.1.2': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.2 - magic-string: 0.30.17 + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.1.2': + '@vitest/spy@3.2.4': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@3.1.2': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.2 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 tinyrainbow: 2.0.0 - abab@2.0.6: - optional: true + '@volar/language-core@2.4.23': + dependencies: + '@volar/source-map': 2.4.23 + + '@volar/source-map@2.4.23': {} - acorn-globals@7.0.1: + '@volar/typescript@2.4.23': dependencies: - acorn: 8.15.0 - acorn-walk: 8.3.4 - optional: true + '@volar/language-core': 2.4.23 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/compiler-core@3.5.22': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.22 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.22': + dependencies: + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/language-core@2.2.0(typescript@5.8.3)': + dependencies: + '@volar/language-core': 2.4.23 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.22 + alien-signals: 0.4.14 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.8.3 + + '@vue/shared@3.5.22': {} + + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -4266,18 +4540,18 @@ snapshots: acorn-walk@8.3.4: dependencies: acorn: 8.15.0 - optional: true - - acorn@8.14.0: {} acorn@8.15.0: {} - agent-base@6.0.2: - dependencies: - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - optional: true + agent-base@7.1.4: {} + + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 ajv@6.12.6: dependencies: @@ -4286,141 +4560,75 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-colors@4.1.3: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@3.2.1: + ajv@8.12.0: dependencies: - color-convert: 1.9.3 + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 - ansi-styles@4.3.0: + ajv@8.13.0: dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - argparse@2.0.1: {} + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + alien-signals@0.4.14: {} - array-includes@3.1.8: + ansi-escapes@7.1.0: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 + environment: 1.1.0 - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + ansi-regex@5.0.1: {} - array.prototype.findlastindex@1.2.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.4 + ansi-regex@6.2.0: {} - array.prototype.flat@1.3.2: + ansi-styles@4.3.0: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + color-convert: 2.0.1 - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + ansi-styles@5.2.0: {} - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 + ansi-styles@6.2.1: {} - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + arg@4.1.3: {} - assert@2.0.0: + argparse@1.0.10: dependencies: - es6-object-assign: 1.1.0 - is-nan: 1.3.2 - object-is: 1.1.5 - util: 0.12.5 - - assertion-error@2.0.1: {} - - asynckit@0.4.0: - optional: true + sprintf-js: 1.0.3 - at-least-node@1.0.0: {} + argparse@2.0.1: {} - available-typed-arrays@1.0.7: + aria-query@5.3.0: dependencies: - possible-typed-array-names: 1.0.0 + dequal: 2.0.3 - babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.6): - dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.6 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + aria-query@5.3.2: {} - babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.6): - dependencies: - '@babel/core': 7.22.6 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.6) - core-js-compat: 3.31.0 - transitivePeerDependencies: - - supports-color + assertion-error@2.0.1: {} + + balanced-match@1.0.2: {} - babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.6): + body-parser@2.2.0: dependencies: - '@babel/core': 7.22.6 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.6) + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.1 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 transitivePeerDependencies: - supports-color - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -4429,16 +4637,16 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.21.9: + browserslist@4.25.4: dependencies: - caniuse-lite: 1.0.30001512 - electron-to-chromium: 1.4.449 - node-releases: 2.0.12 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + caniuse-lite: 1.0.30001739 + electron-to-chromium: 1.5.214 + node-releases: 2.0.20 + update-browserslist-db: 1.1.3(browserslist@4.25.4) buffer-from@1.1.2: {} - builtin-modules@3.3.0: {} + bytes@3.1.2: {} cac@6.7.14: {} @@ -4446,432 +4654,253 @@ snapshots: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - optional: true - call-bind@1.0.7: + call-bound@1.0.4: dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 callsites@3.1.0: {} - caniuse-lite@1.0.30001512: {} + camelcase@6.3.0: {} - chai@5.2.0: + caniuse-lite@1.0.30001739: {} + + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + loupe: 3.2.1 + pathval: 2.0.1 chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.0: {} + check-error@2.1.1: {} - ci-info@3.8.0: {} + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 - color-convert@1.9.3: + cliui@8.0.1: dependencies: - color-name: 1.1.3 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - optional: true + colorette@2.0.20: {} + + commander@14.0.0: {} commander@2.20.3: {} - commondir@1.0.1: {} + compare-versions@6.1.1: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color concat-map@0.0.1: {} - convert-source-map@1.9.0: {} + confbox@0.1.8: {} - core-js-compat@3.31.0: - dependencies: - browserslist: 4.21.9 + confbox@0.2.2: {} - cross-spawn@7.0.3: + content-disposition@1.0.0: dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + safe-buffer: 5.2.1 - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + content-type@1.0.5: {} - cssom@0.3.8: - optional: true + convert-source-map@2.0.0: {} - cssom@0.5.0: - optional: true + cookie-signature@1.2.2: {} - cssstyle@2.3.0: - dependencies: - cssom: 0.3.8 - optional: true + cookie@0.7.2: {} - csstype@3.1.2: {} + cookie@1.0.2: {} - data-urls@3.0.2: + cosmiconfig@8.3.6(typescript@5.8.3): dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - optional: true + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.8.3 - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 + create-require@1.1.1: {} - data-view-byte-length@1.0.1: + crelt@1.0.6: {} + + cross-spawn@7.0.6: dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - data-view-byte-offset@1.0.0: + css.escape@1.5.1: {} + + cssstyle@4.6.0: dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 - dataloader@2.2.2: {} + csstype@3.2.3: {} - debug@3.2.7: + data-urls@5.0.0: dependencies: - ms: 2.1.3 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + + de-indent@1.0.2: {} - debug@4.4.0: + debug@2.6.9: dependencies: - ms: 2.1.3 + ms: 2.0.0 debug@4.4.1: dependencies: ms: 2.1.3 - decimal.js@10.6.0: - optional: true + decimal.js@10.6.0: {} deep-eql@5.0.2: {} deep-is@0.1.4: {} - deepmerge@4.3.1: {} + define-lazy-prop@2.0.0: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 + depd@2.0.0: {} - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 + dequal@2.0.3: {} - delayed-stream@1.0.0: - optional: true + detect-libc@2.1.2: {} - detect-indent@6.1.0: {} + diff@4.0.2: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} - domexception@4.0.0: + dot-case@3.0.4: dependencies: - webidl-conversions: 7.0.0 - optional: true + no-case: 3.0.4 + tslib: 2.8.1 dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - optional: true - eastasianwidth@0.2.0: {} + ee-first@1.1.1: {} + + electron-to-chromium@1.5.214: {} - electron-to-chromium@1.4.449: {} + emoji-regex@10.5.0: {} emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} + encodeurl@2.0.0: {} - enquirer@2.3.6: + enhanced-resolve@5.18.3: dependencies: - ansi-colors: 4.1.3 + graceful-fs: 4.2.11 + tapable: 2.2.3 - entities@6.0.1: - optional: true + entities@4.5.0: {} + + entities@6.0.1: {} + + environment@1.1.0: {} error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-define-property@1.0.1: - optional: true + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.1.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 - es-module-lexer@1.7.0: {} - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - optional: true - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - optional: true - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - es6-object-assign@1.1.0: {} - esbuild@0.25.3: + esbuild@0.27.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 - - escalade@3.1.1: {} - - escape-string-regexp@1.0.5: {} + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} escape-string-regexp@4.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - optional: true - - eslint-config-prettier@9.1.0(eslint@9.35.0): - dependencies: - eslint: 9.35.0 - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.4 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - eslint: 9.35.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.28.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3))(eslint@9.35.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.2 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.35.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0) - has: 1.0.3 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.0 - object.values: 1.2.0 - resolve: 1.22.4 - semver: 6.3.1 - tsconfig-paths: 3.14.2 - optionalDependencies: - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.35.0))(eslint@9.35.0)(prettier@3.0.1): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.6.1)): dependencies: - eslint: 9.35.0 - prettier: 3.0.1 - prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 - optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.35.0) + eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-react@7.37.2(eslint@9.35.0): + eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)): dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.1.0 - eslint: 9.35.0 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - string.prototype.repeat: 1.0.0 + eslint: 9.39.2(jiti@2.6.1) eslint-scope@8.4.0: dependencies: @@ -4882,25 +4911,24 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.35.0: + eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.1 - '@eslint/core': 0.15.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.35.0 - '@eslint/plugin-kit': 0.3.5 - '@humanfs/node': 0.16.6 + '@eslint/js': 9.39.2 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 + '@types/estree': 1.0.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -4919,6 +4947,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -4928,9 +4958,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - esprima@4.0.1: - optional: true - esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4941,31 +4968,55 @@ snapshots: estraverse@5.3.0: {} - estree-walker@1.0.1: {} - estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} - expect-type@1.2.1: {} + etag@1.8.1: {} - fast-deep-equal@2.0.1: {} - - fast-deep-equal@3.1.3: {} + eventemitter3@5.0.1: {} - fast-diff@1.3.0: {} + expect-type@1.2.2: {} - fast-glob@3.3.2: + express@5.1.0: 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 + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.7: {} + + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: dependencies: @@ -4979,13 +5030,13 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.15.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 file-entry-cache@8.0.0: dependencies: @@ -4995,6 +5046,17 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@2.1.0: + dependencies: + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -5002,35 +5064,20 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.3 keyv: 4.5.4 - flatted@3.3.1: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 + flatted@3.3.3: {} - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 + forwarded@0.2.0: {} - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - optional: true + fresh@2.0.0: {} - fs-extra@9.1.0: + fs-extra@11.3.1: dependencies: - at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 + jsonfile: 6.2.0 + universalify: 2.0.1 fs.realpath@1.0.0: {} @@ -5039,24 +5086,11 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} get-intrinsic@1.3.0: dependencies: @@ -5070,28 +5104,15 @@ snapshots: has-symbols: 1.1.0 hasown: 2.0.2 math-intrinsics: 1.1.0 - optional: true get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - optional: true - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - glob-base@0.3.0: - dependencies: - glob-parent: 2.0.0 - is-glob: 2.0.1 - glob-parent@2.0.0: + get-tsconfig@4.13.0: dependencies: - is-glob: 2.0.1 + resolve-pkg-maps: 1.0.0 glob-parent@5.1.2: dependencies: @@ -5101,15 +5122,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@11.0.0: - dependencies: - foreground-child: 3.3.0 - jackspeak: 4.0.2 - minimatch: 10.0.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -5119,87 +5131,64 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@11.12.0: {} - globals@14.0.0: {} - globals@15.11.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 + globals@16.5.0: {} - gopd@1.0.1: + globby@14.1.0: dependencies: - get-intrinsic: 1.2.4 + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 - gopd@1.2.0: - optional: true + gopd@1.2.0: {} graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-symbols@1.1.0: - optional: true - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 + has-symbols@1.1.0: {} - has@1.0.3: + hasown@2.0.2: dependencies: function-bind: 1.1.2 - hasown@2.0.2: + he@1.2.0: {} + + html-encoding-sniffer@4.0.0: dependencies: - function-bind: 1.1.2 + whatwg-encoding: 3.1.1 - html-encoding-sniffer@3.0.0: + http-errors@2.0.0: dependencies: - whatwg-encoding: 2.0.0 - optional: true + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 - http-proxy-agent@5.0.0: + http-proxy-agent@7.0.2: dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 + agent-base: 7.1.4 debug: 4.4.1 transitivePeerDependencies: - supports-color - optional: true - https-proxy-agent@5.0.1: + https-proxy-agent@7.0.6: dependencies: - agent-base: 6.0.2 + agent-base: 7.1.4 debug: 4.4.1 transitivePeerDependencies: - supports-color - optional: true + + husky@9.1.7: {} iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - optional: true - - ignore-walk@3.0.4: - dependencies: - minimatch: 3.1.2 ignore@5.3.2: {} @@ -5210,8 +5199,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-lazy@4.0.0: {} + imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -5219,198 +5212,88 @@ snapshots: inherits@2.0.4: {} - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + ipaddr.js@1.9.1: {} is-arrayish@0.2.1: {} - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.15.1: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-dotfile@1.0.3: {} - - is-extglob@1.0.0: {} + is-docker@2.2.1: {} is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: - dependencies: - call-bind: 1.0.7 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 + is-fullwidth-code-point@4.0.0: {} - is-glob@2.0.1: + is-fullwidth-code-point@5.1.0: dependencies: - is-extglob: 1.0.0 + get-east-asian-width: 1.4.0 is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-map@2.0.3: {} - - is-module@1.0.0: {} - - is-nan@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-number@7.0.0: {} - is-potential-custom-element-name@1.0.1: - optional: true - - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.7 - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakmap@2.0.2: {} + is-potential-custom-element-name@1.0.1: {} - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 + is-promise@4.0.0: {} - is-weakset@2.0.3: + is-wsl@2.2.0: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - isarray@2.0.5: {} + is-docker: 2.2.1 isexe@2.0.0: {} - iterator.prototype@1.1.3: - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - - jackspeak@4.0.2: - dependencies: - '@isaacs/cliui': 8.0.2 - jest-worker@26.6.2: dependencies: - '@types/node': 20.3.3 + '@types/node': 24.10.4 merge-stream: 2.0.0 supports-color: 7.2.0 + jiti@2.6.1: {} + + jju@1.4.0: {} + js-tokens@4.0.0: {} - js-yaml@4.1.0: + js-tokens@9.0.1: {} + + js-yaml@4.1.1: dependencies: argparse: 2.0.1 - jsdom@20.0.3: + jsdom@26.1.0: dependencies: - abab: 2.0.6 - acorn: 8.15.0 - acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 + cssstyle: 4.6.0 + data-urls: 5.0.0 decimal.js: 10.6.0 - domexception: 4.0.0 - escodegen: 2.1.0 - form-data: 4.0.4 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.22 parse5: 7.3.0 + rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 4.0.0 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 ws: 8.18.3 - xml-name-validator: 4.0.0 + xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - optional: true - jsesc@0.5.0: {} - - jsesc@2.5.2: {} + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -5418,68 +5301,174 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} - json5@1.0.2: + json5@2.2.3: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: dependencies: - minimist: 1.2.8 + json-buffer: 3.0.1 - json5@2.2.3: {} + kolorist@1.8.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true - jsonfile@6.1.0: + lightningcss@1.30.2: dependencies: - universalify: 2.0.0 + detect-libc: 2.1.2 optionalDependencies: - graceful-fs: 4.2.11 + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} - jsx-ast-utils@3.3.5: + linkify-it@5.0.0: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + uc.micro: 2.1.0 - keyv@4.5.4: + lint-staged@16.1.6: dependencies: - json-buffer: 3.0.1 + chalk: 5.6.0 + commander: 14.0.0 + debug: 4.4.1 + lilconfig: 3.1.3 + listr2: 9.0.3 + micromatch: 4.0.8 + nano-spawn: 1.0.3 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.1 + transitivePeerDependencies: + - supports-color - levn@0.4.1: + listr2@9.0.3: dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 - lines-and-columns@1.2.4: {} + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 locate-path@6.0.0: dependencies: p-locate: 5.0.0 - lodash.debounce@4.0.8: {} - lodash.merge@4.6.2: {} - loose-envify@1.4.0: + lodash@4.17.21: {} + + log-update@6.1.0: dependencies: - js-tokens: 4.0.0 + ansi-escapes: 7.1.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 - loupe@3.1.3: {} + loupe@3.2.1: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 - lru-cache@11.0.1: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - magic-string@0.25.9: + lru-cache@6.0.0: dependencies: - sourcemap-codec: 1.4.8 + yallist: 4.0.0 - magic-string@0.30.17: + lz-string@1.5.0: {} + + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 - math-intrinsics@1.1.0: - optional: true + make-error@1.3.6: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + marked@16.4.1: {} + + math-intrinsics@1.1.0: {} + + mdurl@2.0.0: {} + + media-typer@1.1.0: {} + + merge-descriptors@2.0.0: {} merge-stream@2.0.0: {} @@ -5490,103 +5479,83 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mime-db@1.52.0: - optional: true + mime-db@1.54.0: {} - mime-types@2.1.35: + mime-types@3.0.1: dependencies: - mime-db: 1.52.0 - optional: true + mime-db: 1.54.0 + + mimic-function@5.0.1: {} - minimatch@10.0.1: + min-indent@1.0.1: {} + + minimatch@10.0.3: dependencies: - brace-expansion: 2.0.1 + '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 - minimist@1.2.8: {} + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + mrmime@2.0.1: {} - minipass@7.1.2: {} + ms@2.0.0: {} ms@2.1.3: {} - nanoid@3.3.11: {} + muggle-string@0.4.1: {} - natural-compare@1.4.0: {} + nano-spawn@1.0.3: {} - node-releases@2.0.12: {} + nanoid@3.3.11: {} - normalize-path@3.0.0: {} + natural-compare@1.4.0: {} - npm-bundled@1.1.2: - dependencies: - npm-normalize-package-bin: 1.0.1 + negotiator@0.6.4: {} - npm-normalize-package-bin@1.0.1: {} + negotiator@1.0.0: {} - npm-packlist@2.2.2: + no-case@3.0.4: dependencies: - glob: 7.2.3 - ignore-walk: 3.0.4 - npm-bundled: 1.1.2 - npm-normalize-package-bin: 1.0.1 - - nwsapi@2.2.22: - optional: true + lower-case: 2.0.2 + tslib: 2.8.1 - object-assign@4.1.1: {} + node-releases@2.0.20: {} - object-inspect@1.13.2: {} + nwsapi@2.2.22: {} - object-is@1.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 + object-inspect@1.13.4: {} - object.entries@1.1.8: + on-finished@2.4.1: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + ee-first: 1.1.1 - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + on-headers@1.1.0: {} - object.groupby@1.0.0: + once@1.4.0: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - get-intrinsic: 1.2.4 + wrappy: 1.0.2 - object.values@1.2.0: + onetime@7.0.0: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + mimic-function: 5.0.1 - once@1.4.0: + open@8.4.2: dependencies: - wrappy: 1.0.2 + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 optionator@0.9.4: dependencies: @@ -5605,22 +5574,13 @@ snapshots: dependencies: p-limit: 3.1.0 - package-json-from-dist@1.0.1: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 - parse-glob@3.0.4: - dependencies: - glob-base: 0.3.0 - is-dotfile: 1.0.3 - is-extglob: 1.0.0 - is-glob: 2.0.1 - parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.5 + '@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 @@ -5628,7 +5588,12 @@ snapshots: parse5@7.3.0: dependencies: entities: 6.0.1 - optional: true + + parseurl@1.3.3: {} + + path-browserify@1.0.1: {} + + path-equal@1.2.5: {} path-exists@4.0.0: {} @@ -5638,26 +5603,39 @@ snapshots: path-parse@1.0.7: {} - path-scurry@2.0.0: - dependencies: - lru-cache: 11.0.1 - minipass: 7.1.2 + path-to-regexp@8.2.0: {} + + path-type@4.0.0: {} + + path-type@6.0.0: {} pathe@2.0.3: {} - pathval@2.0.0: {} + pathval@2.0.1: {} picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} + + pidtree@0.6.0: {} - pirates@4.0.6: {} + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 - possible-typed-array-names@1.0.0: {} + postcss-value-parser@4.2.0: {} - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -5665,192 +5643,229 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-plugin-tailwindcss@0.7.1(prettier@3.6.2): dependencies: - fast-diff: 1.3.0 + prettier: 3.6.2 - prettier@3.0.1: {} + prettier@3.6.2: {} - prop-types@15.8.1: + pretty-format@27.5.1: dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 - psl@1.15.0: + proxy-addr@2.0.7: dependencies: - punycode: 2.3.1 - optional: true + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode.js@2.3.1: {} punycode@2.3.1: {} - querystringify@2.2.0: - optional: true + qs@6.14.0: + dependencies: + side-channel: 1.1.0 - queue-microtask@1.2.3: {} + quansync@0.2.11: {} - quick-lru@5.1.1: {} + queue-microtask@1.2.3: {} - react-dom@18.2.0(react@18.2.0): + randombytes@2.1.0: dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + safe-buffer: 5.2.1 - react-is@16.13.1: {} + range-parser@1.2.1: {} - react@18.2.0: + raw-body@3.0.0: dependencies: - loose-envify: 1.4.0 + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 - reflect.getprototypeof@1.0.6: + react-docgen-typescript@2.4.0(typescript@5.8.3): dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 + typescript: 5.8.3 - regenerate-unicode-properties@10.1.0: + react-dom@19.2.3(react@19.2.3): dependencies: - regenerate: 1.4.2 + react: 19.2.3 + scheduler: 0.27.0 - regenerate@1.4.2: {} + react-error-boundary@6.0.0(react@19.2.3): + dependencies: + '@babel/runtime': 7.28.3 + react: 19.2.3 - regenerator-runtime@0.13.11: {} + react-is@17.0.2: {} - regenerator-transform@0.15.1: + react-lib-tools@0.0.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@babel/runtime': 7.22.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - regexp.prototype.flags@1.5.3: + react-router-dom@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-router: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - regexpu-core@5.3.2: + react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 + cookie: 1.0.2 + react: 19.2.3 + set-cookie-parser: 2.7.1 + optionalDependencies: + react-dom: 19.2.3(react@19.2.3) + + react@19.2.3: {} - regjsparser@0.9.1: + redent@3.0.0: dependencies: - jsesc: 0.5.0 + indent-string: 4.0.0 + strip-indent: 3.0.0 - requires-port@1.0.0: - optional: true + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} resolve-from@4.0.0: {} - resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} - resolve@1.22.4: + resolve@1.22.10: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + restore-cursor@5.1.0: dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} - reusify@1.0.4: {} + rfdc@1.4.1: {} - rimraf@6.0.1: + rollup-plugin-terser@7.0.2(rollup@4.49.0): dependencies: - glob: 11.0.0 - package-json-from-dist: 1.0.1 + '@babel/code-frame': 7.27.1 + jest-worker: 26.6.2 + rollup: 4.49.0 + serialize-javascript: 4.0.0 + terser: 5.43.1 - rollup@2.79.1: + rollup-plugin-visualizer@6.0.3(rollup@4.49.0): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 optionalDependencies: - fsevents: 2.3.3 + rollup: 4.49.0 + + rollup-preserve-directives@1.1.3(rollup@4.49.0): + dependencies: + magic-string: 0.30.21 + rollup: 4.49.0 - rollup@4.40.1: + rollup@4.49.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.1 - '@rollup/rollup-android-arm64': 4.40.1 - '@rollup/rollup-darwin-arm64': 4.40.1 - '@rollup/rollup-darwin-x64': 4.40.1 - '@rollup/rollup-freebsd-arm64': 4.40.1 - '@rollup/rollup-freebsd-x64': 4.40.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 - '@rollup/rollup-linux-arm-musleabihf': 4.40.1 - '@rollup/rollup-linux-arm64-gnu': 4.40.1 - '@rollup/rollup-linux-arm64-musl': 4.40.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-musl': 4.40.1 - '@rollup/rollup-linux-s390x-gnu': 4.40.1 - '@rollup/rollup-linux-x64-gnu': 4.40.1 - '@rollup/rollup-linux-x64-musl': 4.40.1 - '@rollup/rollup-win32-arm64-msvc': 4.40.1 - '@rollup/rollup-win32-ia32-msvc': 4.40.1 - '@rollup/rollup-win32-x64-msvc': 4.40.1 + '@rollup/rollup-android-arm-eabi': 4.49.0 + '@rollup/rollup-android-arm64': 4.49.0 + '@rollup/rollup-darwin-arm64': 4.49.0 + '@rollup/rollup-darwin-x64': 4.49.0 + '@rollup/rollup-freebsd-arm64': 4.49.0 + '@rollup/rollup-freebsd-x64': 4.49.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.49.0 + '@rollup/rollup-linux-arm-musleabihf': 4.49.0 + '@rollup/rollup-linux-arm64-gnu': 4.49.0 + '@rollup/rollup-linux-arm64-musl': 4.49.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.49.0 + '@rollup/rollup-linux-ppc64-gnu': 4.49.0 + '@rollup/rollup-linux-riscv64-gnu': 4.49.0 + '@rollup/rollup-linux-riscv64-musl': 4.49.0 + '@rollup/rollup-linux-s390x-gnu': 4.49.0 + '@rollup/rollup-linux-x64-gnu': 4.49.0 + '@rollup/rollup-linux-x64-musl': 4.49.0 + '@rollup/rollup-win32-arm64-msvc': 4.49.0 + '@rollup/rollup-win32-ia32-msvc': 4.49.0 + '@rollup/rollup-win32-x64-msvc': 4.49.0 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.1 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + + rrweb-cssom@0.8.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 + safe-buffer@5.2.1: {} - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 + safe-stable-stringify@2.5.0: {} - safer-buffer@2.1.2: - optional: true + safer-buffer@2.1.2: {} saxes@6.0.0: dependencies: xmlchars: 2.2.0 - optional: true - scheduler@0.23.0: - dependencies: - loose-envify: 1.4.0 + scheduler@0.27.0: {} semver@6.3.1: {} - semver@7.6.3: {} + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 - semver@7.7.2: {} + semver@7.7.3: {} - set-function-length@1.2.2: + send@1.2.0: dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color - set-function-name@2.0.2: + serialize-javascript@4.0.0: dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + randombytes: 2.1.0 + + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.7.1: {} + + setprototypeof@1.2.0: {} shebang-command@2.0.0: dependencies: @@ -5858,18 +5873,60 @@ snapshots: shebang-regex@3.0.0: {} - side-channel@1.0.6: + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 siginfo@2.0.0: {} signal-exit@4.1.0: {} - slash@3.0.0: {} + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + slash@5.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.1.0 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 source-map-js@1.2.1: {} @@ -5880,97 +5937,78 @@ snapshots: source-map@0.6.1: {} - sourcemap-codec@1.4.8: {} + source-map@0.7.6: {} + + sprintf-js@1.0.3: {} stackback@0.0.2: {} + statuses@2.0.1: {} + + statuses@2.0.2: {} + std-env@3.9.0: {} + string-argv@0.3.2: {} + 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: + string-width@7.2.0: dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.3 - set-function-name: 2.0.2 - side-channel: 1.0.6 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.0 - strip-bom@3.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 strip-json-comments@3.1.1: {} - supports-color@5.5.0: + strip-literal@3.0.0: dependencies: - has-flag: 3.0.0 + js-tokens: 9.0.1 + + style-mod@4.1.2: {} 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-tree@3.2.4: - optional: true + svg-parser@2.0.4: {} - synckit@0.9.2: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.8.0 + symbol-tree@3.2.4: {} + + tabbable@6.3.0: {} + + tailwind-merge@3.4.0: {} - terser@5.18.2: + tailwindcss@4.1.17: {} + + tapable@2.2.3: {} + + terser@5.43.1: dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.14.0 + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -5978,154 +6016,176 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.13: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - tinypool@1.0.2: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} + + tldts-core@6.1.86: {} - to-fast-properties@2.0.0: {} + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tough-cookie@4.1.4: + toidentifier@1.0.1: {} + + totalist@3.0.1: {} + + tough-cookie@5.1.2: dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - optional: true + tldts: 6.1.86 - tr46@3.0.0: + tr46@5.1.1: dependencies: punycode: 2.3.1 - optional: true ts-api-utils@2.1.0(typescript@5.8.3): dependencies: typescript: 5.8.3 - tsconfig-paths@3.14.2: + ts-blank-space@0.6.2: dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.0: {} + typescript: 5.8.3 - type-check@0.4.0: + ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@18.19.130)(typescript@5.5.4): dependencies: - prelude-ls: 1.2.1 + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.19.130 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.5.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.13.5(@swc/helpers@0.5.17) - typed-array-buffer@1.0.2: + ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.10.4)(typescript@5.8.3): dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 24.10.4 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.13.5(@swc/helpers@0.5.17) - typed-array-byte-length@1.0.1: + tslib@2.8.1: {} + + tsx@4.21.0: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + esbuild: 0.27.2 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 - typed-array-byte-offset@1.0.2: + type-check@0.4.0: dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + prelude-ls: 1.2.1 - typed-array-length@1.0.6: + type-is@2.0.1: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 - typescript-eslint@8.43.0(eslint@9.35.0)(typescript@5.8.3): + typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.8.3))(eslint@9.35.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.8.3) - eslint: 9.35.0 + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color + typescript-json-schema@0.65.1(@swc/core@1.13.5(@swc/helpers@0.5.17)): + dependencies: + '@types/json-schema': 7.0.15 + '@types/node': 18.19.130 + glob: 7.2.3 + path-equal: 1.2.5 + safe-stable-stringify: 2.5.0 + ts-node: 10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@18.19.130)(typescript@5.5.4) + typescript: 5.5.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + typescript@5.5.4: {} + + typescript@5.8.2: {} + typescript@5.8.3: {} - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + uc.micro@2.1.0: {} - unicode-canonical-property-names-ecmascript@2.0.0: {} + ufo@1.6.1: {} - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 + undici-types@5.26.5: {} - unicode-match-property-value-ecmascript@2.1.0: {} + undici-types@7.16.0: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicorn-magic@0.3.0: {} - universalify@0.2.0: - optional: true + universalify@2.0.1: {} - universalify@2.0.0: {} + unpipe@1.0.0: {} - update-browserslist-db@1.0.11(browserslist@4.21.9): + update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: - browserslist: 4.21.9 - escalade: 3.1.1 + browserslist: 4.25.4 + escalade: 3.2.0 picocolors: 1.1.1 uri-js@4.4.1: dependencies: punycode: 2.3.1 - url-parse@1.5.10: + use-sync-external-store@1.6.0(react@19.2.3): dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - optional: true + react: 19.2.3 - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 + v8-compile-cache-lib@3.0.1: {} - v8-compile-cache@2.3.0: {} + vary@1.1.2: {} - vite-node@3.1.2(@types/node@20.3.3)(terser@5.18.2): + vite-node@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.4(@types/node@20.3.3)(terser@5.18.2) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -6140,45 +6200,88 @@ snapshots: - tsx - yaml - vite@6.3.4(@types/node@20.3.3)(terser@5.18.2): + vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.8.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)): + dependencies: + '@microsoft/api-extractor': 7.52.13(@types/node@24.10.4) + '@rollup/pluginutils': 5.3.0(rollup@4.49.0) + '@volar/typescript': 2.4.23 + '@vue/language-core': 2.2.0(typescript@5.8.3) + compare-versions: 6.1.1 + debug: 4.4.1 + kolorist: 1.8.0 + local-pkg: 1.1.2 + magic-string: 0.30.21 + typescript: 5.8.3 + optionalDependencies: + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + + vite-plugin-svgr@4.5.0(rollup@4.49.0)(typescript@5.8.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.49.0) + '@svgr/core': 8.1.0(typescript@5.8.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + + vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1): dependencies: - esbuild: 0.25.3 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.40.1 - tinyglobby: 0.2.13 + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.49.0 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 20.3.3 + '@types/node': 24.10.4 fsevents: 2.3.3 - terser: 5.18.2 - - vitest@3.1.2(@types/node@20.3.3)(jsdom@20.0.3)(terser@5.18.2): - dependencies: - '@vitest/expect': 3.1.2 - '@vitest/mocker': 3.1.2(vite@6.3.4(@types/node@20.3.3)(terser@5.18.2)) - '@vitest/pretty-format': 3.1.2 - '@vitest/runner': 3.1.2 - '@vitest/snapshot': 3.1.2 - '@vitest/spy': 3.1.2 - '@vitest/utils': 3.1.2 - chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.2.1 - magic-string: 0.30.17 + jiti: 2.6.1 + lightningcss: 1.30.2 + terser: 5.43.1 + tsx: 4.21.0 + yaml: 2.8.1 + + vitest-fail-on-console@0.10.1(@vitest/utils@3.2.4)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1))(vitest@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)): + dependencies: + '@vitest/utils': 3.2.4 + chalk: 5.6.0 + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + vitest: 3.2.4(@types/node@24.10.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + + vitest@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.1 + expect-type: 1.2.2 + magic-string: 0.30.21 pathe: 2.0.3 + picomatch: 4.0.3 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.4(@types/node@20.3.3)(terser@5.18.2) - vite-node: 3.1.2(@types/node@20.3.3)(terser@5.18.2) + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.3.3 - jsdom: 20.0.3 + '@types/node': 24.10.4 + jsdom: 26.1.0 transitivePeerDependencies: - jiti - less @@ -6193,65 +6296,26 @@ snapshots: - tsx - yaml - w3c-xmlserializer@4.0.0: - dependencies: - xml-name-validator: 4.0.0 - optional: true - - webidl-conversions@7.0.0: - optional: true - - whatwg-encoding@2.0.0: - dependencies: - iconv-lite: 0.6.3 - optional: true + vscode-uri@3.1.0: {} - whatwg-mimetype@3.0.0: - optional: true + w3c-keyname@2.2.8: {} - whatwg-url@11.0.0: + w3c-xmlserializer@5.0.0: dependencies: - tr46: 3.0.0 - webidl-conversions: 7.0.0 - optional: true + xml-name-validator: 5.0.0 - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + webidl-conversions@7.0.0: {} - which-builtin-type@1.1.4: + whatwg-encoding@3.1.1: dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 + iconv-lite: 0.6.3 - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.3 + whatwg-mimetype@4.0.0: {} - which-typed-array@1.1.15: + whatwg-url@14.2.0: dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 + tr46: 5.1.1 + webidl-conversions: 7.0.0 which@2.0.2: dependencies: @@ -6270,25 +6334,46 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 5.1.2 + string-width: 7.2.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} - ws@8.18.3: - optional: true + ws@8.18.3: {} - xml-name-validator@4.0.0: - optional: true + xml-name-validator@5.0.0: {} - xmlchars@2.2.0: - optional: true + xmlchars@2.2.0: {} + + y18n@5.0.8: {} yallist@3.1.1: {} + yallist@4.0.0: {} + + yaml@2.8.1: {} + + 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 + + yn@3.1.1: {} + yocto-queue@0.1.0: {} - zod@3.21.4: {} + zustand@5.0.9(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)): + optionalDependencies: + '@types/react': 19.2.7 + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..f2dc4f0e --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +packages: + # e2e testing + - integrations/* + # react-resizable-panels library + - lib/* + # documentation website + - src/* \ No newline at end of file diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 00000000..074af3e7 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/public/generated/docs/ErrorBoundary.json b/public/generated/docs/ErrorBoundary.json new file mode 100644 index 00000000..44ae7cc9 --- /dev/null +++ b/public/generated/docs/ErrorBoundary.json @@ -0,0 +1,88 @@ +{ + "description": [ + { + "content": "

A reusable React error boundary component.\nWrap this component around other React components to "catch" errors and render a fallback UI.

\n" + }, + { + "content": "

The component provides several ways to render a fallback: fallback, fallbackRender, and FallbackComponent.\nRefer to the documentation to determine which is best for your application.

\n", + "intent": "primary" + }, + { + "content": "

This is a client component. You can only pass props to it that are serializeable or use it in files that have a "use client"; directive.

\n", + "intent": "primary" + } + ], + "filePath": "lib/components/ErrorBoundary.tsx", + "name": "ErrorBoundary", + "props": { + "onError": { + "description": [ + { + "content": "

Optional callback to enable e.g. logging error information to a server.\n@param info React "component stack" identifying where the error was thrown

\n" + } + ], + "html": "
onError?: (error: Error, info: ErrorInfo) => void
", + "name": "onError", + "required": false + }, + "onReset": { + "description": [ + { + "content": "

Optional callback to to be notified when an error boundary is "reset" so React can retry the failed render.

\n" + } + ], + "html": "
onReset?: (details: { reason: \"imperative-api\"; args: unknown[]; } | { reason: \"keys\"; prev: unknown[]; next: unknown[]; }) => void
", + "name": "onReset", + "required": false + }, + "resetKeys": { + "description": [ + { + "content": "

When changed, these keys will reset a triggered error boundary.\nThis can be useful when an error condition may be tied to some specific state (that can be uniquely identified by key).\nSee the the documentation for examples of how to use this prop.

\n" + } + ], + "html": "
resetKeys?: unknown[]
", + "name": "resetKeys", + "required": false + }, + "fallback": { + "description": [ + { + "content": "

Static content to render in place of an error if one is thrown.

\n" + }, + { + "content": "
<ErrorBoundary fallback={<div class=\"text-red\">Something went wrong</div>} />
" + } + ], + "html": "
fallback?: ReactNode
", + "name": "fallback", + "required": false + }, + "FallbackComponent": { + "description": [ + { + "content": "

React component responsible for returning a fallback UI based on a thrown value.

\n" + }, + { + "content": "
<ErrorBoundary FallbackComponent={Fallback} />
" + } + ], + "html": "
FallbackComponent?: ComponentType<FallbackProps>
", + "name": "FallbackComponent", + "required": false + }, + "fallbackRender": { + "description": [ + { + "content": "

Render prop function responsible for returning a fallback UI based on a thrown value.

\n" + }, + { + "content": "
<ErrorBoundary fallbackRender={({ error, resetErrorBoundary }) => <div>...</div>} />
" + } + ], + "html": "
fallbackRender?: (props: FallbackProps) => ReactNode
", + "name": "fallbackRender", + "required": false + } + } +} \ No newline at end of file diff --git a/public/generated/examples/AutoSizerPropsRoute.tsx b/public/generated/examples/AutoSizerPropsRoute.tsx new file mode 100644 index 00000000..115d2a15 --- /dev/null +++ b/public/generated/examples/AutoSizerPropsRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, ComponentProps } from \"react-lib-tools\";
\n
import json from \"../../public/generated/docs/ErrorBoundary.json\";
\n
import type { ComponentMetadata } from \"../types\";
\n
 
\n
export default function ErrorBoundaryPropsRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<ComponentProps json={json as ComponentMetadata} section=\"Props\" />
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/BasicUsageRoute.tsx b/public/generated/examples/BasicUsageRoute.tsx new file mode 100644 index 00000000..f6fd3338 --- /dev/null +++ b/public/generated/examples/BasicUsageRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, Code, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/ChildComponent.json\";
\n
 
\n
export default function BasicUsageRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Basic usage\" />
\n
<div>
\n
<code>ErrorBoundary</code> measures the available width and height of its
\n
parent <code>HTMLElement</code> and passes them as props to a{\" \"}
\n
<code>Child</code> component.
\n
</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/ErrorBoundaryPropsRoute.tsx b/public/generated/examples/ErrorBoundaryPropsRoute.tsx new file mode 100644 index 00000000..115d2a15 --- /dev/null +++ b/public/generated/examples/ErrorBoundaryPropsRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, ComponentProps } from \"react-lib-tools\";
\n
import json from \"../../public/generated/docs/ErrorBoundary.json\";
\n
import type { ComponentMetadata } from \"../types\";
\n
 
\n
export default function ErrorBoundaryPropsRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<ComponentProps json={json as ComponentMetadata} section=\"Props\" />
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/FallbackComponent.json b/public/generated/examples/FallbackComponent.json new file mode 100644 index 00000000..702ca174 --- /dev/null +++ b/public/generated/examples/FallbackComponent.json @@ -0,0 +1,3 @@ +{ + "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary, type FallbackProps } from \"react-error-boundary\";
\n
 
\n
function Fallback({ error, resetErrorBoundary }: FallbackProps) {
\n
return (
\n
<div role=\"alert\">
\n
<p>Something went wrong:</p>
\n
<pre style={{ color: \"red\" }}>{error.message}</pre>
\n
<button onClick={resetErrorBoundary}>Retry</button>
\n
</div>
\n
);
\n
}
\n
 
\n
<ErrorBoundary
\n
FallbackComponent={Fallback}
\n
onReset={(details) => {
\n
// Reset the state of your app so the error doesn't happen again
\n
}}
\n
>
\n
<YourApplication />
\n
</ErrorBoundary>;
" +} \ No newline at end of file diff --git a/public/generated/examples/FallbackComponentRoute.tsx b/public/generated/examples/FallbackComponentRoute.tsx new file mode 100644 index 00000000..9d408efa --- /dev/null +++ b/public/generated/examples/FallbackComponentRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, Code, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/FallbackComponent.json\";
\n
 
\n
export default function FallbackComponentRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Fallback component\" />
\n
<div>
\n
React component responsible for returning a fallback UI based on a
\n
thrown value.
\n
</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/FallbackContent.json b/public/generated/examples/FallbackContent.json new file mode 100644 index 00000000..9c633679 --- /dev/null +++ b/public/generated/examples/FallbackContent.json @@ -0,0 +1,3 @@ +{ + "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
<ErrorBoundary fallback={<div>Something went wrong</div>}>
\n
<YourApplication />
\n
</ErrorBoundary>;
" +} \ No newline at end of file diff --git a/public/generated/examples/FallbackContentRoute.tsx b/public/generated/examples/FallbackContentRoute.tsx new file mode 100644 index 00000000..0bfc70fd --- /dev/null +++ b/public/generated/examples/FallbackContentRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, Code, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/FallbackContent.json\";
\n
 
\n
export default function RenderPropRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Fallback content\" />
\n
<div>The simplest way to render a default error message.</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/GettingStartedRoute.tsx b/public/generated/examples/GettingStartedRoute.tsx new file mode 100644 index 00000000..068496f8 --- /dev/null +++ b/public/generated/examples/GettingStartedRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, Callout, ExternalLink, Header } from \"react-lib-tools\";
\n
import { Link } from \"../components/Link\";
\n
 
\n
export default function GettingStartedRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header title=\"Getting started\" />
\n
<div>
\n
React components and utils for managing runtime errors. Supports all
\n
React renderers (including React DOM and React Native).
\n
</div>
\n
<Callout intent=\"primary\">
\n
This package is built on top of React{\" \"}
\n
<ExternalLink href=\"https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary\">
\n
error boundaries
\n
</ExternalLink>{\" \"}
\n
, so it has all of the advantages and limitations of that API.
\n
</Callout>
\n
<div className=\"text-xl mt-4\">Installation</div>
\n
<div>Begin by installing the library from NPM:</div>
\n
<code className=\"grow text-xs md:text-sm block text-left whitespace-pre-wrap rounded-md p-3 bg-black text-white!\">
\n
npm install <span className=\"tok-keyword\">react-error-boundary</span>
\n
</code>
\n
<Callout intent=\"primary\">
\n
TypeScript definitions are included within the published{\" \"}
\n
<code>dist</code> folder.
\n
</Callout>
\n
<div className=\"text-xl mt-4\">Support</div>
\n
<div>Here are some ways to support this project:</div>
\n
<ul className=\"pl-8\">
\n
<li className=\"list-disc\">
\n
<ExternalLink href=\"https://github.com/sponsors/bvaughn/\">
\n
Become a GitHub sponsor
\n
</ExternalLink>
\n
</li>
\n
<li className=\"list-disc\">
\n
<ExternalLink href=\"http://givebrian.coffee/\">
\n
Buy me a coffee
\n
</ExternalLink>
\n
</li>
\n
</ul>
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/PageNotFound.tsx b/public/generated/examples/PageNotFound.tsx new file mode 100644 index 00000000..ef554a80 --- /dev/null +++ b/public/generated/examples/PageNotFound.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, Callout, ExternalLink, Header } from \"react-lib-tools\";
\n
 
\n
export default function PageNotFound() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header title=\"Page not found\" />
\n
<Callout intent=\"danger\">
\n
The URL you requested can't be found. If you think this is an error,{\" \"}
\n
<ExternalLink href=\"https://github.com/bvaughn/react-error-boundary/issues/new\">
\n
please file a GitHub issue
\n
</ExternalLink>
\n
.
\n
</Callout>
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/RenderProp.json b/public/generated/examples/RenderProp.json new file mode 100644 index 00000000..b31622fa --- /dev/null +++ b/public/generated/examples/RenderProp.json @@ -0,0 +1,3 @@ +{ + "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
<ErrorBoundary
\n
fallbackRender={({ error, resetErrorBoundary }) => (
\n
<div role=\"alert\">
\n
<p>Something went wrong:</p>
\n
<pre style={{ color: \"red\" }}>{error.message}</pre>
\n
<button onClick={resetErrorBoundary}>Retry</button>
\n
</div>
\n
)}
\n
onReset={(details) => {
\n
// Reset the state of your app so the error doesn't happen again
\n
}}
\n
>
\n
<YourApplication />
\n
</ErrorBoundary>;
" +} \ No newline at end of file diff --git a/public/generated/examples/RenderPropRoute.tsx b/public/generated/examples/RenderPropRoute.tsx new file mode 100644 index 00000000..dcab2db5 --- /dev/null +++ b/public/generated/examples/RenderPropRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, Code, ExternalLink, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/RenderProp.json\";
\n
 
\n
export default function RenderPropRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Render props\" />
\n
<div>
\n
<ExternalLink href=\"https://react.dev/reference/react/Children#calling-a-render-prop-to-customize-rendering\">
\n
Render prop
\n
</ExternalLink>{\" \"}
\n
function responsible for returning a fallback UI based on a thrown
\n
value.
\n
</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/generated/examples/SupportRoute.tsx b/public/generated/examples/SupportRoute.tsx new file mode 100644 index 00000000..32bfc346 --- /dev/null +++ b/public/generated/examples/SupportRoute.tsx @@ -0,0 +1,3 @@ +{ + "html": "
import { Box, ExternalLink, Header } from \"react-lib-tools\";
\n
 
\n
export default function SupportRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header title=\"Support\" />
\n
<div>
\n
<ExternalLink href=\"https://github.com/bvaughn/react-error-boundary\">
\n
GitHub
\n
</ExternalLink>{\" \"}
\n
is the easiest place to look for help, but it's probably not the
\n
fastest. This project is maintained by a single developer so there is
\n
limited bandwidth for answering questions.
\n
</div>
\n
<div>
\n
I recommend asking questions on{\" \"}
\n
<ExternalLink href=\"https://stackoverflow.com/search?q=react-error-boundary\">
\n
Stack Overflow
\n
</ExternalLink>{\" \"}
\n
or{\" \"}
\n
<ExternalLink href=\"https://reddit.com/r/reactjs\">Reddit</ExternalLink>{\" \"}
\n
to start with. Both sites have active communities who often respond
\n
quickly. If you don't find an answer there you can try opening a GitHub
\n
issue- but please take a moment first to see if your question has{\" \"}
\n
<ExternalLink href=\"https://github.com/bvaughn/react-error-boundary/issues?q=is%3Aissue%20state%3Aclosed\">
\n
has already been answered
\n
</ExternalLink>{\" \"}
\n
before opening a new one.
\n
</div>
\n
</Box>
\n
);
\n
}
" +} \ No newline at end of file diff --git a/public/og.html b/public/og.html new file mode 100644 index 00000000..b447686f --- /dev/null +++ b/public/og.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +
+
react-error-boundary
+
simple error handling
+
+ + diff --git a/public/og.png b/public/og.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2ec8074667d3244dc86b6c4512b74b375de4ca GIT binary patch literal 109526 zcmeFaWmJ@18#X+Ign}TbNP|j9r$`MA0@BhA(%mq$C1#|^?c7-kMCOVkM{?x1#>yq-upWDvCn<(ZbNA@|pq7;1Y^uHxPCn=J+++D=9atDXg)K4%BR4OFMz zfGSt%VF`!?-t*JN4uQo)UIzpzXi3}S8wbH4DurAGb1?RviHxkQ{s#z%FcyTzf-3Ie ztJM}5dK*0-tIV4@FAqs{RL5D~{Iux2_C90kb0!cd(Eph>Ey0}7$s>?!mLOd_x)1H! z>cec0Z+LlrY7%IqZ_333*_F$c1N)T^WF$*uAPL$P*!JiI#;FH|qek(Y zKMHry?*ie^NN!C$o5CfhpF@8mWQk$t|Co!-qvb2D2uWJ8@1Y3&&%|8YasY>JpY22&V3V0 zlLy>|4PMcQ6y$`90weUuH^R?3f|TuN z?#Mbhfe1xBrJ_hS9?bCJqS;SF4df-+W`rKPq7rTj@Xa*P`LNE_e_uV{KVdn3J1t1< z@lFA&yX7;ECLT&4(ob9i+}`_Kb)L4&d?Y%jdQMHF<;}Jvx~rIBm`QKY-(8O zrirS{pGwIagnuLbed>XNrFhste!nfLg2KWP{3O#uhP;)_CCy~#WFoJS`Hj_xsr0Jm zDupu|uWwR=MgetQeW-q?8n3fxpoGfAmml}I_%v5P32@7s?8F~#y^4za$UDfp`^@v@ z?tHNEB0bk57k|gl7m0CE-7|H}{_h$iF-V#V5|a|Ok>tI+U*?smviia9y%{}wtGPuC znrcQvL-RVSe@ljrmp)J zUpYqZ>v7v%N592SIMrz6xTutr9B+J=9#OxeG6;M2$nqyTrfB^Kwa0{#B5ZdsKMO8U zN{6$(!d48l6fysB+M+*)YJYoK)cWE62eLW2IsTy3mCW1bZ!}V86`r;UHT1YT(!~dM ziQeipaJ-@6tMa9)S9}K*LIw?TPVMgX!qPK;fY07Y!t%7K@pJxN29!wsTltFFBw0;F z`S%YJnGLnonD=he%wQ$H<*mC%@|xxsvIlhyNHc;>Mu{&Z9ujaQB_q@MqEm!X zTqe8pd5*AE%9wh|u{mO(WN>YuV&&V)&E0z|RRdvJu$SIqUwX4my^8N@fUR!iL_0?~ zhwZ8OrA}x5=*Kl@7|8519Vk!Rd@Y-**~h(Owj&JTKBYKChN?z>HcM|EoU>r+$?oIJ zcGE7>4Nm10qL-qVv#3x>8sg5$7<+6*zb0sv>RhnrycRizL-?Q}@rMz{1L+664>AZR zc|=JqNRwqtW#hWYl5Qt~wXL)XCPgPlE0rrH9IIj<^ar&XF0iSx;jrYf!opaI8VDZ| z6+S_&E5?#Ew_T3H*c`o6D|l1`qP@}*XzR`NU-$y(0@*N~-MFZhR<-&6sQ zA++gcQ*wI2!;@;?lie(9C`qGR~AAjPh9lV|oz6F)T; zJ~@6tD^H{$b+=k2!)^K)wiA1H%JzPHZn>FQH`^;+xyKEwsWZrsYt3w=fr0xYrxgFvv1|Va}XmvmL68d zV=u?G3aG{ktsE@5#&wEC*0k0NSHG_^jeOa&-ZMDv+)J9pnB{AdY*G%ZTK}|OXGd$B z=~9kpal~?Au(!1LV4X7XXge63?S6m0I=Au>Ufi&}hq{KDiXTK>{NkX0v`hV$*1U(& zLo0)xpKtLKXlfh_T<%m@+Eq-q*@oC^uZ%4mwRTR*EDZe`nzf!zUZ`n3<OOx*xLCd?c>jnNl#9dkTbGV z`jS@SH6kEZ-**Q_mAYlvW21T3S{#oY&vyLG-V~=5R~Cnz(0Xy!3M9qUJb}v9-Lu5y zBRIkw#&j2*`po&6hH#3|f-Tt?Vv^gr+Pc+A*S&Jjp)qPEW|VSNvj{dPI=|XR*do(5 znIO?6-OkI<8$I`2wv#29)m=PeKu6=@TKqD%!)XUtJ=QXV@JvV(b2v5Gsyss{6O9~_@1os1VeXP$U`>|A zkZH~nt!-PYpJPo<*-q*3GYtXH(+c~TtsLS^;=9C^boKP{TpE^IC7XsuD)WPM=ii|T zSX_+bJH|z}+v$v6nna~UR*d6EXYQN(T%|W`EV4_#Gr?phbn;I(Lw}N*ce<*!n5(Vf80s3sz0u?FjeTOmtp`bIyF1a zBgNqDaSr#)pO$DR=OQ&Ap|cVtTIAT{G~#sPq~UTQyUjl_G&5+wMAMw&ToPZZLfXq; zxJA2by4mY%__p~dOgd~oxrJ{t-wHCm78xn0!+p=;`>f;0a*+V~smB)9Vn;#Il!<1y zTQcv-t>c)l+t!Q3|;rgM+CF7qdY zEm=v!c)641$q*>qf1{~Cp@K_yimrTjdhavu8{TvmPDC_}y;}7&Va>+9YN9f90;e2y zMzQ{5E#P%PH+d_$=PHxe3wN!vpL3FHN{bme{6hQ$DKc(Dr&>oRA~vlEjanOs{`O3> zz{!~@B4J|qRB_M#SNDA0j_%q~`+Q#M+0vPN-nNdntJ0Cmxm73cUKKkca!TNk1^#H+ zu#sk5jxnVH3?pnIeh|K8bn-(N35z!DDIw^j;uc7Q4TR-tohGZ0goA$TGf)5RhZ`yR zD_GoW6ChKc^Bq>`24aB+bnFb$yRp0c4J6tRdbbZ+`Wg7h>41UDb^Yc2hkV2y0;ft4 z9i9U&F(>NNHbgI@{P#+q-nCi~8pMz84Mgb?;9vw9sYx2k$bjg8YYY%75)tSIaD@c? zf{}>-x)w*G1)==$J~9XtU}Pso3^#?O0K38`Df$mdX{31yzKHdPvA2EBW z=BOs~g2&Ltib?;Kje!x9tCj7=I3PY(9^lf-$Wfod)ymS^fyb5q;U6t{fa{C5nIBU8 z(Ztb$|Dl?UJcWpjy%EJzCKe`^hv1tO6cl{+uZ(#VMa8eW1OMWGXzJ)_%frm<;^M;O z!p>x4Z^F#V&CSis!p6+T#t5`vba1nF)OTgHc6f9-$e-hg8aWu+o7p;=*;rFtjH_>8 zzK^=D)@Uy7FDT%Oh{*YGkP{YGwss z20R1I%J!6n?~e}uzgvGl@*iE*{_e`g!Sb)J|G4#^U6mb->_u#>fQLGQ|6Z`G=l=8N zRYyMNi@E;;i%X#Yco#q#e3Os)uT=xz?A4c}1{RXUOjPbA@CvBe#SgMG@Q3#D_2POs zO(#UI9t08uNs0=+bVXVnE5NQ}!9rzq$3{e+!e2y!rUX@$phPq6;|RB!c??_%K_3tj zGV1@h&|}EIp=QXA^S|0%ja80}%pmf6Bl`&6#nlsgX7igPL18PV69~k_J6YdREwL4wJ{~NSFI-sgO{XGdlzO)o|LAF!BDFsDc;crTSA&P{g z@@8B7Px=3cI7rdhzo`@yH!<=bCUX5x<+*$?M!w~5N`R~&=yPwn`p)kukf4td%5N&q zJ7nZ+jKz@OR3Kyq;@^|tT7~~qfom21bN61W@YUYAw!&BT_Sy%*F@r)Nc`LLza|pbMB?AUt7{^0O(d>~ z#J|tYKckx05sB-F#GjGdOAWb>NL)uG{yZ-(nbmbf;yNPn=Xr6(tgcfV*Qt$vr%xjgkig8UOu8G7ok@$B6`sb8Ue`!m*GT+3*K=JXaa|+vZ-#kYBXM0L@o$ECO(d>~#5Ixl_qq8e z)4on^Tt_6XBNG2UFRoJ?f1VfD5s5$TYc8*j_M+5Guk0N0;pzT`O9 zAIQJrdeJOCyr_RJ;In&lzMKoXUcaKa1}mC2<|AzKcSm>l&R+{ zA&+_o)l8A>))57xu&LxyXOG2-bwnr7wbOd<{8+o(w#a>PDvo`zV}f_z!F6+N(mf;5 zt^3vb1UHNu9SN1;28Nz`Ju5LX289pk_x=cif(=1PsJMc^`6vG_g^v+tv*qtU0pJ`A zq5lU@5Uf-50Yy`h6jA=}9DsJH`OnaPdk(-{rIC=;qHR0;e-ot(NpS0C9{es!7wxVW z<9D^{dNF=;dtC2~-`#-MX6kpX;kB8%HdFuWpuIl8f0HL%v#H-Dp4V*ZcNz5mO=>Gx zg0Ukdrn>LUo3pOR-h)NN(zDE_{@}t@@DcFkgz_6F^~#}g8GRzuBSIgjP=6pT^tWH| zsSR*1ln-yG9sO6)KjN1c83uA2jYiH>2k)E-VaqHG8)k^c2L#@^IJNukn8x6)uirvA z)ojtwbaP<8u}i8d6#UEh`mW$p_$YfGzbAV1-^>xN;0~^60aCMMdwc}ftHi^} z^2s)trsF@Pxkr(2KdDi)_*uQnV(aIe-_nit3c6dOe@UMy4lw?~^5IPO|LParLB-G$ zt20mp#G&v5ya~2)rP0TK%NB$O$fi)`*Y;o4``SPtXazy^e!NjK!hd5% z3k-g*gf|oGAD9i&=U0|BPr!Ot9Z}G*AD9|*aKs_W#tV3ErsJSrG)|3J`J;{tnW_XMj8DUWX9 z)~(po)Bgj>a$t({ijhYDa2Mqp03^&^7mJoJb%R+Dlr`gW=iY@nR09xiwYAs(p_G?0 zvjAHR<8Q=q1?vIPK!1z)zS21I~+-trOwnwTp9s4%WOl@k7?A{3GUYLezfOn&-7eIWA>Ldjt$f z>M|5`p{7B=2vVc?11NvXkOfS$u+n7opF-f>r|^kld6xBu41yG|fnFGDFD^!Sb+NW+ zE_4ZR{t`l70T_YK+(n-7AJh1*3bfl@=QR(#Xcz7Yh&c*twxqmJ*bCKuLOOLh_#cu} z)BsO7@Ml2!ODy1RQ6JF#0HjMDjG_m?w%^C*yyz4GY@Mh#Z1BImf=nY|{F3VZQRjb% zKmshe{kzuBmrHC5;M&eg8+|CoYrJRqntepOt^9|kE?@nS72XEUDy zbNclhFdmPd-~Y$<7W4r?06oz8hdzOPO#!h!yRmX!!XODqAf=e#bfNT7Gyo)9dzhSm z@7$IP1+iR{D@FTDERgR2ppxn0-9eX{PkR9*!yUlrf{^1bR(W}{z3J~g^zuT6nHovS#~~;Bp$|$Ts`gtjsQXZ1h7p zoH_7HnW_^3N4+FMPQ7qK?))jsm&2x|4>&po;*h{9 z_ZL+stE^Dt10M*xqhJyt)9w%~pcO$p$Q5sgf-a#U7fqwmFkhJGA99*M8#>KB zcJHVYGR}4lX+0I7-QWL&gi`bZ4>CUXb15Ww5JBdSAaTjM87jcPw{tFj=p9SqedsM9 z<0L}&OIPl&^RbWeRAzL>uM@Zp!eu9yy*p3aEV}Kme0S2pAuroHEm14J2I<+D zs2J5{oM2Kfn>{SCs_1?IE$!)E6Egl}8JtXv9{1H(q~mF!45TLe&FA4e5YJxfT^*{F z$fL4k*e;Kul}#QY^{^O3hdg)jaDr1jDNb!zkGl2HQ%^Z@x?eT-E4*{3Bxv|k1d7@b zVL`D(-V<0w?f_i+R5!0%qNO(J&KAP>jYnBe3h~0(8pmB&3z2KowhZ>_9G1-t&mq^T zii^ZLZ!g`U$M9^0_StD(boUErz$X}$!!Xkp!n4>TWdOFzt8hO!8Kwi*v5I%+kx6)# zeHZ8S+kJ?DLAGU;SB478sdg=X6Es6H3yA^BG=!KzOf>X#$Lu4F9OIlSW@Qoj)ehvd zq%QpHGZ2%_a>j|T3|{C@Ccs`2fOh?%Zihmu26OOA*P+~9LbAH`|rz_z+sT@v%TKt(C1i(kL-=$L6G{Fj1pmCz%5>>76* zvV7I3EFcRWZntSS@QdC0`_(M(ehxxcAmGp zm1w0^C$fV}v*NbxVxc_!gc@>hOvw14rGfy%z>cKcPBdzzjmBj#q%t zqs|-|_qXvwgQ9O2U2+!t@w|c^ykIh50?rquyH$$^YeoruVcAuEL1l^N;8ResZJ^6gs^O^AZ+A71an0s6IlP&N2=aaTIf%Y$1tf+39 z{#t3xRdI;X%HyLHSZv+@l4(?Ql)CWApSlPUZdZYbII5H4ypJ8fQXxyaGxd|?Fqbra z$z{c_QUBZ@xa~*O5~N{H=~JS%u9>;*X-_WFun7qndg!Z@@HvHZb{^d1Z;uV_4lgkF z=0@Yn>w%jltQE!41jB?ZNn(MB^`%M10FL;3j~n2Z#^a@LokFLBJr_btWw%=fIQXev z-F-u?Dxj9?8psPD;#raAy--`RV~d3`Wg898rpaes=1e_=#jjKHJX*De&dhtp zRr0)T21*x-8lK)x+;>_&omREVi>=L8fACD^8`px3?elMCN!4W(E?&Ck>*3q(BXtRD zK_vx2lU~7J=<_29O#7@ml;86AnBX7Z zA}G8yPD{Dn8y%R`r!-Y65K0J{rRA7B2KR?943#=3!xENeHEaeB!@)*wS0~CZHQ<~y zl)oQvd2&P`qcbO4O?@OzU~1pBcTn{c^9*)oJll?9j?Yqs_U`BOcpqcwF@DG(@h)3& za!@{or^09Lg*kc6exi4HZHc}r;rGnLhH+(kwNE@rT5@~)Yko-D#YEG8bpo~$s^iDtR!YcGcdvB`M9E5z( zjK>ckuwf_{Bhu}9KYB1j?~@L7HqG3#$E+Sj?PjbPN|0%2OCc=%a5#}K(}5bC%rvAK zJ5R1otc#;$9z}_ z(MHL^k>%+z*BOsXr^`jkvs1QJad?bc6N7k+lx7n;K{w2< z;B^|cql6-~Sk}eGELq-T(u;U~PW9ux$lP?Iz5XYL8~MfPtZUdRo&pjjNfv)02?-0qt&Dr~ed;1;tx|_gtbW}d+ z(}P8iUDJ`W%Nw0QSyg4jCs4x=6{3)Nh>UPslwxQ!#n5KMQ_ch_5sQeo@Xp62r@8bw zpy<6Ldtbhm4~{5@F;t0XMws5A57ZC@Pn-IxsCttZ?Sg zhyOY3!bMJ;THI8Shz`7>zD)q91$@AZb@&u?Bf=E7KfG14&$Dz7bf>HwOK(|Tb&O>N z5}Q^&9-E?T137!uaoafSX!mz^}ol`0*o7UYJ z0F)eIKmFiWEkC3fC9o%35~=yU-oK!Isn|Z85Cy>+8KPeXnj@z|Hzuf&`ig^e@U{7z zO$fUjUT7#|XfZD)?3!Wd&!MrOf@ z$Jd^D@7!LP72%@gapyz_3|J$qjb#*qt==l;ZhVaB9Z#@A57|)Z%=SR+v%Z-6B-(oK434Z0y6t!lr?f7o~R`co{q<{hE>R{so`0|!d+rvvn`&^155UoHr z+oSbF+}gf^HWyiKd$=^AUzJar6?!|WkXxJRd05QUyEg0_^5%q0uzvq!asbkFw16P1 ztSQr@+&6*Z*d#Ak*F<&u{eSAVVV4y9SH7<-Pzrd@DnJPRGWsc(awQusBL}kJ4~;+b z+eRE!2?REUy~RW2acmXof`op10~+#VvxH+ZhUJA3&N34KbRqmC5VhXgx#yAUdl^jr zEPtu4NHmo-yMC8%gK!yGt{H|Jl;k*3lj-lVW?89P~I zwMOloL8;q%%MJVjQQh5AhhC2BOKb1Zq9U2H=G|uqw|qi%h*gApb=bQ}DnbY+G9;GG z0excq%KyVW&p>iN?SYBz3hsn%MDhdAiCb-LF1V!0+dWh`P5QSJUCMrZ>D-;&$MS#; z6NCLz2P<`WoP*+?K(iDsse|CBt&8Z&8ThmRGE-UIv-fUFM0c~k zE#Pw|5#=_X9d+Zv& zvk3W18f;k)o5pSB{w#?e=OuVd*!bX*-ABj6@p!R?g!U9!NQvz5{-74YNrEP)DBz}7 z(to$sPxSV4iR*5{A#D;T<~*-9*0;UEFeSQUENXsnbLh5ejUJ^s zcaf!vzn2%n4Ot2hF`J=o~vS5Ugk)#Ojasb#J%unQi{k2cI&DUyRQ6X{-V` zgyVBV(y;=CZC z37L-~YH2}4bhmH(GI>A2bDpuEl4w(Z2fyy7^Y@>iA-Tsa3d<>}WgKfp&LkXc51uaY z5*hPot}}+-*`o;49FsVC)#eNu({K)4>u|5v&eGii(dh#ImeGd8>NZI&l1VM!MR?}Zp6ElHx zYH$r;3dZZ(3hv`4o#juAzhiOF6%N$zewEIX(uwW{MeA@SF+ty|v^y(_y5_djjlcKw=y0iWN#y1jidxA;MvK7Dm)JCfdB>1xLClE5gWT=8 zxi~mB)k@YG!&LwUbpkk%>}OjPFOBDOu{u>?BYQY0jJJ1{JuwGK6Ep0HzepDlvq4eL zMVc^gqs|{0!7u(f+ z_!>3DR6g?-rV{Pn-Q#44_e-6g&Djm*aY0w#+|m9DtRN?LAf=^u&IKpKeH+BpQ)+%23yB$>o=qCr| z(B}*nAD?M9A&k%(tKHPI&(2rX3~DM@TMcZC7D{e4t(u0KCX$%DW9Yp#Xd4i{Kw1_+ znw*qp)I%B^?D?@6SuM{ckG1UiY)}{;z+9n3IofoElApn#3Ygu}a9fv+L?1YsIEs&`mX$4?O{7bD#lIt13(0GE&Bvc_?<765 zfC&{37eV<@Q3hpDVu=j4w5`>4qYrDagqA7+I;P4F)vty(7V=$zxB-yR_D4*?m(kC< zGM_NC0wr;ex)UkL*`~s0fXqD(DK>G3Aa^yFjxso80D+Pcd-n1lc0Nn@+_u&qktJ6b zjf%sz6Q4kzk!IljX-0ByU_X@k(%UWGGw9l=Y%-O8ugn7t zfkm3)Z++(&$rNEvVK?Wc?^a~Dt9g>Hbi#kdiZJy^IUOH4%&wHZrq@VCcx39ou5evt zk~JTm8n?Qwy(K?*Lw1|^T*B?wdJ!4qu~RR~(0Q(oX$`c#8wKNVE$?H>9~SiEu}~=$ z5H#5#(iY&=j%gsKiMynlr_nA!e044vd@YNGrrih}i*Bb-1Yu?NqxP#{u2BJ`s6S6)Oy5LjviG!&_wv!K-J;PEnbCiwGUz;Jud#vo%KzGek31ro#XR#X*VS8eZJ zNLUk2N=ieelNoBhhmBG!Xh<4Q7F;Y|-+K6EWH6jc9Xi#)JJ=^jj+EWG5)eOJsjA93 z%gIJEFhFUTXoa#!%qs<0M(ZfNx|_NB^R*7cKTi{}bkAXZ$HSbV0p_xbHt3kA2M@q( z)}Smm?U=(~Gw9Wm!BTzCIw~D$>*4eI)xKky={Q?n zU*qIusHX2o`|$PfXAgF#+n2I14jlZe{FLAkfK?w1ec;L&wLl`rHW-S+WHpQhMNgGK zb6oaQhK1w5o`p(U6A28iKIHnP_3@Y|p%dWKRcbE>85+b0&JII5xAH9xtyYh>cRpwm zt|fhaN$I03MZ=4*I}52{_T;=PnkRX{4d~e0yrjvG^FX@dfozxb7{}P+V&{3s%&xK5 zxcOQ}7)a$lmP=%6Ycb`7*t7?GSNsQ%3QJOF#R)pz-OAh`Kj9xl&Ik|vgRcwYkIG6D z4ks(_?>NR10xn<4`|K_ffPprM!1HrTUNR9C6&>2nie|}l&A5bL-I=E@@;b+Kd$&W2gY!X$)tam59QU|e8IElrezhgvQ2~+u`{eAGIECj5-Y5Qf zmcN3%{blGd@P{?KY5AxY1ZgZYxA%RN&d2EX$QYa5Y*rh`ywVdAa;6;~&CdHSn*A`cZO z!mlrQq#O_W?oOSQxm;Qm8K7dPMI#3aA=sq=c4gT*dReW*WB~W!Q0LhK1)6??F&KkCl1{3v%O=lh=Ao_zPz~#5ZpHGsQ=bg1ZTsPM= z-_%daSFuA@qaSuk;3t?Qc2@5CDt!$0->c5#XBqnl#G@4g*ykXpDizi)+8iF=C|~H# z4_oEM>y|?295*2z;D`HWXsjonlvM9u7M2R)0SXl%Z%lgWnz-V%X!wovCCe7UW{&yH zptWkyUZ<0MnNDBqS!w@d$g5|y=scPogKIXiqg(wZhd(mcIx+&R?poZF1JVYeT1U^b zjXox*i}0kx5UcV^nOX`@;(Ix~(o*&-did>(4inZWk3`w?DRKUrr4 z?L6cTuifaZv5EwnlU)gv$g;Y`j9E3f{lxy+`B;)SumB%QK+#@Iq=_5hPa#PKZ{JjL z{(=Ugeget{=E20eF%HKT{8^nv+VuF?j45n0C<|GSO7p>CMr)9MqK7E#z~-I`WP<#d z@i2UmxDBwIU$c=HPR>UcCQ{zU4olM@ws!aazT-jnyJFsf_;p9n3HF1{Hi96g;lbde z$qmyA*k>4&=C){+F4L@0#%Q^@UvLuj{l9GzQVwS&zKJ^j( zq#op)gQ%&E^(%8YDp_L)>&jKlFNc{XT874Kgv$)i5>ZzwT4POBAFZ9tB%TdqjISpY zduP+wdq3o2EC~ezRQhYffM=S%K^o15O0K4b7rhAP0hz2`*bl=F^5$`V{_i@&d64!c z{7%V_7uG#8omGo?p*<>h%4y-8=YE3pn9e4cVR1DOJ(e2N_Z~eDiO-pCt|`JoSM%&; zMeD=bJg%>|{Jiw<_fYr-q;3gNC4v@ptF~>@IlY!lB$X!h`Y9Jf#rod8%zinJ`-bRb z(EHq~k5@SO&9|T^MSi`ck{NEBlu1wcmeFD2032&gq3Gpu6xTUb>JSigmt{Dx7_ZA1 z{{XnHipSJ>9P5`dr3BPN~Aj!1K$fn($Hs+ECnE`!0wQ@`=s!*?nn?aj3wFyrr&% z++(6o#f*tIQy+@>VL*xyyao8A>E~TILwd`tDFT%6pG>L>gYriO6GNINLXZW*JyUd>Ca4Y&x|mK_j}qZ)36$dZ4ozuU?>=Nm64>lsBKstEi%3| ziw3vSMk)5Dn*zoC9v>C!MDD!ikn;aTET1oSbXUKMBf4f}G8x_~VUusoYx?H!EYs@N zSID_4^vCWGDxB)`*R!y$4`g3=0-MX{n+9#-5IGz81Bb~Y9?m08L&`f&e3?mmUCQO& zUsM!R9uFoAf!!4fp{ZY+SI&ahZ&{9nRptow!~2JTKva4!i{`**r)mXZgE97yye-D% z=<{IKs`-@uk_nP=zHYaBv$qLms)Y$PDHe4NExT*Yo_d*zOwa^aneGwsJte3lVoqrk zIl@v%{n2WS$;i(n_ex-(qN5`!e9oqM%^WQM5EO5Wqc(=p`Jpc%Rfl=0r12SMQ3$YBCFCOd=;ds`v%kmWF#_R{Sg@SeRU(k8h2cg z$TBR7`1{y{ry9trOuwW%- z&4#{k_NJL5Mj-m)xn{A3;6PS8vN>^Fwi6EsS|`TCo;~;93EEBAQ|)9-hNP}(qL1Su z0dZO?t1d3o{2?xellFxo>egnt;gVFMpJu{ryG51gHpF@Y=!zP#V{g{HlFI{6Nnm3e_ zlRRwaKFQp#^_%l_!f5#tzc_d9xW_JwmPnaZRy{&Mwf znZjTB#ZG~q8O}Xb!KRsi>QRE~uop@8u2}Wf@chtMXyT+ReRe_^8nX7;d>?z@?ZF2n zCvKg>+d1>yqDeV(I|8IdhPfYV=S1(oJfy6@diFJRa^y6P_W6wz+~|T8M=e)+ zM3>PLjyyK&mo)?TPaBd8up7v*wYr7Gpjoj4L>`Z8pq+Rl(8` z*rj7iP0Y=!megoi-b5z6yYU9+V*BnDr7gql3$d-;!=V4RxK0QAg zd7`7<`Avw&JdjMX16Ny8q31u1BrC`ZPxjx@4=taM9=v4_#ctG={dQ;*?w~ke@r2Ys zJMYlrJ~p;CJ*=@bMn`Zqy0#7K+fM=`rd6dG2MxvH)z}l}D>uV`D!3~-sTWI7V~-us zmT|6;y49Lo>@nx0oil#JP0K~-jG5e=x7ip?Es=?UrxuMa5a=rkGx{_*>R)h`D8kJL zDp-tUn%`d%tu*Fev%y~Pkak%9{4RikoJzsh&m^AP5ZAP&%zbMvA{E%pbSfcLq+4~? z8QTlm&T!=PNXM>J2nI7|@7gJU#U_k_7s3X&ZpJtS4s09X$Z?TBn$AL?VcDsdpVh-W zId<+c!G@KhYltX0X}|iijthg@RhXcM&(3RXY#h#HzHf?jw;riyW4G2wD*~b6QbfX| z(x8){-Xm+ZI{sGt8H3&7KQz#Xp%yD_oNv9+t%?#VtK*8xa)jvc2S7!)lOcsY+$iz7uRWpWfvDXw;fXt zI_kan%tOq*`e-m#yW^ejZdde?#G#8{8CLoc+eG;icJ2S=K|azg4# zFr%EV^a>GYt=Bk^S8+_kc~C+3bh?`bzWzbJhd_gj9j85fDmPeWgX`OA!kkOE@bLME zW3gI$S8w{-RrJT<#7-?6C)JH!HIqe6B#-r3W5l}A9cbiqZ5}wsw4113E)2ylT_B6= zZ8&sU;_1WX`y?)<<-ZNov;xOApa07OGqaKKhxMZ&u~h4 zB!U_e^h`ATc4~&mas?fjD0`z~^)YsJ*L(sk`r%Kb+nBWk|od|yHskRRDo=&qII@LIyHjFEcqsjJ<`4{lR? z79|RTb1Vl+qI?Ipr?N31q}llL!tA>;*WT}8t$bNBnR{W@vdKD-J)|0z9*4&gsCcoX zj1r1?tbmnX!(1e)NRDNoWEh@DtFS(cmd`a3*4};^x=x)a#2S1?M8tWVU2l<8qL9y-k7n>8jL; zrAxX~L>1@U`tgyJF0V^X4l7H<_p9LIknw~?4LM{rA@?jc-Nln}?^;p*^CRn%o~BM- z>Q#$)KCIqhZ#c}Y(FG*!m+T$xFP`GdrrTV4(=31PeC|X?Ku-`?e|7lWWmkB6?VfeO zy)M<2%v9ny2ML>)bM}F51}z)^u^ysW+HasC*nD+~*eQ$6XA{Zp3NC4!%9^0tD5WMX zlyTfJRK(lNMPeY%5DmosgCL!EtDR0^ZrWtFN1r@&cN9MR6FZJ@lX`Wj+Hoh^74Ycv zp2b(_%?CG5*&oGsy0jR(18pwH_6Sp?mivz`<==g;Pq-l9s zVd!r|KN`+S+z$KDA1z>YR%xsN``&zXjKg;FO9xBfL3?=IRdVp6kZ{c1XZO;_#uWil zEF-ta{66k@anjDPa4K*~5X%+cX*A-t9-&_7P#7=Qdev%_^qBw7gcb-*nVSJrgSaj29cYBXKxP7@jh1FZVsAriDh{Gi$?A?UESaXuGSvjPA+CVur zFl%3t>XkZ6yuuZlVh&`&jFd=`)l|%vJAWRQ)p`zW=OLQHf}7V3zymC)-eUYUGrT@d zWvCw7wsE+4wyN^W!D!2_=MRXt=eL9rJay)fd?|Z&z+|T9O zKF%BRroL0xXVJngZoL)-k(A3A_1^TH8oHAn1McGbQAN3O=npu7M(H>5!4LUQ&-#?) zYTa%O!wR-gB`_Y>u4m%l&MyXUDY>r=1vpQAOzrcyp8!%xz(O3D5x&mX z%yrlLxGj#*bKakDuY!|RIabv&Ow*I{uu1{GV0g{=`SIRxXP9bD&;GocH+(VTw#d>9 z>rJQ*%wd`#gTI{hL@#@?z2nkgy?hUpK?aT9dwE$3?7M^vCjJ?*A|&M}0@-dcI*dep z?p%r$J~ANUCrU(Xue|fMy}Gsk5oc(nhKpkR=H}zvJ=d?zRwMT56FtX)v&4`?Cz!w{ zh@H}x%t9w>x&+L?HJ}~+Os=ROCAyt|+FL!*`XJ&f*^d30ZE( z=r;@!;v`bz{-;-gidXCwqi&8PRHUK2FQz?|G@i8mg}HT%&U)$2NPCjh#PF!4tf}2O z_XDb(G^AAi`;)}gh6Xj;s)y^9B_090+Up+z8XXTHDUH-V^F`pA=uTi(H!y>zk4}J*aT~+vf zqPs}s&Rc)!yM(^_(XT9_7w)x{oWgR#rN>`@x{KBP4W{wY;4Xq)N%-emfd`-Ax!X>= z-qB6HR*yJB#k1{KB9F^4NjQC+EZh0mGaM=$f*<>@Gh`RHPt!P6jJYT7Jv34J&h1n3 zwXE4glE|&HlP5t&&MFxaXm0*ROXTO&P406vL?P{>Zb}GwO+XqZ-UeY^JiA#X;XHS2 zFC{7M0klrQ+l6&)n7t;`r1e#nUULZU*iKWeDb2j=ItOGwQ> zQtOWfq(IW-zxvQCw4$YM>80+t~fZ@MEGTaR_*qvy6{tCN65T z(IuJHz-@?m-o_fE8YSDBC(PvY7tz*{q6kRcO?+9bsR&bqR{55ggWIu1uQ46F(?>%^ zkshKQM{VbbDJ&b=PtBV(yI^^L2hGO~m4~#b`K!vnPKa7?2{(A%K2P}#%Fp+Bw_`5O zSpGe_b}>O0!2X`77{P~&3GCNG5?^1Dm%)pIg`<5+;7|pi1wIY}B;sbk>f}Z)S`=I_ zcfTpdP_2jD9j`3+`n(hFkGY^~=u(g)+t?lB41xpYp9?@W7LSY6tp7Yuzr`6XHVSkr zCAe_=lY(*EF9nt0hdxG)_uZ)zK=&76dV7Gi&_&8_Z(27mZqDQg$^%7r+L;%fF1Giu zsB)7LiNozuQCn`yQ3wvXBZyTl+l@J9KBn&|5?hp|{+Mv6o8)QfYK``i$6e-D}dl&=(>FyYjW+;If z81g+?z~1ZL@4cS2pRdnvec=bp%r)0_#y^kaIK@Qw1yg8gm2}V*p9XrCueM36|Kca_ zWqMrNGpgD{`=f-Zi1n(MaDkU@`Egm#rZQP<4r)aa2k_eVRqjs$=xcHhR5t-yQ%D!i z&YDL6nWr|Yynn38z-3-cSZ04n^eDvf5Jg@mSL7B{dyM;gLM5^{$h3s0rIL@JWxfla z7>$oX7fn~a=%OCQm5F`2G8Erf26`l1&}48 z$sl-G8Z+;|c2f4)#`7E}6*b&3n=1*^hLsa1!*`Z(5azH5Ep%Tm+wRY66JM%xGYK-I z^N`#uX%~0usY6*1L~41FL#XX2n3YrCg0s9wRRSV`wN&v5js`;O@I9v3zfLD+kCE1Z zagfLXHk_?Vi=FH28l{N!ZqshjiyXa=OqINE#jgxuqPkq<_N7;w>_8WE-tJIadu?4S zH9g>T0(jt5W8v6_AuiWfTMI4^f6&6R4;obUaVq zw~0cQ)J_04E0;Ie;vsJPMKDVPpKazC67YNDj?PnQJ8t+*sfwCzSZhr|S;s;_Fh{Fm zy1;CJDPQDW?A#CzukSBzhqRHU58a4C=B1f}4wSjwLm~r*LpFGFeUgvY8{=cJHbxE- zS1*Ibk_C!n&&P~GT5bA~rmRrNqra>(hT81a#q_`qP*Eh|u}HIUUbyYGE1{4zhwS*g z0{TyPjJJ2YnwL$8Z4yiboZ2fry)vS#5@tQGcsIZKW3}?*n)FFkpx3YrRq!ZR2WWQlm}`FRljL#^>R& z39I+3JTSMEZC*X3rj4Fnb!!`EXZ{NFiCuk~kI?*`TiM}2vh)NlHIFPW$?RJ$->KbC zR`SjmU`dK-Ek46HEF3e9=mH zSwBTA*mR8M9X``#aS||~ThuX2a=jtDq4wJs9~daiLZQLhP2-M%X;+f3x;8ZmSS*PL zH&An2^N5YTd&`(187!-(x_%hY{%uq5?Yjz0z#lMBkx?JN6>UcwuD*uSMxPJkz5Da) z9b!Q-db!X^<}bWo)HhLPq3qbX^w+D0j(ST%dXNPr!6C-Z$E=2rgnc*yL7R&7ig1DY zB)jtls8o-&H^7EA(v%@#L>Dmfan0W^ZqWBm^|pOLItJr?hEs84tw1KKYCr>qi?STH z?Ah~}pa7DN?rMR(^AL&akQij;=4in+8PEYh;V86Q=+ixW5D51e`shZ>H!E@Rq^rZf z&bkWC)fVnAel5mVf~ItjL=bc0cKFs=ygXyyWy^!?&t-+f@`Q(02LU5Xoga?XB2ISa zx31o@tw11~gO6078!SSnHl&Farim#LeY~&izJyY9f31>C(IFQ^RyS%h1?vnXm)*0N zlN$~Jt?ZGDPjEF7eA?DB3+DB~uAd+X;U5Y?6nip=DNfz?je2gJ3N_w4*E`mnnLZR! z(#n5v)wy=*u2hpM7(~(=Cxf^ab2FAHO%QLhr^BhkSeIp)nT}JvQqNHkfmcWFF0_nc z>?lwSv($#qq-IWlvGkI{X<=f#Cabg=yWX=GP5T@XMavfwmc-Y`eB9zn=-aK?9M~f^ zaM?!3$p99O2WX({t8=vXd%XvrPCuYY>zB;h^I7_$skAn=0GB%0zE+w5`cqDuOXaDZ z6oRmhLlT{9b|-7l_rCOT@cMS*KErA7dS$(bKI20zWV+GK{po}I$&R84zH7ovFwdBY zP~`gSBNhQ>l*N#AFP{&E{4iE@KzA9cJNDpu<*RM4choO6M=6iTE&hLwn}t-8u`r~s+>nm=&aAcRQ*Dw9#eUfL{7zodcz4He6 zEyJ+Geh{zx@O|aVBNE%z9IDko&>!E-*mXXaWCC{Q&IHQh6v4JgJ zv`tcaLc;u+kUinVH5xm?nU(t`r)h~iKCNrIz+e~rtBjq-VL z<&H|Rl^y$N&O0QxkDn9{WebKeGy_3x*d<^QV6&?#+;kDI!00FH6JLk%FY!f-MgQpL zz5ct0$%as_X=v6C*_<=GKyz6;%c0qOb=`9XgOB@X?YR5LLbUbmsa%5!gC@-we91o! z%B%}57i?mvmh58!+1)vh%$Jjem#1N5IL15Qh9g-|a3Qb$gAGoq_&JXHdv@s*%P4KI zKq*=wMfv?$wEFB^H$IC#ubUfdsqRD74oZICQiTBBahW77XWh=|N$5vK2SLK2G2>!U z91VWU-}6CKAV$}o6kW!|V5zywC*I1UE!f&zJ%%3TJonGCwHh6>mU!{dUuawja*Slm z{b-hXal)`$*2$_*FC|*D17KdMHS*@a-QCL@E<>K89c)O*G#B;HEFREr-=zyQW_wN*-?x zdKOkX!lVQ)sbhay3dxz|1!=Iz*48ZJS@;tb|9<_p`W{vfExU8y{>$x>e6j}?QmT<1Wb_lpMKU1Z{X(r?JaN1<(U0(L= zv4eI4AiFaMO=u8R-hVIrg291H#{;L)4fA?c=KAN`KOz>XTR9mlqU>7u4>ZdeB&=c2Q$hq3M>8Ue#B8-r<$*{w~$z=1i1zXLyt zNxl#i2p&ZvlnuM!0QaW7bQQ0lUIuds7F0Vd(L^reI4!NwhaR)ZuXbymVxRNzfOT+* zabEN(3S>Xf9Z{=ytS7*_fLyXVA6@VAd}$5XonzXs2V2~%Cr>Sl6e(>3ssG&YoO`DY zT@>xzfOA{-rz}nL9CZ{>_Bs{W`dPCl!CE?|)8k*y{TRRC8X4>OVRu$NF=0lZ+9oPv z5Uv3bS_+M;r3EnR5jL@L9eC(D67Sn2^cCz~Hum-gsjTzy>!T;Orru5wa}O*mfeRwi zAXrFrgg?NQ%x`1so$mN}5B+jlxGsDK$f{A$4l~bw#q$S3XGCxS;Hcjs; zsxw$~JP&cr<4m?lLRyy2eV+n-=-Wct^cT+%d%>4M7d8b1@7RAzu*0#~gi@ctc~zKvmLx7LihZYgZ<8bar= z1k)VX7_I&Mp!jlKa2W|S(nC+eL2!B9;&wSV(jBT6CFA!^e>BEg(I*sz z_D+Wx3^@LFkxHg5kfT%m!_~`sELHz`jU+8t^2zXZ5vpgMf2PZ8X1)nv9+&6rMHXMZ zTN8K(5l&!tHj{d`Do9e?ZCN{cX%s}KlH9IP2{HGK>!JpqC)$bUdi5+z%Bf<~bqd}C zwD(HEd^~Rh|5SO#ek9m|)Nc}Rbr>7j4mmo#4@~m%;WuM)(wI&w!0XJcmgO4aYuNJ;GJMt(q2btGQdHr|n> zjAcEEDPLVUR{nS;@`m}O%15epyoyTN>{o;n$XM5rh0oe0d+%%I?@&GZJPu)5IRF{Y z1jVG48p>5&0IN$dNx#=jW_HA z+qi9i8f^Yd!^QnS`SS-JN&U2Ubz@2b^WfeC+H(nm^SXA?fU9s|ff}2$CNvm;0N-

F->SOCQh>C|V2>l;@$MH;3Qy{TGm3qEb`mGvr;i7?nc37VsFn2IF_sJ+zvMo|6c)TZI&+L=Q2{XC#VViuWkNYwZj((2RY090H7GPJPlZ zfnD8lZLFbNyOq^}hN=Up-05@yZ&HGOSDA-`cQmXpms0tE8CTOPMh z0(rPx^UEnfzKV;fQg76FaHMGykhdp^gm<{)OfJI@Y2an1hFzy#+X5Sl9S zyk9xk9AvBr`x3gHJlj$!oCvy(C#-01$MZug zU;k`o+eR0dFjIH<)&zei+)H}-h|!n4lRb-ItjuM?EJS)c;5a_}7%MV^(R@w_ zRb3TmP0n2){8UCxfHx{Vq{F^_ zW!v?oMB%vjP70ouF8-SH&bMll9m!Le_<0j`kdV4=vuXbUWL3e%8JMJ>gIuc+BM9O0 zxdE3UTE=V(JZVs;s^3uEB0vqLXTCXNk|MWI7Ri?z#m+4@`RW&M`U7`pcIt7TlX6d$ zo^2^B0OFP|-!m3Gsv1#04nG*l>v~6bUhGUhr9#>!7uZ#Na1kA#>6L|K^F~*(3-5m> zzDSYr9F#|6ZE~Y5JVD)>xw%(air8Xt6jHW@vnRbsH0VOeV@*3BZ@&b*GqAy04H)Vh zWcgn{W^8a-vtqN#h{#Y};rAW54f|ya|H+33P8#AZmZHc$2gO?^i# zt(5IiE6`?b*|5rntO%i{}s?gl5QvoI)Ql;7kJwkK*~sn`4!JTdwItiTQr&nAt0Jt@3F{eJBU# zqwl!w{#7>*_}fvT4HhJ0<94|2X9_Y2K)cCNsTJq6;jL8HO!N&vTO>klYoOYwjAsS& z{DOi}O>~*mmmLj#u2wrWcFX+sdiF!c4*$4dERz(uA1unXSasue!*efzH-_1^;gdBG zh)1IJN8+x6YEwU7X#8%7Qj%eS{4{%GA^^Y&MCaS>Tjgc6MC<~#W``m^TlBB#VOefp z6acQzk>pGk3~%%nr}2G{BbNBuKwru3l-Atzg!{eyALV4jvO=|t-{f^q;UzfubXps} z?s*=io4PM2L2APkV5{L+nP4ZkQL}9}y!ioeLHx)*4|FS%%>p@%&8#`0PIYOlHX4g# zPIG=HLR&ZHS^Bwzh-VAf^AFsy79Euv4y6eV604RUJIOSY4dp)a;HoOL$R1kz00{7F z{7C%#=$midTmw3cBIv6I1eS9Z_rmMB{7x~g+y-VmuxF*gMbSeC*7Ij614TpxnN!|0e})x zglsT8N=RA;UzFoE^Cq100OR&3Lg`KC0iIpcUc$eRNgzU?@n z!5b$9Za^}Uwtzm#Z_B*%_O}$F$sJ7{35R58HCk;e7Eik&8uUUhRVS8mCITW?03q-5 zP!mo1sqfdxo^CzymHyK)WOW7nAY2 z7~}qUjAiauS;NgbP%&^$VC#2y&f?-faLJrO}t4YpWik~ z#$2gY&tNEDs&5xC(Ww>NX^tiD;j#nj`Bzqg2Gz0TLf-huk&wr?@<%a)mAY87sTaA~ zanWk5V@jTm8Q%T&*^9N3QF$A(**lAd+qR1qLqJYyR*AQD9x_l1vp=nprH^`tOaw|1>!;;&V6)Rd2#J%Yf86(eLX zehm*A8wA7*iptVHMYw9x_X)|QA1K{g2AKYVCghu=<`=vIXIO1Oq@Ytj|6GM(e8qT4 zc$=`};_bP`QWkloE3+NY$7|$Fn#4hpSS-QLReg?!F4M|bED6TpVg{A8AJgnF+TD;C zP`ECdz0LrI@9ic8Lz19qq#{%#tCeDv$2a}zG0h(1BgMq@rRY%rZCvHcG7HV2Sx>Lg zh*kjm=%_=*8SX)Wc7snuE%c!fg14>q7zyP?d3kT`wux-kMUxlz5a})xT0Aa2tQVB9UDHtAh^wrsZB>%Q3=~kMk4&C7Tz#(mi|jSRwF6X+w|`1fS&u zOUE)~GrwjTy{Y4@pP!{8H5}pv3eEH7*t*Zk4!{^SKceZ|Mi&;5-P|8=|K5n*l z`@YJj9J6x|Y+d)^XyNo_m+!|Kq*H?#diM(>OvxSFdLLEqF|ODJv?(KIZG?!4!<%Gc zW;1*5qn=oNExHE)cm2Kbftz-o9yl6Pmm&bv`-3Nb%$KbhG9|{B*_FN3^<2GeuR}JN z2*X!y+?0)egH)vZI8dR0z-A@l9~W}avb}p3Ar80j8Q3?PmDf{qQjvGmnCX4EK7PexGB{Zs9)7Ek4&DLs@o+zd%l^H<4sN z9{9zE*d9o5G>|5R)pPnwL{Rg{(}=x+PR!Gd3f{BdKJu`M$1L;);v&l3r94pGlVYAR z#{yT%0$nb(aUi;;tRCwylpiN?`a-i_$du#h69Z5GANe%!z!9hQ*t-KS?X-aP z3}jLiFeV^|*op1`dgQxl=g{mpkEpLaZ$NH|ca-Feg^W|Ri#xJCaI=47RAbzCp4P<$ z#@&z^KYvVqPwmulg%I6pk4o}dYTa6XR`D4i>L_fL*^X94eACND-({d7GsQbg_wMP> z_sQ6rmPm>M7}1qn6Q|mqf_FJd3Ky(00J2e817Pj!#JzqWbb2(k3=Pc{XO0G59klUL zgCt`rQYXzfqCp%X9Fnh(oJzgHX;M?^Ii4?0aWKivH~iAybKd1(z0ZT?<#tQ~cCJJ# z-)QAWXixagcu&WEp1;FZQV57rSdzZB?a6x`DOPzJJPx#&{Nk-q^TE{iEJe5gQUuk) z_^)?P`hku3Mcwr11iT>eIYHSpEdVpNDWl{4BA5`Uo*Wimlx+XfY3Cx@tv%Nu(oZ2t zT%cy?Wjb2#*^`sq?s5b>Kwt~v+>pW~GC zt0@U~Eslnp;&_*}&d|cUBD0t_O!-behua}r!aE>@`DlIZ@wtL6z$Rncy}PTq33vSP z#P&szAabxv_8@obNlBp8$|9#+OFhaga;0OV03COp7#_jEt-p+8)cGKx2IhN_K2@jyVn-*jF;@%Y)+7Oy-6I0R25*e9=Lru($k5) z1Ey$sr9^t$o$xJLU9cN(ZbazRrA2bjC(1H4_%M;}XT2=@q>JQ}rX(-5<<^&62@TF- z;?Mk`Iy2DZZN~CPw8zaH`i6iDrdgCc{=<>xbq_(WcJrFe(z#2rCTqz>AOIXUG!`BX-`wj*!I41~v@DKk&NV7(3L@FZq$ zakI>DF>CaM+JOkb&o!3iQ0U7u`=%3pP?ryh6MwxRARqgawaf5zf#mCbuJ0H|j>1Fb z_|1->Hd=vV;kY6F&{TNm_0mKkfXn(AjXpG@1QCq%IF&ana zz--cN&>TI-wO<` z5Znmu-!;Xv3m$W5tG>((_k5qM*0Gd+W)*UPU?$D#M&_cOb^}yadrxIE`lF+?TQ9K)^tpb`2 z$+I5I<)WS;UbcRIw~3%SwjLJ{+g@ED;7%!mC}#>8{Pt=T;GWCbh_{*IV@>H3)roE+;_*BI4Aq;-)-ST~j&i7C%jJq2%&X18u;;?oKyRJ0{g_ zL0k9GmA($+=JlQP&+~$1HB!Z19CC>VSv*cJMzBid7+d6s0#xtoZOMG2oQpXLf}T#P zd$%lGT2W^GE1kc#Ku5e^Ign(~>UWC^QK1ktf>yp%h7K`nM5ym2`#|H#h57hHt+ILQ z7+CBUG>R)?Mx(}Z+*XOIJ{i>6Yw2OB3!JL8fau~@4~$gRoZXKGwc7d~3|k**H2PsK z!eW{tS?c<^0XAzat9;Kj@g^zdNsQjR*GuMmK$2x}^+$ThOCn9Ox}pgYWLIWGNcGEM zWjfjZb60fPy3pbSyV}kAr%jaqR7l=EZ;~as%v+g-QCAid-&qoqkrL6jb+5-LZWl;V zW2jbViVCaa7Kx_!ZrGrGEO(ZG&GkUiBZk;RU>>EIBD@j3 zh~)ft{Na;A4iZ<)yF1MYMHM!$zI^$j_mx@hr5;HKjylY?S6{(AV*dtS!3J5nPX+)) zQ+cUFo>sOPD>GMpq;6K`dqxn_tDpBS0NNQ{HCY9Dh2pMnf4TPkpo4%yGL}`>F2JF6 zgBN&`{-+JZ2&&3bphj-7BdDA)K$&Ea zWO2cdQ{abrn-3G|`Su(#khXt6vba(w$K0LPJSV_#H;*Lw;Y!|9(-Nk#oG}DvOevg- zj`5i&+YTp~WaL=1(b|zNPVmv}%dc(qsDx8g&;|YA zeUD6D*_GuKbN;-y1jD>P9{n*tG<|o${OAEm+?cxuJb74yz`xGDO}7oWeXsP*sK-oU z13&-mbHvPinmyYk=b}Kdb!KH#6yEz4Ry{l4m#kSe$vU2|wJ-JoOKnoqZ&En7>+**P zDg45cFulOTN>IYaNWVO~p4qI}DX_MdBsfo)Uoeg zg*DVy*F1NUzy525fUqg#ng*Q*#wTKJQh3IOY%c*zZFwR}yKc-;PyEM|3T3+dZYyWX zMpSn>`_lKb__YoS=!)=KR+>MWjo45eO)Jt(v8&@ip`o2J(8dgHcg>vUdoTMYhYsdT zaXgn7N$8p^2{yoGm8`W%AE7a6u*oek#iahe$qNJ|*EF0D()IeOqhd;7(F=X$W!S6} z#5Ut1nJCQD_?cxfnvd&kxA}RfA4{23et~^yUwXk0kIIbIoxr-Jm6=1EQKo5c-pyBgpjrcKraWUBfXc4M0$w6O1Xi>Vnb=wS>eQ`z;Qsh00 zeoS(idb?L|Z1TfO>42vrPXeA7-qWm}EaCdmDr!Mcun{1PH(qjcy4?&V)sf-IR`SFv zHA?{Z1MzfbO0+;)OjnGltnrEia@)ysSVQs;L67UPY8CqcqxBL+b~$sqk!X zDlgjVWD4|Cf1r)oeYhU%VwIj^{^8SYL-?ME7Mc4JdXtPwP^#XCJ-CZ{NlW6uZ37ji z9jhGRd276pf1sXQ@aU1q(Od{2j)r?suS6fn7jb9L#fYj@y(UHsIQ6ggzJ+6|KcrK) zVZ0KZ6GwW+i~+JO(Ta1x$F56`B$8aBlkabuFBQ(W0n4`}J9+2CqioK33RYTT~Qk!^~;3Tk4F(ar7F zA=|2vYJM8}pliuP)g=Gj?fzq%gF`R3X0lDn%8=hc*EhUx_hkfDw1_GVM2GHqZsZp! zP9Lrr+~}yM=1V7n*H}2eL1x$}U_yA}k2l353sk^~}~o_NJMOA*$+53379 zPnPJ|*0ZfFw)2HDa(O1vKHN>4i%AbmE@(8RL>dle>F(NXtVWbaG-i9(`6h%BlNZ_R z2D+E!u!R+7A=-QWvfAz z-}u?0(4n4Cb4akm$1WgQ(&Xy2&;hz|3N9$nQ=W_#%ecx81f**=KWHsAaPXY3x=O1S za4h^?cvwJWuqan*o@T{BFT2P=3R3ZgJ+EiAJd97agk|9zmh^gS2MUpEA-Wqshr?YG zHxdgQUKDh?Dfi8m0fh*ml=U?$yEtK;7wM7JGgLYuBL8wJ$CBrxqX=uZKU_)^UePdp z##GSaJM&Dcna9(dJ@MQ=i3K4RkvH+bL_*novTp_4c>B~`zpshNzyj78p2=VroylmG zmB4m0-PrU8tNJX#_0HdWghcZi*_~9^YP{-e(;25=;y4LDsfj*OpqY{EclT#k39bfB zZ@24k_&Fyj6y9^LVvZx{_K$O^A0mux^eLbM#;>0LZpSMKUaOf%8>&J!uW9agyoEZ} z2D#O?IME$9-JM^H;m-|eXGstmRF3fg`4N9yzilZ{HzxR8B2Y*{*rxLSk|FF9AeJ?~ zdkR=(cUsXgacGvdBw6S4EuX7ia99hpk^cObqTHX)UjPS65So-qwl{aA$stzCTR(iF znITZ@=T;8L+OyuQ`C4r12mu<9UPc=Q3?u{X9R{#_Ux_~Y5nOV1Rk*_!satvBN*y!P z^L?*Qc%$xXJ=7GR%@0AR*@}tRYKsRbI@vYiA)(cYo1lmBMeL4Lt7q-(lQr+C5*)GU zlAhYFI+0ncgaKs7hISI{9*Fu8nMcVm5$y2Psx`qw#9l2WjV!^o17^_9zeTdWCEK69va5A5H8nfy+YS@py9g{6mcYFdNNUD@@mFy8C@l z4$aDE?Xual=$OU_91a|Mcm?hDrFu3#!Fn!qD5HjLvFvYfGaA>vHtw_rEcVeIok@>E z0M7KvDLPO@e8f_NsDUDQZpQW^;Q_U=;{ya_uq0;{c1@4JbuWG~?^}<16o7VeSax^e z5QS`8Ut;M0Gqk_4ZfJvCsoPNE89H7Gsw;1H+ey(6U@9KF+P#9xAIG;6+&(8O-Rr}OhOICYy%y_* zO>S202z{Gw+YZn4&=yU^$7WR)x^kuZL5R!@&$Z5Vzsd4@&rS}ap;rJoV12*V>EST1 zxNx3G+#KW*4P6LYm`+LJlBfMp?P|1zEhd|6Me^|Ac7x+!*^r6p5n81#K}B3zDJSk8 z0)ei|M4`BSP06cOJq)XvzQ77bT2gL{-LN#bma5{sbQ3$bFfV+>s|>#A4ghgoE$P5g zd7F=__(QkLGu1JqwM&y37)NW(VspNb-NOuXm7B4l`q-=&1IK$Xuf``a-si8ns{Xz? zL05GDwf>tGMcX2Z^GEOUj#&6-AlHKNd7^n~lXea)#g-tTmF%9m2-;khPJZaG?r?PO z^$a5z-CC;H2CL&8U(;syT98B6Y$qhxQXeXK$d@ElM=xwA#sD?dm^hJ4Q%c9Aa+^2X zSCpKB)sa<>(ddH5r^gMwdI`>s2sW=S?*C&kUB3Lbfv}KhwDd>_^2K?@!0n-y&AgF@ z#=>F7?X;fMDTG$Q?u-Z<^asBf{eoj*QcO}@l^~bNm(rY=MkH2r;#Oru8mB217Nx@D zhmy~qKn;8hnq~CVc-H!=DyLM0vW%+MP!(TY(&yFBnLo9_(fITt-J5L;(a)Yr$KcDS zWxRi+d%-}HZH)J)mmxB^8!x6gW@7WYMA>hLVZ`_|?zoVh>vcspeUt`nCctPR9nk2C z8Z=gm>G^eMWFwkUH>)42oe9T=m(4czD+{9+e3Ud<_bAlK>NW~=_peb+=3uEo3943J ze<{Gj>&l;0&(A%`9hRoZ2W4|r&B>wYirDssfu@+pnq9NNe&|jh2~q!(BC}1ru@iKfrw|?(IP&Qb(K^PcUXvS;i(Q!&M?vhq@2&2XF+1O zwcew8n079Ad{h);8-uH%CUcP|F-z=;_8Oc$h9gFR31ZF?jx&#=F^4W7mU{VtSZ2Yp zusaDw%dd;eS8kyU!0u zFaLx_apD)`)`l!eP9+O_sthj)YF0i_<{c$$e%+$CFtw?kHFDcBCIqzDMO@0@)7oTp zR0y*z9(IC)T<^iYsjg8(=a{Qy$rJV??X_?ce!8213*rHE3`%?P-aD1Nif~+wvRv11 z-`)6pe_0AuI@)2Xcm2{iyTxt+&z4J)Pa-W?CcuZIQCWgsU2_rhH7%X^BK9OXn=;Y5 zH>p~e)io^qjij~yw_qzV1BMPAn%JMYDJCXaNU%K56Ok7fjSmT zDOK-~sdKn)=BLWa6?cGvPapiueq!KF?vj>YF&g}^Lo+(N2Q8KP!byR2UkDu7du$<@ z0v&*tTjh=S{?3PP{&4=~wx~MQ>;+M+fC*Rwqg_lCV(-4E-ASucE}X&a`rxoBKx)SK z*V1$4z1>(ZGoQ~5p0F=sN%*?Jz_4_p1xlH)bNkti>0J1HO;I;`B#^qZc3aFC&geJk zL_s$D?Ozg^2o5v?Dpu@v4HsH@{lGaPMO6^Vx@6Uk$Q&z@$X~DNrx&WVl2VMPM^x{qs`q1qadU$1&G?#)FqTpd0 z$8UL;R~=V_qNL>Jax!uvu1|P+Hol{)-ip8EMbWWdScQ*BF0wz_+WY4Ew17|d)HxZS zx$&4YRciX5r68q-N`E@#Ct+Xsj`AOl7cTjPZ#YQodhToDL9W>%c6Iy`NtAoK%ZT!w z2Di~yZOLWO&OK62*Yp)A)qHEAsfb6d9Q&hdU<0@z2^T0p=3MT+&?;^b)3Ty$xgE2a zZ5~7<5C%0mhgr#9|11H;E7-SiD1%p519HfOag7K2xq@()!xsfI`J=VMm&+8z=XO`R zki_AAIc7VP5z0E-0=jlb)=QKCAG%~Vg?v|{t~Tc8n4*)D9K*xwJNv-UBSM!&-fno>Lv|D*(Wmlni9>HI*OFlcFA5TVwLz_c#~Y5NUm_WQ>Y9 z;-0i=wPND{aPqz4)AFcIuVP%v2+c0Ta)I_SHcwL*;4&^u-SaLPdMMwu?ssKz{l-b^ z`WpaZ$&<^>j*m#g#=CWwbpDDFENHS|k`lSnGHY~h&PRtwhWSD;4%DogK;OIeV5Noz zuWX6{3Kh{nQ#o}H(brSe$?^YcgFO9BMWeT73>zJ3G&=X*ErPK00;vR`H?;^n;{shgH`8B&%)ft`8g7@W;?^kfrZ(S z&BM7Dfp_=m07j?AS~g$4bm&VI1~ik!SpK{I)?m6=PaSF+}-!X2=7K!cj(|1vG|!K zbUE(It2(7i$!bDQnbw!o_Q}k%83`VGN0M1iKTT z5{_P$^G8Axua@K>{aBan2(nhzYF-l?jP!0HrLVx3Jvlh`mME9H5%UA>;g&050|WJF z#_DKytItxMLpKp+MBC;9uUHYN>qNDaSyDO5&SALNxvUP)YS^r?b7yW1tN07p>fi3# z#urIQLWz4x9ei_q(AaOHimo7%!fIo-X-Gy4pi;(1FyCm~eh%UCTaV`v1qKtXiR#_- z(w-1i3nT=uXJ2||99t(`=$^+X0zcrG@ z0(<#t@z$}Hr`7d`IL{MH+5!{x*&91h)33_3i<9&ruF&ngp^TZ0~tgLrt7RSuS~b4+Ot2freFb@~~MZ*b7RJEsW!?_p>yIW;GSEIogZ$?}8O?n?ma(ve$yMMo7 zFkRkq{zuSkANrc3y>$nn!3Xk|LvIaSjTVM7ptWM_)4cu8h4rP&l&LCKBz;X1ie*fcpl%~oAk^HIW)mLn^{4kFmw6|~>Ceq}o#gBl*FGc9r6FttEe zl{^?*c%KK&$krPS(G&w*)z;kuy_(-wXu{V?sG4@SCp(I2x)4)n)^&7g@I523FT=tb zytY2ZdaR$e`-Z=y)FF_N3I)Fi?@P0?SZ#a!@z%i(sz$=esT)D<2@^lYMaiynFm z{ZKFTok4hr)~pS5Nom5aO6}Tf`KJ0dA=S*F!;L*5Mq;Y>v*~MpTEUM4M z?CooHW1?TRuHlHVGu4bU4(Wf{Z(&qXAZ= ziOYp9SM#`Agj<{yOfyqzDlSLzl)X0}L&A|4(faz!bB+%O#;&S|M_Z+>B2}v+QPp-| zo!DOqh+uCC5y^Bu+e`%-nZK4wNUm0oUqcI(s{GVGpxKatc^Mm2*YI>lJ&R(iu~%@9 z7$3CPQ0klN7`a$*&@uVZt%{>SvS9+cfIiTjs2xMM*2*;RO)8jMe~dGw!+)>I-W$ zdp0j9KbmT>CV0KiPeyxqmK}<}H!kcd)!j0|78CI{q?{OeqvCqQxW?$_#6iE+yu*8l zP+AGUGbQJTa%)lXLSH(=(&tW|4x=$?njGP&r^E{^ki%-6J44Z{;ke>2JrcWb?xWiv z738-evUPvqX~Ro8xTv3q8QDP&?{ zrri8#Mpfzq0bU~qxjupU=E#65)9QfYaHMW|zE9$AMV=E{BZ^?Oebm;f-z$J%(u_j= z`w~_mQG>A*xh>uG?yg0HUrv_EL+oP1wyz{Mi^qcN6V>KSeV)B*HPJGxtf~~dl$wl; zZR<1JLpmZ=%60Iq?u7%vQ9Y z3oY8KRStgGzD-Jijck0eX`ftzw8=RvB|rS>U5hD)m;^VRHW7#FI-K=^RZgepd@7jS)kr zV(D^_t#_yF5tXr(Ao$7<-CqrfwFRifVWsa$CR;=Vf(ci_}-nbElxIy@BOy`eDUUM;aBF<(*M6^?j&;m_n+@M3>s*C zOgAr1!|PJbZEa#%5ZSSFJ^is~C%*dYf~LW+cIfWurBC%W{_{FO7~;XtR`kGz#x?-7I;KJn~N`fwa6?pv80^Y7L1AHU70e)ciZn6vd1hPuRB&$;n-MnI#LKP{Vz{t;6GsTD53 zIU;X(WFB?`@&3;nK9yC+Bej2Ahr$~CRm4~cwRk0O(tkFPH;w};6=N0hvq${bC;sQ9 ze%<{E!9up&lWDW2c@1cUr^`GId^}3-P4nqu`HK&O^J_S4j3Mc|Y8@yIJ~PZ>wGnYjc!9o2Kes_w>LupVc!|mo2yf$Ia=9 zzxd*R-A8DuFX#nWNY6StYo@Y-!@V%V-+zLn?rEs8n7hc?J%k>gyUa{ZdqVmD>!E#h zAD`8~)cdOpKM|^>DMb&q64ea{+h+#PduH{i=Nk=xGnFh5!K40m79U%W2fRD-jxi|mMbNT02U&$UbHka!EoG(k9u=T!2Qd8|L+%G(SucmpVBV+H!Jf`PXnwqUcs%A zT-K}q{hi_61QGCg)48+e@qaN4VaF!8#mqG2|KiThgMB7>mxttUcF3Qu_%^NX2p0?M z=qOjE#O+LDcX{I6%l=1`&A;Iy1PXiuSN&dv>T$s4dqp0zr)^KNFu)=vuk?D%%T9w+ z6VvrZ!)AV@_gY&EHxW#~-V;eR2`Y4xxt-@aG@CQuvXXDcOXZa|uuFRo`*_#uXVQoI zzp+IB+5&&f@=s0rAgpL}9{xW~z+bQP(|NrChC%22e=){qZ}C+IpAerKKC1`(X@LIn zd+B`}`TlAl{%OrvwQrXg*>YqjRzXm#IzUv<^el`;STg3V2|NY~| z|MBAgc=12)h=1>#|F`$X=V`*UkZY`oWf~G2uLO8yNBTn^Qc>L=N;y6V;cW!gcCMgg zalHS9JEm#!gWsyD_Eb;<3R!GgmbrZ;oXF3*3|Y@0eX7VB=%H!S^CMpKL>JHh@Jb8A zpdccQ#>_ALsapJ^97lH>@fecmUXe!B7M8Zfo26Z$!z{l0C>pV&Q7vXh%!>5(#Etr_^QobH)qLCvqU+^IbFGIIri#o;v%;Gy*6iF{j3zfcd z+Q|A`M-LRIgc$0(#IpE|P1i?DYkeALc($t~tj}FOdjDy$hn$pjRDU~rr0I~@gIE?a zD&(K;4wQcR0SGFGD3P`5L=XFPIk@5obs<=FUB~`E#=bME$*l>OBBG!mQWOwS0gZ+|42R?p|km%2p> zjTR*|J|OduoX`t-bmj~AzH_->z+hzCVxs9vgO!AI(}!eLI|Mqe*1^B#1#r)wo|2fxHPXVV%VLeMRrbz z_ImGtR^aZr>jRS{bvD&If{%}1U9w#xEb^;0Wt)kb9mA@v(DBB5`HQz#Gt>T;Co#wc zRNbhT$rA19=iR%sRMjO#fYO7_93IWo5d$^~Kq#W@h34{-$j3O*&o%OaJ2D_NbPg9|jEV#%&jg6dxSO zaf+>K6gFr*y3Y3C!wt62+(hT9NC?;Uo#uE3J8Ve|dJjY%FVHDEyfMmn`M6}yLTzKN8<#F$@4W>7PD^-Z z@)fvJHP7OfEUJi#Auokj!*bc2^dfQQA_Y`sXYUfliPQZ1sRBlU-ntN)dd2&%ex82- zkKY*$xYfv^rwkl!RBPfo$fU7@#+6|6UOvzy{Bl8A_ywrd6dRu$L@8+u|G9us=1&ZF z_Q|@$o?RJ}F6QTaU(d+0e)4Yr?evN@0Y|zb!H*$34ZeNJF1*l#{1WRteAnaksd|~} z=EVrf-7nTm+TdNuLAI}n5;$`<81yMPQNoFxApq8_@&Rjo@pqrQ3<7Jcrbc+PyGLX&44Ad zqv~eoTZ;^I(Qj%Cb(Y0oFA7 zFmayf+!?k{5bo>piFQaLC-#@f0;=Ud61jgq=)nkZsu{PkPCo=NZ9wGB2OrWilkFm@ z19onFf)v7%wUd*D zlPJCRFE4O?VD!Wq)q=AA|Mi|O-vYPO9J2~$>ieF1*1r|de#=P(d_3Kmf1-km8r29@PmZ2=K_ zcKXaY z78?u92Db=3g3my=wsss{%Vkqqu+Bt69J1t%n@5WEIFYTrVF~GOv!je$^o$qcf0d-9 zpu*8<3-T~K{UmXlhPLzKF3MF;pZ6;&s=f~&tcSOllw`TDWUPNii^{-i(Ymps6K*TM zg{9?HbNAsTepfU}v6`q{gZz|IzYub|_Epb&%$K|LQ;_%R7p7U^;+}8=tf%hGt8DZ* zUG2d(7(%gHweJlds!ST;)xS|KbFh)Yp4zet*5lN7Yv6X^;n)y`$+BzF2WRt*tDdAp zWozX2DM)KW?})!u=Wf_Y5n3&GI!q>1$suSB$aR|pwnHmWJr4$bV_t6$>V#_W5?{-QLW7R_F5|z zRMx+T(ql|!vd8M>6ys-V=$IZWX#^C$=}AKgGnowD=#1@GeqX`KB3m>YNA8}N(eaj4 zY&RX#^ci0C=tj=BdJ`?ZEazpi{JkYZ{pbDUD)$DfBGLqyxRx6FBioggI9lmMYzLre zYuWwPHU*dTYaTb0_DyZs((2uI9`qAJNil7q{ZaS2)Cg(fAK|^HK(mPleF~1y_M+@b_#@ls^-RDHpeH-C(Vy=B5 z2jb7MRsGqk*`Cx4t3BhkuPvjb^oO=x*|KZN(pFk2S+T~j+(Q4f(gS=#k;ZXr8x0L| z%(7pQBFZ+0yc@M|G}@bNRV4jqkI>(z+uaBpYo^_4w_m4D`(yTjl_J)xj;@e2eq&A5{DQ)#hIZr=*$i)5mO#QzM)CIf-S3Bt=_d-evMm`yP!##=wtdK9HU`gE}wqB z)^CaGy&_8z7dvIk4;^InbZL^aUQ`Jja>T|lo{PfiGia9;Ve&<-zA^QmWhgp-v-kVr zi{v|C4le#KS5Vs7qv@RV3`HG?xN@lWy$ndWY;M~l{Cb_9K<)G=h@QEtCZ%mpu0MNE ziC^dW!h`~E&K|ELYudP}?z*m_o{ea2{-(+rm4m!=f#1=EY{n7r#hS-tX8Zd`%T(?M zC~=jB^=hYIq!a!g@}we4>#)IMAM+mQx%A!ajzZGKz%OxAB_j`KEAm+sHhEQpFP2Tz zP?wlw^cmK*JZ|jUfGCj`dmBFscbD>zva!4=h0g;ZYAD1c8ZMXf)hXuDj4IQUWoTct zN*({xrHQSV?n_x{DJi8*h&;&`fCl@h@VNcR_(UHi3S zti8hgVMrUMtuAKIjI2EMP+wm3M#k3e5w8-*EQ`ml)*7I(NZK!;b{AkeUNy%V9wXqp z!!%N&Xv{Y7B#M4l$m}_FjMy|DL`~oMz3Gswu1~ZU!Z4S$irls8 zvhoxkPTg~A6h2dSfby&tB#K2@oO8-079fwTn}$}E^x3-?C)+sxW@;i^|Juax73;haiEl1NOasuEvwp|VPUrdKC%ajzgH9`AM0 z;NEU&BR>?(lRvnmMWCd5B?-4_F^UrJC*+~MwC00I7;;*jT~ObDM7l7qjrUlhqJ_Q@ z%~Myn44rMdR^wzWwaWvUng1BiAw#=mHz~ywXZUR71xM$IJ8WPBJ7RHP)pX-Y#8vmH zhGwLTU&bq?S_KPZV=aVFa|@==`22R~=oID9BKBi(^wKAW-=AJ|iMj8- zfnkh39>opZ7>9?LZa3w}UuCi3MHii6J#_gF`-6kLyM2~Io?4E$J{*~#?r@AZX$ zkkMoz$WeB@t?%=ldeN`w)HJ8&C7{jj`#6z@wM{BM7w2OumPS^-ZB$9UyApy zEwyx%c$#7niVpOaulkiS#j3(I1`slm=52^vb=WgTamwDPgxlJvLw=+36)`Eoq9ZP~ zVW(c^5+_{#N4ck*3|48u@R?*GDth8*y@4_HCt}K(r|#JGfdU|YuSO3` zFP_4$wh$s|l+W#Pv*_i4k-*8I4wDc79~ z$=d2k@Gn-|AY$n?Gx+stPU^i`Ga`EOKaTh9`q z*1RtY?#)D}S}R6fyBseQVOG8rvywqZ^EErop2PbfJvq08Rzcxy51$f;YV^FQ1lq^6 z=3!X3|FLc`?BI2xMeo#e8OBcr?mv+BG4VDMs_YJopN3G&4@;*R#^n`7IG$EBY&vh& zzjrKyB=cSZ>OJPSn*k*`vd)`Us-Kd4|&AGCEX8z@+eQXvNgDZtP6E? z#)fR@W1!#~*miVROgA{Mb?*I;M&_KyOwAU#aPw~TPooumUA4Kk8>J}Tlo}1q3mwk@ zkCjn!{4)h|2FCQQY)UBNG%_qcnWMoCx$FM-Du%!ARKO_Pr5^PQH<@$Ef@qk1(--YN zU8enHf1CGx(Op87m7xo=QCdQt+vN_qB)u(%kC&mJ2NCup$Ldk?BA)O4-=tCu_WS^o z5OTvqkxR@7+_at{2RTLK2-KisVJb+{=e*$Sn$3fP+`ZL?4GI&{u#y(CDc;s2bxs&2 zZLpfUt=K2oy$sVlxB4OK+3?{dF3Ce#y3}Xd+en=>r$D;qK8OZr5iPT?w9B?7)`KdA z%BZgWf`SR^_ce27igKPPDQ->rj$j@9_@8~ryohdDwow@I+8)-eb#mO$KS?6e9QxfI z_}*>7eN5i{m`XdJRs8x8mf^!Jqc**Bfc6+ivAZQj5IuKwutZR{D$EfsHfp=^s`jC8 z)~89(9SR|-c2-|^)JV-H>`WwN+Bo$Mt&N!dqtQPGH*LlsijE3+|(( zqkwD5di%EYyU%Z~<7O7ShqD&-<<3lG<<=YqQ#-z*<7V+U_D=TB%RPF{B}e_K;1DA| zILwS5v~S{bCM?oZjzDLpT`cUjnngu!3Kytm^d-grtSokL>o;(nTN^r7fks6Qce;X< zYF|8st(qjvk&@N1`9-j2o5ur^Z{$aQIU~J^EH(Fr6q8mQ5dQx0DoMpx^51?a;%}K( z;Pm=#g>vHX?24K57Sj|iwv)Jm7yZB-5l*0^1jSF$jt$Of-Fbc_xhRiSbu;j2cU9J~ zFSu~55^+0erp-0XtbjM^S?dy~RA5u&t7ZD)(~Q6aLm;+A#`V#`PLYz=`-t+1D^f!2 zOl0rm^P6ybi}B(Iay8Pcq?ygElspUL-)ri*{mM_)8k9fi{h7V4vc!C-# zZp*&lkRVBe*2&lObj*T-W0(YxoAsDpk~6+C`PkGnf;KiXf_d#GC+o~X-KdV1)BMJ> zjFCRmCJ*fl)Y7|w@0^}{=wLTQo?Ee8-Y{$B(uOjeLBFlv^MO>d@&4*m>VY{m2vmMv zEmsaF!fc8323N;uK6OvK64M`!LQ<1QbxeGCOI`iMGw`Xn^HJy)Hgr=l^xW?V1f&OT zptdL*^)=656%C>hEDGKT)!t27Z)s6g&c$!J)fw;3nw*vNDo#_*F3-_%e^A<@g%|Ny zXX9)hfjw+K(8st8O)DSI*=Z)N^b|aVsf?iXuvYUK{=*vH(Bq#j#8H|FB{T74?T87p z-pOc@v65Qf_uGfcLsqq|`lHS|%4>#Eb^4}81xL5!<6HnPpO#%(9j*Ju;Gj|6T|sGP#k)oRIe@ z;$61f&fu|dLCexJx%RyDzC4L-N^JLK-6;hW47g zs$j}LHlh_)VJkb`le8a7U1B?E`li2T=wh@x6t;qUH2SddMZ*<-i6bs3 z%h9c;jR^9Lh88W0gX9>={hS!dy#k?8q_E3uJ!&PNypg53l;N&h65V_bZK25vxj2(` z$b*D>tgOHuw(*H_EsrMaoBRHydCM*M$0;>;LJGe)PdjGE10a_0 zs*L`#7>k27ZFi`6S}fB3p!u27R$RI8@}IKTVkzrrD!&f1GDl`J(8lytj4?3qkQ33<`X={>@TYi5UQ4& z^|g;LycB}O(Fhwy)yT6zik9vBH@LOr?dCYg4AwM7XOByivZkVarq<+w*cOWX^T^V) z43JS`1R1Y%d)iSec5L~nxz}zsccfTKCBE~v6?Iv$$Z~#Oj=a09_}5u2GC%e+a6i{$ ztuOfVioWkGo2sT8T3z9+q<1X#Hh)j4&ttF_hcM?1Ki;`f4O4Adxuo{xN2T))Wtv~@< zk3OJAcqjSj)a_u;g@&m#_nrR{#7$YNq8e3LN@(*n;TdgWX<=c!e%r{d_#?FnFYLe~ za|g?9n9F^B%;26uVafcrMO1<8{NapVsa-k+>VhxEzH3}BV!*b1iSsv^2Lze1z@qJI zY-+CwQvqlxHrFRvl7pDT)DE^W_IY!{i}ZyghnJvf^^ppCyBVGBDRbPnq*jlBOFk`2 zytRFKxe9q!1lcyac{$k*WRdt3y*nOFBYZ}5qny*-vsYL+n)$^>#hSG6JrW76iwSdy z0wvotMOv+~R+>`qd0mJl%zw<>9k$UaW@b}(>`z@%X;PB;Y^svtANu;FTsnEuwY>xL zyZ_Ig(~}?il3SXBy~P@ti*>wWY-+A3C1>Q9_`*SrV1Haw7C^+NvzBW{!n~0PV$5qW zC6YLOeoQ4!L%0DBHpb+yWc8R#dCfe5#A@S40unlMyk~20rLTqAfWdQ0#9sR~$U4q@&ox;Kzi3mq!>YY?h#%g)Buu6( zl-}4U?szNEq?uPEe$=>hr}kHqVfHH4zqoOBOY;Q4q#S*O+CmY%`Wkhp`nX~rN;4AZ zY?1gaH`#8y(!Ec$KLWntFl4Rm$&0P51%nIzSLO2=-E zL%`wa+@xY;i<)o%ZsX&4R?)xmI2xA;p5A^&*v_79tr0|d1IQwU`hxg;kD7t@-|eJ8NruV+}1@h=j5T z2Q6ES>5+CPIHfJ#_enEy3>hVV$|$UjHGX@Z zpc5nUJ9LTj^C4fLNg`W{=j<2gcH(^*jj|rj60AE(KjAwmL#Ql;=5T>bC7X?P9>FJS zxL97PwqTe_<1GE#j+_eR51*9?luVDkjWt&9BOM$*Yjettpq$-cfA{!_#cwn zWaYFnQG1}(Y9)pFcMtG}S+afH{u@0Dh!+PEKjQN}hKUPE7s;a9qs20aO~v-C zDtYdE!lB=})fW*9_nJn_>urRchUpP@QNu_H&x^{sKHjCoQmlT7PleI&v1iH7KEImm zO7PEf5HqSlr4o@P$R=~9rRszNcVy+TC7?eOU6^+&<5!eKzYE{K=8)>dP*WvNwxpmsRF`tmNSE|it?sN$i$&O%I3XwUH0tw zHiXZEg%^XfAg%A(f?MJO6j1U0x-O^064B4+b+l+Z4_B#b{|5_DbmlXhCv)8KQ7~I} zb}+X|W1rIRuMPx{H!QJJY27~rT?`sqZD*G_`9l16;mF&Z4t{&eWR&+%_MX6hfPG>u zAe=%}B*&pB?lf=BIOF|~4v-|WE@J^Cu^VlqnrzOugi!nOqa3cg+$&Z4w)6rBNbh%c z8rxxgh^y*>{5DLrR^0qR*r+0Gii{mE&TT7nm6vB5~iGP2Ifvv z<-bV5%8(i_`CyWu3t377jb%p;{ZYBq|RXxi8DIx7l$Z`o|wC-d8q zCf9Xg!x>&6jIhnl&0c{mZ?@ybg3!q{d1h${*l_b*D*j=$;K^;^ z1zZS=66?vc%og8E)2KI3nzYUjx58yO3e|IX=vG$bg9gbxDA&ch52u1p&`%MOReIZR zSEitvIiMf-4@D$)(z_SwR&rnC)DI=jkB3`V>=h+hVGYw>*ozuj*%XvVv5@Old89ZE z+%_lV5iaOS#&*a{%OEEuaWD(0nV-kH z-(09cQ6+4EaZ;@jp?^G(Cu@AZn${aCEBeAqW69!|t}y#hQ94eR&qd=Ywe@c>Y#29Z zHJ0Ci4%00NnLD-}3R^-=rn2yNT!xh%*_(f7)m0oL_Be8osq;h!_#N$Zkh*+e zRfA#sMJu!mwnh`_9m5Nm z)On{=kcd_Z;Wd_1QKwwDS)2%R1!V3k_w&_OZvA9PtQgkFwo$$mM0oAtSnM0ECJ%fC zH}kt#)z<2r%4Nh$T!+%=hZ$wKDoyR!Wv?>k@Ni|L4` zKCtDQR|n$UBm7CIYmnm2Rij2VqjeiqMeo^^v#m#XxO0jrF}JW<-2?3<^Ej&oIvpwP3npyhh~6nl7v`;Nfzv5{Qopk~4nr}8U3**vNb z@J5fw@t8IDkhf%J+I~CDJooHQb=#Qhf^DAn2L^OnX+fvD?|=tY5*=+(e23}+`zD@9o3gD zw@l_;PCw80W-$5?Gi6;+1jm`i0ddoT-E5t*sc^M6rSP{{yL^82;Y-e|k{8pR2EKTN zYHOw?#!dJgH-)PWRpA#lurbfP*&xFi(k5=AYB!Jt_L{<`RdEus_`L0f$-6AHj_djj6CfhPTT^fwk@0*>YJn7@b-X4-7o}1D<4`i>zI|3U8bvnk z;b1)b7YQu9@X}IR{~ODVr(rryrKQ*Xe@f4EYkVFh)A0!Cxa9;U<7!rx z9!8+WrED0*LUqoQT~q0w^Q)rQ3yxbxMnj|aK;H8uxpOAzc_ zFKK^O8KiiQKRMg%owQQU*E)BXGvzSR0Ww9F8Jg1=X?w?|Ff-e^9Cw?nhVar%?MJy| zJMX3%N?UHJgd60M&l5%!g&nD_!L-(i*RmL>6yS!Fm^I8coW4*Ue6COJ=1x`0RhI33 z=ZP5RMc;`^t>K{y^E+2aEaOZWxLqst(0-9$#N#uUZMrN+LbhC-CaX6|^|;@0C`Geg zK?|Or9u)s!DS{=14K6cJhP{>7$z3&runXp7OxIiy)Ev@ia;O78o*tN2r zx6grxFh3QAXCSfJll(1fcAWKNkgTaD?wo!xM}eo2WXknCpfvS_t2NoK2>J7CVAh86 zBE!nkm+YS-n1cS+p9cM^L4LI+*Jq-talF5Qi&iBpI$Rr(j}B5g{4G1(ZciqUO%ieV zJxeupjus=fa;~dot7@R*O{o%JlX15R?)pccd6I0Pu=FseP_UOkcq87Qnbd%GSm>4&=5j;O#=KG5;_J9b@_KL;E z3LT%OW)_n}(fg$@>f~AvCWMCI0?ERi5XX$DwuJ-NzPE|YLT~IMlBOaOk4xkW_FG&8 zxln4fF$lE){o%_PlpOC)ESx8kY-BU6{sqyY~35 zNM_DtcsqU6ojOEk>%sMABRO+*Js=7C&wX1n057LeviaI+k<}4N5pzM|0=E=ih3*>U z^Km56tN;~Z(ZPJSfM+EuF$Atoj`DQsU-%s7z^csk3*jrHQQ;$^KfL8M00wYLXstkx z)PZ~O5@@OaG({4BO-J2XwMqtcD9)^9) zA#|M7Pa@EPl{dIJG2meiS!A2++1Vm9u&`Zl?U<^<=i!p}dB6M)KdkUM%F-&1c)6`L zMUjc@79~yuX_T$xOB#5hzFI5J1aB!OWPXt?_IjRTE%+T2-i}mNiLZvSZ{%{G$aBi= zlBh)FXbZl-S9+-%RhBC^88#2c4YI-|y}>6pfrzI>;D8L<=pO1>_o&`9xWOr`E!*eG zf^=M$4N-#GC6s%OJg8T$&$4Sn?C_KY;G$NMxJx?Vy;f%|I#B4teQVQ z7^)i5eHQ?ARyL0%4 z4rs1H%^QhvFC_LZtfA29&evo$E6#TUAL;l?!n;8TGNk`5OqoC_$}+dLe~?Fke%b%Y z*wT>v6FFChiVdpD*_dB^3Cg2YzJ-B4VxMdb03>+=+cLCv>kpMVcV`5}=i^wMlh zoVNcZW@b7W*V1u+?AmE%;OvPDHNn|9?w)hw^sbmmfW&KbW(0W4xO@Te2TX+Wf52 zeHL1{P&l^Vw16|s{{4x3RDbMH8YBSQerGl(7E)<@d_dJlWQmF?u*_jHcm;p`JJ=YO zUWA*t0yTFsGZO|s|uy3zpH}6|0?Pe_)#kw-jPWTAfBTi zqeEDn;!#aU{ko{u4VQ&N`W+5JeZ;eg_xZ_ddQ#2 z8z;HIb!Q^tv?d^IX--+hFZ-{Ru&Bi}@1$$NcEc9eGAFJBhZP!S)A_}MLw0zLZps6c z(*4XJmMqc1?Q|V1n9yV!mv`VOS~%7m&iMCaXqF0&mY)|KKT~#ALP))WVisA)k0~mn767LRE0e|;tR_A{)rc{FT;H_zSptuwC%jzcQcz%S zUdR`|VTbyllS>2AH94K;?~<|a<1H%An~^+6bpu9>{�=dkKj!GW|J+KiyDJ8MHc^=MdoQyMr|SE$3YFsVN;%6RZePFVmxt^wYgcC z^&8%=b4O-pQmAOK2kRXyX0ytl2#fv{GVg8-+bsV<`VoeWBxMbF3;t#Q+WVjA`!|k$ zZ$hmG+@x$XiUPn3DH~XJu-sY_VP^;vAna>KK0+@+fI}9q0+;?lUr5I|>7SWSlb%;D90- z4inyaE+MAEZ`SsmdO+y>MkK+|9o^452P(TdI8uI|O0`t?!OAh5Hdng70ux2YpDp3@|g);=(O1Hwkn7#reLf zc!D@;*HV`|4ST#*=efa^tLOmxC;9|K3hn*)-@Teq-JMcaow^7+Ht!n0(_a?>==kwV zL8okdeSq(Tj_(=net0@qBtJO8jW=9SSMY6JYVjksa?r4NrR>Bbd!*nn5z7s*uI=0; z&Y_7|5BrVVYCY%p_pCaLA*SW~)n!<{*GSUjVGz9ar$YOv(_ap2x<54r)AX<%R-O0= zo01~@Vx!JIcLTAg5Jmlix|{sR%TS6|tpcq&0A=#7t2Pno{l%=eJn2cKZd?m5q zjE=Qnkd=i~N@8F4^y1@`+E3RLg=j_~g$nOeQIUIA1#E@i-`kz%0&OE9h~#Bsai{8s z?sLyIZQ5c++ib>=HO1hsi-wHE%r$ z3O#0tx=@^wtUt$%u3*^#ard(=;^o62`Yr1gF3t%^IL=-a$@~&FA8I@n?d?Ddzf&I9y z-=0!O(=PThTdo0JD0_c3CkLvGp6<#Pz00+3Mp*QafA(gI=fuz(aMAr*r}*LPavKh- zQSsj|5c05QYhHa!;PBg_R%u};iNUkxpjg#vQ(u&R1x%$rPVISo+-z&mWF(j4ar^WH zoq(Ma1Hn>tBTpOX6A4gh$9;C0=H-MmlFWMKJ%q3uFH^g8hEAnLw>LBl*sGR`JWT5D z_kTxX(V<_>SbAN0yD!{e&u?3M#n(A64}L$B!or_jaDdnribmWSwvX?BC= zpC;N6!!&1Utp{#UG11v^hfN7RddL(K;i85k%Sib#l^O^4F%2Kr%6KKQ+2AtqWUOi{ zq1I~RD~^?c#Q2W=XZJBG#zkk>*CVBRw9m&t!bK%cBNKq|?6w|hx!rKR{DK*jr7;TA zym?KbyZ22_*r3bQXCUlfYjhFp26Z)Hs@>AZmk5idqgdiG>eAuj+%U%io>q^Fauv0p ziJvMlCW|aij(t5)OUF0=>hSn~D)Zk&ykxe@K&@R-tZm!51oTA+6|F+=(A!M*de3*a zQ+FQ{^axH&UIb<+I9&D7e>SpLjft&Jd5+Z(7cl{qq}FQu=viY4Zug z2osrR0fh-0y+2S*e;OjxfvKvp*ipFbt&~RO9EQoZvq_3J!8-vZVS%!|%) zC;LhF$=foN2WWD3DM-{7VQSBfxw#6DCkiAB* zLbFrwW!DshK+b?Rr(~J{R+yih+4~h=c{Jc z*nK&MB-WQ!zc!8jx+FBhBy%2onwMJk-||S}to!lXl@E^_`D2}r$9wAX|5tY`6;R^i z%sr!ePfeh9RvzAHdA8-}!H_@~YT@4C+|?woFd#x>PYeKIBpq)o$b-pI2`|TX?j1c? z_UZ9z*EwO$rV$+sE8}NgJLYVkNMf@rckiq#MV;ZW*DBHD_eS$^{L({R^3aXAcrion zlf9lXRgFYvEYNN88;?M~ISmfSwtGL%dGkbrb*ni4Z5=lgpB{b`Y!y3kIAb)giCOA3 z8ko!6zWy8|iB0q4AdgHnJ28pk#yWiWr^CVm1B2D*_vQ#F0QBK0Tl!Z=AU%ugDTr6s z2$iC~Cg6e?I9;9{+cwbn8PaB4hPFCr?as8L4X`t%9!ER2w@cyS5pu6lx2kFaNy^Sj zJ}-8kvB3=thQNyVUIg<FDUU7-;Yjm`8MEsAJPd@xXd$8A#F}`QBPu%&IomU_`C$I3k$fEr@QBH~P zzJ)dC%=GUD71L}G=(H8MCRBd@PzF2iZMC!aK6}h-;h8p~=n?1mn%2*fKr+GcCnzER z(#ouZ#rpQ6s@g9tqG=out&hW1G40RAZfZ(7c7qxQaN~vG)GPH1Qi^JT4pF&<4Oq>I z<2dQs06DsiV@bJdL@%?~yK*NJW5CC*6uwaC?t7{4Shjc z=H3D3O}-w9f4plpy+DA?yXWnGZMec4-DgDn~{#iAQL% za@bQ*c#z<`r<|So%Tmj|N9uHs36zeBBa*K;i)=hmWfXU35r*U?-V};cQmhE)dZ9Z_ zlnSc;dLHpL|0>)CFodnZXeB^1$l`!S}6jtQT@Cd?`ZU@58(A{|U zn=h+>lq_0)OX*J#r+cv6d3gLD^iEqSu~RnP1Zp31;Hy5Q_s8ZcsM5*`@mle#>Jq*Z zSJs|1)^A@jqCXhSZ2wunYjAUairJ-T*nsSBn8gi!Py=ei8Qh+qopTisMf)Y#jN*5= zuAgv8*Ei(}-TZ#y2H0nIW0X7#h%_2&=GgC9P+!;*Yqp>5)isv$Pk}i4+ZE+QA#}z! z{^8=*LGwrW{2B#N|)*xj}s_)u;9rqKwm0pIqK zM|inPRS;;tyLHkIGTHmZ;+En!4#9Bje+O7FJM@Wafu{%{U$gzZ?EbRnNpDNC4Pwp( zZz$sM4!05REHOAX_9xLdyk;{@`>htj%f6fFpDB9?>eilX)9#gY8xGr76ptb~s`XfY zktO-On@#&0;|kKq6DX~`|iVHmxxFv8qL5O{Ovly>*$FZIN-6s+@uQRm~6qWhI2mzD8LG zeGXS~29Nqf@}v#ZZykb`bLG^T9%#3N>}QAn!bF z6qT4moaU?qyq#g|VGOBP|5l}cvob*Rt34|3Os*tK`$lLZ1$@2+_%+f$Z#?oWxU@0e z%o-<7!gS}Q@b9+{*(;J$jSao@UhjnR+^ECYot{b2?^MqSwVS*WJX1E^uLB(C>T|G` zb34joX6_X$-}`QUn}*SC&GadAANgZkujX*@B=&zSVHcf&S2lDGc&=YjP=2fDkML~m z{^7*_Rg>0k(M1dxZyqGUu||*W|&Fc1s$bq?L!6Mcz8f z(ITH=p;g!0F2GzQ_h?!3HaloEbknNzOu5TLnQeWWc^#p4Q_- zV>v^4Q58?8aj6qGCq(&dt4HIT#8JK>jU&+Y2_#t2p()ruC;2Z5f0s5hknaN5Z(3(L zJ89B;nR#b~BeYM11{Pr+#_x7{T4CpJz7#gwq6NwmzIMKmUapu|Gb+NPn?`x-gsh7y zZfUpbiO-f{+?~89MQW}7NGV(acR78liN${WB*f^*^KLn)fqgohlG>u^FeFMksr~!L z4J;GO=E_P&F0x7=+-{LIb<%&uma_OZ75CxcB2A?4%;%q1K15BWd|#h`+}*0vJZziJzVQfekWVZQG6 z{fLy-aXo}X`dU>?x(DER!I1Tlo2_SQKMna@J;E!&CrdqlrQr27d{;C}KHH4RCTcH< zF8eO~CF45Zq=Oo1Xl`TC?aKzBW!DXIj)nGBi_QMhqwAWNCeNfZIILI#<%nOyRS!mpKomtn z9Uk(_arzzf6i=LbS@~+SHU_EQm!?R@v zv%aaAd!JzkYIvrxOjD7fl4lzqWiBpC9OLMzppXeZ;F70A^8YohdF`aAfx91n4NOt^ zzg6~=LhJHnjMnu)lRAB|jfU9Gt6WGS+rN^#Ki0J+P{KY@<yp9D?TR*-CKVB4waEB1efkBMsy+DwqAUB5R>;GpFiaA~iH!!LUAjA*h__~H4+ ziZN~DUWV6bJB6tyCqBmCQdmr>JqHWl6Z?Cnh{V%+K6!vsX9l{%^8jC79_A2`ORsEKO^r8);!?YkO7KtsEYYgo2L^XOAklrQI8H3cu z27tcA2HcJ5?iL{1Dscvywg2JivMx|rYc0+pJKN>a>k8*2Q?t+dG9CO;W>f9{-liWnnd?+n9nu`1L+Vf@PNs*9!nu`HMf z^BffEpvi8C=s!cOPb#Zsyk>&R4?)?^VM3F zhqwLEBjM^~W^?w*ZyqB;NrQXtrYEVXCxH@6q4FD@vEd$ctyJtcn^{Z;Y1(lTsFhxT zEfO|{EPB)2r$lW7XOc$KjsPc|-jgo<4j|IeFCFP6e||gXv*!TCZ)qgdBJU3A>F$mx zmTrvPejz>EqIxp8$ghWj;nNT+X#|k}E38LbS!L%ABZtukCL>45Zj}?>sYyU%r0B8W=m`mQm#zlngzFzEMwaqJ?H73O?1&nf zkKSnPB7iW2D1G3sa{7Z}rCE$k!4!feP(NJ;priyhN{f;1_(I&b3(>YX>AeSp_<*xw zaf5e);K3!kyn-6E;Xo{gcxc)`|79+sUW+h^{mKlVm8K*Hd67xB$7|=T!djYBHU5>q z5nt@_QK`esV-hdW+BGy>6`>YDkTjSlWP}`(I%&sjUq>1zkB)ds+|m!-UQwc=UVH)*5+kaoij%+D$A^EzSBqsgoe^aVs1K)#szi^0)u z&_nK`8Rr|mMn}&3-d`1Ztmc1~_Eb19*A(G(g<(Bw=Zg8H05vXYQ zFYZGNW>6djJ`qUaiq(P;OC?)N~wj@Qe z?^#NdtW()SW6Arb5~IQ-%gD}P?6S>hqX=1s>}6=oSf&idGG@M`H#N-nexK|6=libj zI{(e}oHOT~=XdVs{{8Ozxu54u38ZNmSU5f{nt}pZ_o-}y%}iv#*%`7x*SGec;A5g| zj;)_s{D}@#&QX!N6<;4+0E$DV)LpJ+sa*P5?Q`UMnV-w6y&w9%zWtQC(T3YrBl)Jx zbs2W)v?S7H&q0Jdgec}^5qcvbZP$nwrSwVa>!9M0`08uGTzr>_7wMhk$AmO}ZQ&Dd zbL1qQjeZb$&Hd(++SIa)j)s~vxG6m36Z|aeC;X(V7;4z)c_vfO64)o?sQ{p;2Ziql zSwQ@ZMSCW&gu_iO*UeW~8aW*;;7PG9F{~e@n?DCwV=sr&Gtv;_lMa-2HjfPF7r~= z;GOB}wZPoBoj}#P_IuU@vE%A&QcwDAhJ*NQiBT@}dkoZC|B4pTG*W=ehgFV8^e3tM z$w2Y7<~ec*TwtDGC2>JgHH`$jEQ!}$7UK07LZ~&<#Oww)cKb3Uqr#T4Cm&-CXrc^x zU^&)@%=hz#foqjCE}xzK_8H+xrg^Z8ybQMR17xwJD zQ+So`qE0MBlp$a0w4i7`4L}h1sJ^Ir%U^Q$yM~G=#iu$c5zVE-N_&Y(!GFtcoHO;n zqHT;tfSB%FPa@<=Y{z+E#oo=c#TSSfsqfv(@3qG7z}-ilCy@`d0A+rMi`2I>d0?)> zg)QVqDHXSj{&b2?q^=Y-XGVkF)@ zA1Rt`zZ1=%%0JI~Km)$Fc6DdT6Ci6QsT?no(V?`@&TdXWx;yMuakn-X+94*7SN@+F z%o%PSF9NypUC?#AHi2z`zdoSx1XhyUD9zg$xJ;-DFd<`-lJ(c^JcvT&Qs`NPCymA zc<+$WgMM;uYKbBygdx5_T^rceCh!7zFRy6JBY(%qrQ&hFci{r z1S<8J`_8ZX0<1KguS7nVgaWGo_C^IuE$Fz%fGY|I)-v#V<6X~_x+QjLUuw(t`KPoO zGZhKcuA&NLcfOmAAI$enI}Wh;?$t6>8@NU2HM-C0QK9Uk>-Z%Xg>bud?FjJnl& zBx;JTA6LxpK8a&WRI4Tk0iT+2)I9K1{r6`&fZ~y@9J7J=Tsb2yCtIZ15vX&E)3lbt zS+=@!jthA+Cm^*Dmw~*c61xkrmV{%(h*GGg{0^{-*@Ezc>OU(9ZXbPkzvglOqXX@! zdaKv}Q|5B`O{!=2@Kx862fRKGPk^NY)v!J>YNhzQ66H~E?1F6pleI4x`#Ez*3je7;q_dUR>bFVyLdv8|r!Nw3_NxW1`I+i}W(Gvqy^~vB z_$a=hPv>4Igi$ zt~yWbl5!QIY{oRli3SWZwg4r#gRv#*UI;oB9^x=`PS-nql}(fM4<31Upz`%Y6MIl= z#Pu?#N*BAq9l)ZB(;0M+_{n1r($mxS?-=h@cT{X~{n1g$V=G-rb2XoA_Qgyg0P=L= zvOQt@;r!vDnV1xctmW)DrA*&WCtG^je`-wW9J;Jx)ihKg#`pD;ogyNeWO3=?cd5NXxe@^v$~}Vd^`ELQKvI!CFleKd{_JcBk918xf-2KxvT_ zs+U3tUA1$#{}D&q7jL*1J4*TPRB1uxrnbRramUK&p!(buO56> zDZ$Rc$+ck*pkCQIWMmQoaLqrCA7^UXcQB>$NQ2{zHVM4N6A2vS0iC7*MQic5N6f;B zZz?5h*PD(Y8jseKJK$j~3X|#}lfD3J6$}I5B*GW7urZ-a6hEK1&m; zyM(fv*i-m#WSSG6KU{Q%dd%_D#tJpq*5^SCU}4|9sg2@YQ~r6elft(PPfd=&BXbTQ zx6g)HfB*PEa=h>Y`>^2dbt<$m1Hr@9lq}aCU9^mD>^P=6<-PTWH@Vo@^zM7G1ohi$ z1C3dMeD9zaVSTbf9oEwJB?cJtLx+dNwR5nAH@}tV(X2^6S0Ud0 zqk;&l#+<%NdX2O!c6FvuHKS+i{JzlFD>G2C;KVy>Sc2u z3Nmtg&8|b=$d&UL0f>jkv7j6h94QKb8)}pj@j%uVr)iCFit45PI6OCPr)krcUVCRU zC8_PwEvt?nRd%Am9r(!2`qzeNJx}Xs{ISMXwWC!^VOJ-RV|Ttk7@wF!OLqB>e;Mj? z=IFir4O)>XT{cp27$2z_O814p@qI;}>fTci8xaKTk07Nnp^mi8#sdyT946Tckfw_K zp=L^LcT1R@OG|1PZz0kY*H<&F?55peB*0xmI;LM5iu*yHQQrJR-l=hBl7Kg^%Ix#4 zr8SV6lTE{PL<$s#arZ1ShHaOoN@ugFWfHcd?+y*fk+dJnmeJs~era(B_iL2qXd)fA z*m)^W3|QAB1QZF@jLDhoa_=8&teJh9&SBDbv)%rU#Y7%ur+t}Feaije*SJm;<}*23 zhW{lEUPmXy^(y4|!DFzDqyxRLwg?ZL;8-qJLL zxv~DWBZyU9MV_z>x%H;V54JVB!aJJsMrIOE9H@LDoh{eXHc&j{>xD4(|4cgplSBHF zZbCk+M@+&x$ThRPr%?^q#J-xdK7@_BepsTpsLwHHNq(XEu*Vn}7JYIcY-ep@65l8_ z4|7r&Hrk;s`98Fm%>Z$fB%f1%;)e&$=5w(3b_{7`o8{Qcv{Qxx=rU9E=*fvgGt*C? z)>hXr^k=E$$*Ud`SQmzee+%K!z$>DrQ1dh%pVfEAxP=^gjoediXWv0+p& zIM3_gX=yb-vaN1hPsu6K&-G}R8`TciabwEAy{neCu0dQ#TW}QPYlbw^h^{YT*yE*- zTfx!0+q8qn2OiYAh}RtJCR_jp9L7$GhCw4F))6LQGyQO5bI*7APp$7T4vuBWbty9L zdPPOo>{c2{)SY*`Y3C93wg~w$Z^F5&iQJ0Fd6_-au^puyoo!|vC*sak@_}*e3Cu5UET;non~Xdo-#wo4$FTXW#p7Z6`RZ7qcm5$4JQuD3zvFUAsgp#h(mM~ z{1~iHr-ZI;K9A8o3cJ`BB!m+y;h+1_K8qQl+QBZsh5W6t@JTO%9*;J^EU;nV=-3!} zP_B&poix3s{K)j}t+{;jUj=JhNf+YkUHP&7agcVmoiR#~&v2amTZpUVH4$*W&zdx;B@ZooDy*Z~Dj2 zE*RoL2hJ_I`*m8kiv4uGKb!nGCWSMn7(peG+i_w8id)^IrsfGzQzr_v<{lAKO48B_ zjS+Gq9hia%=Uxk+HWiz)b{FX`awRqkO@CQJNKvUKb5*((R$X6b=DVAmr9k(=KUynq zJ#QZq}7Fy;4eHLpp{RmHKxk=Vl*-vhYS9~X}lq7 z%E}q?+nA)vT3%AzDtG;JM3_Wq-DInO)o3=O-lfN+EdF+xbLntzKC!r5tKAM|U|w+} zx&!Lt5lw%Hh;%5b8&65GJ3nX;CzAG~AYIbCwPe;Hq|&lPLDslrR8z$v0!fljDSfx@ z!pSS%84Q>%TKS^VM8a7S)Q^+Nv-3@sky%>CkGhI(8WR0{tcOJxJcR>anMNTVYYqezXrqg4R(`KnQjFR_l{8$H|d!62U#v(3j9n3U-4!IHBpjd6I8&*f-_7y)#ewcf~M%wvOM0)_~Tw=|Q3TcB0xMTyR**i+FP{@sxaflsJh%OFTMPcH@Oc1-2}-R0_9BBU91B-fWtURBZ?b4x7dQf6(7c@Lzkj)$ z7B!on0&J=K#~BXks2ag#ZPqJEUjOMhSdheyxHQ}IR+Ue6?2^l1Z>N@y;)ohfZ$ek)6(q>-? zsld`t`8BT&Qf}PL)R$)!z@?rl_{MBz>WpnSFs`aY+jcHCHgic=67i4*3Ft0&q`mS4 z0)jUMK&ITI{8gH^+cc{CMn|}{0rGFBVJxFDJbw5*a}O>8J@^n^p1t_63&#%TEcBpu zxPGxwf-{v-dl@n_+Rl&B)`gl=qb+O8oUn(d-GaYAYAEP4*lIHqXwccU1~!#bG+g(l zhSreKNa0-MBjCmEFA3mi8))d8V!HQ+ZGynfZ(g2E{nZ%g&Jo;4ojeTrS|KuutGuOS z?%j|AAv~-Jo}dXTI{=)UKj4OlFt4d3{ms9Ada_eW*(QE22Fg4AaxD{Td-T?c+s-I6 zK^DLkct}vMYKNNv^xQ9VJSTAwP#Se=HZudco?S)XO7mx?d~5H;KxIzuzMVyM>QYp! z9Z|p*fAno6LcR_AWzVACf3dG5`M&AR?y3vYj5pEpSR<>z)J3i%oAs(3Q}KtG+cs=_ z40Qbd=ZgEk==q?;>a8~OubREvBt$zaOHkz#t{o1H`p{c>u^*}qP^q;&w=|+*ubuXz0bK$z5$^diCjtLbN{pFJi%c|~%G)SydzU`T@&RoAFr^X~Q(%uRv$+HnU z+PsVD{cPeEw-w`Qkz{_n>jJ>jnVf%pa}k#*oj@SSsO#6YHv2|zY6`IfbCrcp6>%k5#Qp=xXal|XpmfMq>;5C!3rDWPaMzu+-@sk^#yE7J*|6{IPlHxUHZ0_ZNLo zMcbAVva}@`gC@G2TD0>$stLLYb{}3hdw=@?X?TE^YY9_KF4T$Xr0P-NIP)AIuMz1U z6jEjF};xQKl~KNdXM5)=Wl&sYk!N#_~h;FW~II z^0za;tR;hd$v={}=v8TLN2M%z(to|r{SA6m5A}`({Xurg#THHBpNj=X0Dwr?6>a%1 z&S5&V5jcBe?X{)XU^>2}Kj8)d*FmzPnE3TyA9|1Kp3}hDr#pE6?aeIxs{vp@DUWal zOK$kbz?PoOb%smaRzo~SZCUew-VIePV9-S5Sv*`BfLy@YToCz{y_<6q2?3FZO|+LV z`oG?1gGfSvzzgR!{|4~V{z?GS#h}_zVr2mC1xEMYi28pwI%aS{<7TlO(72acA21L> z<7OF6pyy_GBR>Zb=($;_0`%O=X&jU#ESwL@5*D2V$`VkPupsciEK7Jo^70q=0$A?V zn8!4zzgcJy3@(=&OduFsE{|qa!ORJ>8(A1cVCIB{1i;J*3k`y4L6+zoObfC^=b$VB zWeE!cpe$LAz;X%>0A&elbbcC~&{<|DpezAp2@3+CEMY+alqD<(u#hsCEm=;=V76o# z-Kc`Hge5ZoW=mKJ2$Ur(n1I<57E%VYB`l;2W=lX>!h!%OOO_)5$`Td?z-$Q%0xVJu zlqH}nVL!h!%OOIQ&2pU9H$jM2_R>)F`Y zULR!S+j7f5)I#Fv1`SmPD$7Oi+y{dncrU^EE8MH%2>{*)^T?HLgYiY= zOTeUF)C#w%FsNdeI)Pf@E*PgccjfM`J^bHFu%7}1H0q@j6rfQrRUDvEFC|;hQ!nwZ zfuN^e!aJ& + Getting started + + Fallback content + Render prop + + Fallback component + + + + ErrorBoundary + + useErrorBoundary + + + withErrorBoundary + + + Support + + } + packageDescription="runtime error handling" + packageName="react-error-boundary" + routes={routes} + /> + ); +} diff --git a/src/assertErrorBoundaryContext.ts b/src/assertErrorBoundaryContext.ts deleted file mode 100644 index d855efe2..00000000 --- a/src/assertErrorBoundaryContext.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ErrorBoundaryContextType } from "./ErrorBoundaryContext"; - -export function assertErrorBoundaryContext( - value: any -): asserts value is ErrorBoundaryContextType { - if ( - value == null || - typeof value.didCatch !== "boolean" || - typeof value.resetErrorBoundary !== "function" - ) { - throw new Error("ErrorBoundaryContext not found"); - } -} diff --git a/src/components/ContinueLink.tsx b/src/components/ContinueLink.tsx new file mode 100644 index 00000000..cc167c56 --- /dev/null +++ b/src/components/ContinueLink.tsx @@ -0,0 +1,10 @@ +import type { Path } from "../routes"; +import { Link } from "./Link"; + +export function ContinueLink({ title, to }: { title: string; to: Path }) { + return ( +

+ ); +} diff --git a/src/components/Divider.tsx b/src/components/Divider.tsx new file mode 100644 index 00000000..c0aae74d --- /dev/null +++ b/src/components/Divider.tsx @@ -0,0 +1,3 @@ +export function Divider() { + return
; +} diff --git a/src/components/Link.tsx b/src/components/Link.tsx new file mode 100644 index 00000000..855ab655 --- /dev/null +++ b/src/components/Link.tsx @@ -0,0 +1,12 @@ +import type { HTMLAttributes } from "react"; +import { Link as ExternalLink } from "react-lib-tools"; +import type { Path } from "../routes"; + +export function Link({ + to, + ...rest +}: HTMLAttributes & { + to: Path; +}) { + return ; +} diff --git a/src/env-conditions/development.ts b/src/env-conditions/development.ts deleted file mode 100644 index c063c3ad..00000000 --- a/src/env-conditions/development.ts +++ /dev/null @@ -1 +0,0 @@ -export const isDevelopment = true; diff --git a/src/env-conditions/production.ts b/src/env-conditions/production.ts deleted file mode 100644 index 06dd9e3d..00000000 --- a/src/env-conditions/production.ts +++ /dev/null @@ -1 +0,0 @@ -export const isDevelopment = false; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index b03c6185..00000000 --- a/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -"use client"; -export * from "./ErrorBoundary"; -export * from "./ErrorBoundaryContext"; -export * from "./useErrorBoundary"; -export * from "./withErrorBoundary"; - -// TypeScript types -export * from "./types"; diff --git a/src/routes.ts b/src/routes.ts new file mode 100644 index 00000000..dca91448 --- /dev/null +++ b/src/routes.ts @@ -0,0 +1,20 @@ +import { lazy, type ComponentType, type LazyExoticComponent } from "react"; + +export type Route = LazyExoticComponent>; + +export const routes = { + "*": lazy(() => import("./routes/PageNotFound")), + "/": lazy(() => import("./routes/GettingStartedRoute")), + "/examples/fallback": lazy(() => import("./routes/FallbackContentRoute")), + "/examples/render-prop": lazy(() => import("./routes/RenderPropRoute")), + "/examples/fallback-component": lazy( + () => import("./routes/FallbackComponentRoute") + ), + "/api/error-boundary-props": lazy( + () => import("./routes/ErrorBoundaryPropsRoute") + ), + "/support": lazy(() => import("./routes/SupportRoute")), +} satisfies Record; + +export type Routes = Record; +export type Path = keyof Routes; diff --git a/src/routes/ErrorBoundaryPropsRoute.tsx b/src/routes/ErrorBoundaryPropsRoute.tsx new file mode 100644 index 00000000..ae1b6286 --- /dev/null +++ b/src/routes/ErrorBoundaryPropsRoute.tsx @@ -0,0 +1,10 @@ +import { Box, ComponentProps, type ComponentMetadata } from "react-lib-tools"; +import json from "../../public/generated/docs/ErrorBoundary.json"; + +export default function ErrorBoundaryPropsRoute() { + return ( + + + + ); +} diff --git a/src/routes/FallbackComponentRoute.tsx b/src/routes/FallbackComponentRoute.tsx new file mode 100644 index 00000000..71947701 --- /dev/null +++ b/src/routes/FallbackComponentRoute.tsx @@ -0,0 +1,15 @@ +import { Box, Code, Header } from "react-lib-tools"; +import { html } from "../../public/generated/examples/FallbackComponent.json"; + +export default function FallbackComponentRoute() { + return ( + +
+
+ React component responsible for returning a fallback UI based on a + thrown value. +
+ + + ); +} diff --git a/src/routes/FallbackContentRoute.tsx b/src/routes/FallbackContentRoute.tsx new file mode 100644 index 00000000..83e9acc3 --- /dev/null +++ b/src/routes/FallbackContentRoute.tsx @@ -0,0 +1,12 @@ +import { Box, Code, Header } from "react-lib-tools"; +import { html } from "../../public/generated/examples/FallbackContent.json"; + +export default function RenderPropRoute() { + return ( + +
+
The simplest way to render a default error message.
+ + + ); +} diff --git a/src/routes/GettingStartedRoute.tsx b/src/routes/GettingStartedRoute.tsx new file mode 100644 index 00000000..8a5e9753 --- /dev/null +++ b/src/routes/GettingStartedRoute.tsx @@ -0,0 +1,43 @@ +import { Box, Callout, ExternalLink, Header } from "react-lib-tools"; + +export default function GettingStartedRoute() { + return ( + +
+
+ React components and utils for managing runtime errors. Supports all + React renderers (including React DOM and React Native). +
+ + This package is built on top of React{" "} + + error boundaries + {" "} + , so it has all of the advantages and limitations of that API. + +
Installation
+
Begin by installing the library from NPM:
+ + npm install react-error-boundary + + + TypeScript definitions are included within the published{" "} + dist folder. + +
Support
+
Here are some ways to support this project:
+
    +
  • + + Become a GitHub sponsor + +
  • +
  • + + Buy me a coffee + +
  • +
+ + ); +} diff --git a/src/routes/PageNotFound.tsx b/src/routes/PageNotFound.tsx new file mode 100644 index 00000000..fcf4e04f --- /dev/null +++ b/src/routes/PageNotFound.tsx @@ -0,0 +1,16 @@ +import { Box, Callout, ExternalLink, Header } from "react-lib-tools"; + +export default function PageNotFound() { + return ( + +
+ + The URL you requested can't be found. If you think this is an error,{" "} + + please file a GitHub issue + + . + + + ); +} diff --git a/src/routes/RenderPropRoute.tsx b/src/routes/RenderPropRoute.tsx new file mode 100644 index 00000000..5ee55da4 --- /dev/null +++ b/src/routes/RenderPropRoute.tsx @@ -0,0 +1,18 @@ +import { Box, Code, ExternalLink, Header } from "react-lib-tools"; +import { html } from "../../public/generated/examples/RenderProp.json"; + +export default function RenderPropRoute() { + return ( + +
+
+ + Render prop + {" "} + function responsible for returning a fallback UI based on a thrown + value. +
+ + + ); +} diff --git a/src/routes/SupportRoute.tsx b/src/routes/SupportRoute.tsx new file mode 100644 index 00000000..9f727dce --- /dev/null +++ b/src/routes/SupportRoute.tsx @@ -0,0 +1,32 @@ +import { Box, ExternalLink, Header } from "react-lib-tools"; + +export default function SupportRoute() { + return ( + +
+
+ + GitHub + {" "} + is the easiest place to look for help, but it's probably not the + fastest. This project is maintained by a single developer so there is + limited bandwidth for answering questions. +
+
+ I recommend asking questions on{" "} + + Stack Overflow + {" "} + or{" "} + Reddit{" "} + to start with. Both sites have active communities who often respond + quickly. If you don't find an answer there you can try opening a GitHub + issue- but please take a moment first to see if your question has{" "} + + has already been answered + {" "} + before opening a new one. +
+ + ); +} diff --git a/src/routes/examples/FallbackComponent.example.tsx b/src/routes/examples/FallbackComponent.example.tsx new file mode 100644 index 00000000..57241e55 --- /dev/null +++ b/src/routes/examples/FallbackComponent.example.tsx @@ -0,0 +1,29 @@ +"use client"; + +import { ErrorBoundary, type FallbackProps } from "react-error-boundary"; + +function Fallback({ error, resetErrorBoundary }: FallbackProps) { + return ( +
+

Something went wrong:

+
{error.message}
+ +
+ ); +} + + { + // Reset the state of your app so the error doesn't happen again + details; // hidden + }} +> + +; + +// + +function YourApplication() { + return null; +} diff --git a/src/routes/examples/FallbackContent.example.tsx b/src/routes/examples/FallbackContent.example.tsx new file mode 100644 index 00000000..08fcf2c3 --- /dev/null +++ b/src/routes/examples/FallbackContent.example.tsx @@ -0,0 +1,13 @@ +"use client"; + +import { ErrorBoundary } from "react-error-boundary"; + +Something went wrong}> + +; + +// + +function YourApplication() { + return null; +} diff --git a/src/routes/examples/RenderProp.example.tsx b/src/routes/examples/RenderProp.example.tsx new file mode 100644 index 00000000..65361067 --- /dev/null +++ b/src/routes/examples/RenderProp.example.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { ErrorBoundary } from "react-error-boundary"; + + ( +
+

Something went wrong:

+
{error.message}
+ +
+ )} + onReset={(details) => { + // Reset the state of your app so the error doesn't happen again + details; // hidden + }} +> + +
; + +// + +function YourApplication() { + return null; +} diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index 550ad136..00000000 --- a/src/types.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ComponentType, ErrorInfo, PropsWithChildren, ReactNode } from "react"; - -export type FallbackProps = { - error: any; - resetErrorBoundary: (...args: any[]) => void; -}; - -type ErrorBoundarySharedProps = PropsWithChildren<{ - onError?: (error: Error, info: ErrorInfo) => void; - onReset?: ( - details: - | { reason: "imperative-api"; args: any[] } - | { reason: "keys"; prev: any[] | undefined; next: any[] | undefined } - ) => void; - resetKeys?: any[]; -}>; - -export type ErrorBoundaryPropsWithComponent = ErrorBoundarySharedProps & { - fallback?: never; - FallbackComponent: ComponentType; - fallbackRender?: never; -}; - -export type ErrorBoundaryPropsWithRender = ErrorBoundarySharedProps & { - fallback?: never; - FallbackComponent?: never; - fallbackRender: (props: FallbackProps) => ReactNode; -}; - -export type ErrorBoundaryPropsWithFallback = ErrorBoundarySharedProps & { - fallback: ReactNode; - FallbackComponent?: never; - fallbackRender?: never; -}; - -export type ErrorBoundaryProps = - | ErrorBoundaryPropsWithFallback - | ErrorBoundaryPropsWithComponent - | ErrorBoundaryPropsWithRender; diff --git a/src/useErrorBoundary.test.tsx b/src/useErrorBoundary.test.tsx deleted file mode 100644 index bd7311df..00000000 --- a/src/useErrorBoundary.test.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { describe, beforeEach, vi, it, expect } from "vitest"; -import assert from "assert"; -import { createRoot } from "react-dom/client"; -import { act } from "react-dom/test-utils"; -import { ErrorBoundary } from "./ErrorBoundary"; -import { UseErrorBoundaryApi, useErrorBoundary } from "./useErrorBoundary"; - -describe("useErrorBoundary", () => { - let container: HTMLDivElement; - let lastRenderedUseErrorBoundaryApi: UseErrorBoundaryApi | null = null; - - beforeEach(() => { - // @ts-expect-error This is a React internal - global.IS_REACT_ACT_ENVIRONMENT = true; - - // Don't clutter the console with expected error text - vi.spyOn(console, "error").mockImplementation(() => { - // No-op - }); - - container = document.createElement("div"); - lastRenderedUseErrorBoundaryApi = null; - }); - - function render() { - function Child() { - lastRenderedUseErrorBoundaryApi = useErrorBoundary(); - - return
Child
; - } - - const root = createRoot(container); - act(() => { - root.render( - Error}> - - - ); - }); - } - - it("should activate an error boundary", () => { - render(); - expect(container.textContent).toBe("Child"); - - act(() => { - lastRenderedUseErrorBoundaryApi?.showBoundary(new Error("Example")); - }); - expect(container.textContent).toBe("Error"); - }); - - it("should reset an active error boundary", () => { - render(); - - act(() => { - lastRenderedUseErrorBoundaryApi?.showBoundary(new Error("Example")); - }); - expect(container.textContent).toBe("Error"); - - act(() => { - lastRenderedUseErrorBoundaryApi?.resetBoundary(); - }); - expect(container.textContent).toBe("Child"); - }); - - it("should work within a fallback component", () => { - let resetBoundary: UseErrorBoundaryApi["resetBoundary"] | null = - null; - let showBoundary: UseErrorBoundaryApi["showBoundary"] | null = null; - - function FallbackComponent() { - resetBoundary = useErrorBoundary().resetBoundary; - return
Error
; - } - - function Child() { - showBoundary = useErrorBoundary().showBoundary; - return
Child
; - } - - const root = createRoot(container); - act(() => { - root.render( - - - - ); - }); - expect(container.textContent).toBe("Child"); - - act(() => { - assert(showBoundary !== null); - showBoundary(new Error("Example")); - }); - expect(container.textContent).toBe("Error"); - - act(() => { - assert(resetBoundary !== null); - resetBoundary(); - }); - expect(container.textContent).toBe("Child"); - }); -}); diff --git a/src/useErrorBoundary.ts b/src/useErrorBoundary.ts deleted file mode 100644 index 3930750c..00000000 --- a/src/useErrorBoundary.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { useContext, useMemo, useState } from "react"; -import { assertErrorBoundaryContext } from "./assertErrorBoundaryContext"; -import { ErrorBoundaryContext } from "./ErrorBoundaryContext"; - -type UseErrorBoundaryState = - | { error: TError; hasError: true } - | { error: null; hasError: false }; - -export type UseErrorBoundaryApi = { - resetBoundary: () => void; - showBoundary: (error: TError) => void; -}; - -export function useErrorBoundary(): UseErrorBoundaryApi { - const context = useContext(ErrorBoundaryContext); - - assertErrorBoundaryContext(context); - - const [state, setState] = useState>({ - error: null, - hasError: false, - }); - - const memoized = useMemo( - () => ({ - resetBoundary: () => { - context.resetErrorBoundary(); - setState({ error: null, hasError: false }); - }, - showBoundary: (error: TError) => - setState({ - error, - hasError: true, - }), - }), - [context.resetErrorBoundary] - ); - - if (state.hasError) { - throw state.error; - } - - return memoized; -} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 00000000..b1f45c78 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/src/withErrorBoundary.ts b/src/withErrorBoundary.ts deleted file mode 100644 index 5b62576c..00000000 --- a/src/withErrorBoundary.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - createElement, - forwardRef, - RefAttributes, - ForwardRefExoticComponent, - PropsWithoutRef, - ComponentType, - ComponentRef, - ComponentProps, -} from "react"; -import { ErrorBoundary } from "./ErrorBoundary"; -import { ErrorBoundaryProps } from "./types"; - -export function withErrorBoundary>( - component: T, - errorBoundaryProps: ErrorBoundaryProps -): ForwardRefExoticComponent< - PropsWithoutRef> & RefAttributes> -> { - const Wrapped = forwardRef, ComponentProps>((props, ref) => - createElement( - ErrorBoundary, - errorBoundaryProps, - createElement(component, { ...props, ref }) - ) - ); - - // Format for display in DevTools - const name = component.displayName || component.name || "Unknown"; - Wrapped.displayName = `withErrorBoundary(${name})`; - - return Wrapped; -} diff --git a/tsconfig.json b/tsconfig.json index 7414bf56..3a1f6a21 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,17 +1,43 @@ { "compilerOptions": { - "esModuleInterop": true, - "lib": ["DOM", "ESNext"], - "module": "es2020", + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", - "noImplicitAny": true, + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, "jsx": "react-jsx", - "resolveJsonModule": true, - "skipLibCheck": true, + "strict": true, - "target": "es2018", - "typeRoots": ["node_modules/@types", "definitions"] + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + "exactOptionalPropertyTypes": true, + + "paths": { + "react-error-boundary": ["./lib"] + }, + "types": [ + "csstype", + "@testing-library/jest-dom", + "@testing-library/jest-dom/vitest" + ] }, - "exclude": ["node_modules"], - "include": ["src", "eslint.config.mjs"] + "include": [ + "vitest.d.ts", + "lib", + "integrations", + "scripts", + "src", + "index.tsx" + ], + "exclude": [] } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..531050f1 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,84 @@ +import tailwindcss from "@tailwindcss/vite"; +import react from "@vitejs/plugin-react-swc"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { visualizer } from "rollup-plugin-visualizer"; +import preserveDirectives from "rollup-preserve-directives"; +import { defineConfig, type UserConfig } from "vite"; +import dts from "vite-plugin-dts"; +import svgr from "vite-plugin-svgr"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const libraryConfig: UserConfig = { + build: { + lib: { + entry: resolve(__dirname, "lib/index.ts"), + name: "react-error-boundary", + fileName: "react-error-boundary", + formats: ["cjs", "es"], + }, + rollupOptions: { + external: ["react", "react-dom", "react/jsx-runtime"], + }, + sourcemap: true, + terserOptions: { + compress: { + directives: false, + }, + }, + }, + plugins: [react(), dts({ rollupTypes: true }), preserveDirectives()], + publicDir: false, +}; + +const websiteConfig: UserConfig = { + base: "/", + build: { + minify: "terser", + outDir: "docs", + sourcemap: true, + terserOptions: { + format: { + comments: false, + }, + }, + }, + plugins: [ + react(), + svgr(), + tailwindcss(), + visualizer({ + emitFile: true, + filename: "stats.html", + }), + ], + resolve: { + alias: { + "react-error-boundary": resolve(__dirname, "lib"), + }, + }, +}; + +// Allow iPhone to connect to the DEV site using a local IP +if (process.env.NODE_ENV === "development") { + websiteConfig.server = { + host: true, + port: 3000, + }; +} + +let config: UserConfig = {}; +switch (process.env.TARGET) { + case "lib": { + config = libraryConfig; + break; + } + default: { + config = websiteConfig; + break; + } +} + +// https://vite.dev/config/ +export default defineConfig(config); diff --git a/vitest.config.ts b/vitest.config.ts index 97c7049b..3ecaed25 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,14 +1,21 @@ -import { defineConfig, defaultExclude } from "vitest/config"; +import { defineConfig, mergeConfig } from "vitest/config"; +import viteConfig from "./vite.config"; -export default defineConfig({ - test: { - exclude: [...defaultExclude, "**/*.trunk"], - environment: "jsdom", // Use for browser-like tests - coverage: { - reporter: ["text", "json", "html"], // Optional: Add coverage reports - }, - }, - resolve: { - conditions: ["development", "browser"], - }, -}); +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + // onConsoleLog(log, type) { + // console.log("[config] onConsoleLog:", type, log); + // switch (type) { + // case "stderr": { + // throw Error("Unexpected console error: " + log); + // } + // } + // }, + environment: "jsdom", + setupFiles: "./vitest.setup.js", + exclude: ["node_modules", "integrations"] + } + }) +); diff --git a/vitest.d.ts b/vitest.d.ts new file mode 100644 index 00000000..4a8c6141 --- /dev/null +++ b/vitest.d.ts @@ -0,0 +1,7 @@ +import "vitest"; + +declare module "vitest" { + interface Matchers { + toLogError: (expectedError: string) => ReturnType; + } +} diff --git a/vitest.setup.ts b/vitest.setup.ts new file mode 100644 index 00000000..82461c96 --- /dev/null +++ b/vitest.setup.ts @@ -0,0 +1,74 @@ +import "@testing-library/jest-dom/vitest"; +import { cleanup } from "@testing-library/react"; +import { afterAll, afterEach, beforeAll, expect, vi } from "vitest"; +import failOnConsole from "vitest-fail-on-console"; + +const PROTOTYPE_PROPS = [ + "clientHeight", + "clientWidth", + "offsetHeight", + "offsetWidth" +]; + +failOnConsole({ + shouldFailOnError: true +}); + +expect.addSnapshotSerializer({ + serialize(value) { + const rect = value as DOMRect; + return `${rect.x}, ${rect.y} (${rect.width} x ${rect.height})`; + }, + test(value) { + return ( + value !== null && + typeof value === "object" && + "x" in value && + "y" in value && + "width" in value && + "height" in value + ); + } +}); + +expect.extend({ + toLogError: (callback: () => unknown, expectedError: string) => { + const spy = vi.spyOn(console, "error").mockImplementation(() => {}); + + callback(); + + expect(console.error).toHaveBeenCalledWith(expectedError); + + spy.mockReset(); + + return { + pass: true, + message: () => "" + }; + } +}); + +beforeAll(() => { + PROTOTYPE_PROPS.forEach((propertyKey) => { + Object.defineProperty(HTMLElement.prototype, propertyKey, { + configurable: true, + value: 0 + }); + }); + + vi.spyOn(console, "warn").mockImplementation(() => { + throw Error("Unexpectec console warning"); + }); +}); + +afterAll(() => { + PROTOTYPE_PROPS.forEach((propertyKey) => { + delete HTMLElement.prototype[ + propertyKey as keyof typeof HTMLElement.prototype + ]; + }); +}); + +afterEach(() => { + cleanup(); +}); From a9f168e1727c191a34746adad123b340de803cd1 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 16:27:59 -0500 Subject: [PATCH 02/12] Add lint config --- eslint.config.js | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..6f2857a2 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,71 @@ +import js from "@eslint/js"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import { globalIgnores } from "eslint/config"; +import globals from "globals"; +import tseslint from "typescript-eslint"; + +export default tseslint.config([ + globalIgnores([ + "dist", + "docs", + "public/generated", + "integrations/next/.next" + ]), + { + files: ["**/*.{ts,tsx}"], + ignores: ["**/*.example.tsx"], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs["recommended-latest"], + reactRefresh.configs.vite + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + tsconfigRootDir: import.meta.dirname + } + }, + rules: { + "no-restricted-imports": [ + "error", + { + patterns: ["*/../lib/*", "node:test"] + } + ], + "no-restricted-properties": [ + "error", + { + property: "clientHeight", + message: + "Using clientHeight is restricted; prefer offsetHeight or getBoundingClientRect()" + }, + { + property: "clientWidth", + message: + "Using clientWidth is restricted; prefer offsetWidth or getBoundingClientRect()" + } + ], + "react-hooks/exhaustive-deps": [ + "error", + { + additionalHooks: "useIsomorphicLayoutEffect" + } + ], + "@typescript-eslint/no-unused-vars": [ + "error", + { + args: "all", + argsIgnorePattern: "^_", + caughtErrors: "all", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + ignoreRestSiblings: true + } + ] + } + } +]); From 026954abe4cdb47b7123b8485d791c4c210ad664 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 16:28:29 -0500 Subject: [PATCH 03/12] Update .nvmrc --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 805b5a4e..3c032078 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.9.0 +18 From f60f30df61bcfc42b88f85bf5c1aa9f192025950 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:04:59 -0500 Subject: [PATCH 04/12] Iterating --- eslint.config.js | 32 +++++++++---------- package.json | 2 +- public/generated/docs/ErrorBoundary.json | 2 +- .../examples/AsyncUserCodeErrors.json | 3 ++ .../examples/AutoSizerPropsRoute.tsx | 3 -- public/generated/examples/BasicUsageRoute.tsx | 3 -- .../examples/ErrorBoundaryPropsRoute.tsx | 3 -- public/generated/examples/ErrorLogging.json | 3 ++ .../generated/examples/FallbackComponent.json | 2 +- .../examples/FallbackComponentRoute.tsx | 3 -- .../generated/examples/FallbackContent.json | 2 +- .../examples/FallbackContentRoute.tsx | 3 -- .../examples/GettingStartedRoute.tsx | 3 -- public/generated/examples/PageNotFound.tsx | 3 -- public/generated/examples/RenderProp.json | 2 +- public/generated/examples/RenderPropRoute.tsx | 3 -- .../examples/ResetWithUseErrorBoundary.json | 3 ++ public/generated/examples/SupportRoute.tsx | 3 -- .../examples/WithErrorBoundaryA.json | 3 ++ .../examples/WithErrorBoundaryB.json | 3 ++ .../examples/WithErrorBoundaryC.json | 3 ++ src/App.tsx | 11 +++++-- src/routes.ts | 13 ++++++++ src/routes/AsyncUserCodeErrorsRoute.tsx | 20 ++++++++++++ src/routes/ErrorBoundaryPropsRoute.tsx | 2 +- src/routes/ErrorLoggingRoute.tsx | 15 +++++++++ src/routes/ResetNearestBoundaryRoute.tsx | 17 ++++++++++ src/routes/UseErrorBoundaryRoute.tsx | 14 ++++++++ src/routes/WithErrorBoundaryRoute.tsx | 30 +++++++++++++++++ .../examples/AsyncUserCodeErrors.example.tsx | 25 +++++++++++++++ src/routes/examples/ErrorLogging.example.tsx | 24 ++++++++++++++ .../ResetWithUseErrorBoundary.example.tsx | 12 +++++++ .../examples/WithErrorBoundaryA.example.tsx | 8 +++++ .../examples/WithErrorBoundaryB.example.tsx | 19 +++++++++++ .../examples/WithErrorBoundaryC.example.tsx | 5 +++ vitest.config.ts | 4 +-- vitest.setup.ts | 12 +++---- 37 files changed, 259 insertions(+), 59 deletions(-) create mode 100644 public/generated/examples/AsyncUserCodeErrors.json delete mode 100644 public/generated/examples/AutoSizerPropsRoute.tsx delete mode 100644 public/generated/examples/BasicUsageRoute.tsx delete mode 100644 public/generated/examples/ErrorBoundaryPropsRoute.tsx create mode 100644 public/generated/examples/ErrorLogging.json delete mode 100644 public/generated/examples/FallbackComponentRoute.tsx delete mode 100644 public/generated/examples/FallbackContentRoute.tsx delete mode 100644 public/generated/examples/GettingStartedRoute.tsx delete mode 100644 public/generated/examples/PageNotFound.tsx delete mode 100644 public/generated/examples/RenderPropRoute.tsx create mode 100644 public/generated/examples/ResetWithUseErrorBoundary.json delete mode 100644 public/generated/examples/SupportRoute.tsx create mode 100644 public/generated/examples/WithErrorBoundaryA.json create mode 100644 public/generated/examples/WithErrorBoundaryB.json create mode 100644 public/generated/examples/WithErrorBoundaryC.json create mode 100644 src/routes/AsyncUserCodeErrorsRoute.tsx create mode 100644 src/routes/ErrorLoggingRoute.tsx create mode 100644 src/routes/ResetNearestBoundaryRoute.tsx create mode 100644 src/routes/UseErrorBoundaryRoute.tsx create mode 100644 src/routes/WithErrorBoundaryRoute.tsx create mode 100644 src/routes/examples/AsyncUserCodeErrors.example.tsx create mode 100644 src/routes/examples/ErrorLogging.example.tsx create mode 100644 src/routes/examples/ResetWithUseErrorBoundary.example.tsx create mode 100644 src/routes/examples/WithErrorBoundaryA.example.tsx create mode 100644 src/routes/examples/WithErrorBoundaryB.example.tsx create mode 100644 src/routes/examples/WithErrorBoundaryC.example.tsx diff --git a/eslint.config.js b/eslint.config.js index 6f2857a2..0389a21b 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,7 +10,7 @@ export default tseslint.config([ "dist", "docs", "public/generated", - "integrations/next/.next" + "integrations/next/.next", ]), { files: ["**/*.{ts,tsx}"], @@ -19,40 +19,40 @@ export default tseslint.config([ js.configs.recommended, tseslint.configs.recommended, reactHooks.configs["recommended-latest"], - reactRefresh.configs.vite + reactRefresh.configs.vite, ], languageOptions: { ecmaVersion: 2020, globals: globals.browser, parserOptions: { - tsconfigRootDir: import.meta.dirname - } + tsconfigRootDir: import.meta.dirname, + }, }, rules: { "no-restricted-imports": [ "error", { - patterns: ["*/../lib/*", "node:test"] - } + patterns: ["*/../lib/*", "node:test"], + }, ], "no-restricted-properties": [ "error", { property: "clientHeight", message: - "Using clientHeight is restricted; prefer offsetHeight or getBoundingClientRect()" + "Using clientHeight is restricted; prefer offsetHeight or getBoundingClientRect()", }, { property: "clientWidth", message: - "Using clientWidth is restricted; prefer offsetWidth or getBoundingClientRect()" - } + "Using clientWidth is restricted; prefer offsetWidth or getBoundingClientRect()", + }, ], "react-hooks/exhaustive-deps": [ "error", { - additionalHooks: "useIsomorphicLayoutEffect" - } + additionalHooks: "useIsomorphicLayoutEffect", + }, ], "@typescript-eslint/no-unused-vars": [ "error", @@ -63,9 +63,9 @@ export default tseslint.config([ caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", varsIgnorePattern: "^_", - ignoreRestSiblings: true - } - ] - } - } + ignoreRestSiblings: true, + }, + ], + }, + }, ]); diff --git a/package.json b/package.json index 4041e445..8d853c6a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "react-error-boundary", + "name": "react-error-boundary", "version": "6.0.0", "type": "module", "description": "Simple reusable React error boundary component", diff --git a/public/generated/docs/ErrorBoundary.json b/public/generated/docs/ErrorBoundary.json index 44ae7cc9..57e03d36 100644 --- a/public/generated/docs/ErrorBoundary.json +++ b/public/generated/docs/ErrorBoundary.json @@ -85,4 +85,4 @@ "required": false } } -} \ No newline at end of file +} diff --git a/public/generated/examples/AsyncUserCodeErrors.json b/public/generated/examples/AsyncUserCodeErrors.json new file mode 100644 index 00000000..19193ce4 --- /dev/null +++ b/public/generated/examples/AsyncUserCodeErrors.json @@ -0,0 +1,3 @@ +{ + "html": "
import { useErrorBoundary } from \"react-error-boundary\";
\n
 
\n
function useUserProfileInfo({ username }: { username: string }) {
\n
const { showBoundary } = useErrorBoundary();
\n
 
\n
useEffect(() => {
\n
fetchGreeting(username).then(
\n
(response) => {
\n
// Set data in state and re-render ...
\n
},
\n
(error) => {
\n
// Show error boundary
\n
showBoundary(error);
\n
}
\n
);
\n
});
\n
}
" +} diff --git a/public/generated/examples/AutoSizerPropsRoute.tsx b/public/generated/examples/AutoSizerPropsRoute.tsx deleted file mode 100644 index 115d2a15..00000000 --- a/public/generated/examples/AutoSizerPropsRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, ComponentProps } from \"react-lib-tools\";
\n
import json from \"../../public/generated/docs/ErrorBoundary.json\";
\n
import type { ComponentMetadata } from \"../types\";
\n
 
\n
export default function ErrorBoundaryPropsRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<ComponentProps json={json as ComponentMetadata} section=\"Props\" />
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/BasicUsageRoute.tsx b/public/generated/examples/BasicUsageRoute.tsx deleted file mode 100644 index f6fd3338..00000000 --- a/public/generated/examples/BasicUsageRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, Code, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/ChildComponent.json\";
\n
 
\n
export default function BasicUsageRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Basic usage\" />
\n
<div>
\n
<code>ErrorBoundary</code> measures the available width and height of its
\n
parent <code>HTMLElement</code> and passes them as props to a{\" \"}
\n
<code>Child</code> component.
\n
</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/ErrorBoundaryPropsRoute.tsx b/public/generated/examples/ErrorBoundaryPropsRoute.tsx deleted file mode 100644 index 115d2a15..00000000 --- a/public/generated/examples/ErrorBoundaryPropsRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, ComponentProps } from \"react-lib-tools\";
\n
import json from \"../../public/generated/docs/ErrorBoundary.json\";
\n
import type { ComponentMetadata } from \"../types\";
\n
 
\n
export default function ErrorBoundaryPropsRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<ComponentProps json={json as ComponentMetadata} section=\"Props\" />
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/ErrorLogging.json b/public/generated/examples/ErrorLogging.json new file mode 100644 index 00000000..a993ce8f --- /dev/null +++ b/public/generated/examples/ErrorLogging.json @@ -0,0 +1,3 @@ +{ + "html": "
\"use client\";
\n
 
\n
import type { ErrorInfo } from \"react\";
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
function logError(error: Error, info: ErrorInfo) {
\n
// Do something with the error, e.g. log to an external API
\n
}
\n
 
\n
<ErrorBoundary FallbackComponent={ErrorFallback} onError={logError}>
\n
<YourApplication />
\n
</ErrorBoundary>;
" +} diff --git a/public/generated/examples/FallbackComponent.json b/public/generated/examples/FallbackComponent.json index 702ca174..8c1edd2a 100644 --- a/public/generated/examples/FallbackComponent.json +++ b/public/generated/examples/FallbackComponent.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary, type FallbackProps } from \"react-error-boundary\";
\n
 
\n
function Fallback({ error, resetErrorBoundary }: FallbackProps) {
\n
return (
\n
<div role=\"alert\">
\n
<p>Something went wrong:</p>
\n
<pre style={{ color: \"red\" }}>{error.message}</pre>
\n
<button onClick={resetErrorBoundary}>Retry</button>
\n
</div>
\n
);
\n
}
\n
 
\n
<ErrorBoundary
\n
FallbackComponent={Fallback}
\n
onReset={(details) => {
\n
// Reset the state of your app so the error doesn't happen again
\n
}}
\n
>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} \ No newline at end of file +} diff --git a/public/generated/examples/FallbackComponentRoute.tsx b/public/generated/examples/FallbackComponentRoute.tsx deleted file mode 100644 index 9d408efa..00000000 --- a/public/generated/examples/FallbackComponentRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, Code, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/FallbackComponent.json\";
\n
 
\n
export default function FallbackComponentRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Fallback component\" />
\n
<div>
\n
React component responsible for returning a fallback UI based on a
\n
thrown value.
\n
</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/FallbackContent.json b/public/generated/examples/FallbackContent.json index 9c633679..22b33d6a 100644 --- a/public/generated/examples/FallbackContent.json +++ b/public/generated/examples/FallbackContent.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
<ErrorBoundary fallback={<div>Something went wrong</div>}>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} \ No newline at end of file +} diff --git a/public/generated/examples/FallbackContentRoute.tsx b/public/generated/examples/FallbackContentRoute.tsx deleted file mode 100644 index 0bfc70fd..00000000 --- a/public/generated/examples/FallbackContentRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, Code, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/FallbackContent.json\";
\n
 
\n
export default function RenderPropRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Fallback content\" />
\n
<div>The simplest way to render a default error message.</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/GettingStartedRoute.tsx b/public/generated/examples/GettingStartedRoute.tsx deleted file mode 100644 index 068496f8..00000000 --- a/public/generated/examples/GettingStartedRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, Callout, ExternalLink, Header } from \"react-lib-tools\";
\n
import { Link } from \"../components/Link\";
\n
 
\n
export default function GettingStartedRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header title=\"Getting started\" />
\n
<div>
\n
React components and utils for managing runtime errors. Supports all
\n
React renderers (including React DOM and React Native).
\n
</div>
\n
<Callout intent=\"primary\">
\n
This package is built on top of React{\" \"}
\n
<ExternalLink href=\"https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary\">
\n
error boundaries
\n
</ExternalLink>{\" \"}
\n
, so it has all of the advantages and limitations of that API.
\n
</Callout>
\n
<div className=\"text-xl mt-4\">Installation</div>
\n
<div>Begin by installing the library from NPM:</div>
\n
<code className=\"grow text-xs md:text-sm block text-left whitespace-pre-wrap rounded-md p-3 bg-black text-white!\">
\n
npm install <span className=\"tok-keyword\">react-error-boundary</span>
\n
</code>
\n
<Callout intent=\"primary\">
\n
TypeScript definitions are included within the published{\" \"}
\n
<code>dist</code> folder.
\n
</Callout>
\n
<div className=\"text-xl mt-4\">Support</div>
\n
<div>Here are some ways to support this project:</div>
\n
<ul className=\"pl-8\">
\n
<li className=\"list-disc\">
\n
<ExternalLink href=\"https://github.com/sponsors/bvaughn/\">
\n
Become a GitHub sponsor
\n
</ExternalLink>
\n
</li>
\n
<li className=\"list-disc\">
\n
<ExternalLink href=\"http://givebrian.coffee/\">
\n
Buy me a coffee
\n
</ExternalLink>
\n
</li>
\n
</ul>
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/PageNotFound.tsx b/public/generated/examples/PageNotFound.tsx deleted file mode 100644 index ef554a80..00000000 --- a/public/generated/examples/PageNotFound.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, Callout, ExternalLink, Header } from \"react-lib-tools\";
\n
 
\n
export default function PageNotFound() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header title=\"Page not found\" />
\n
<Callout intent=\"danger\">
\n
The URL you requested can't be found. If you think this is an error,{\" \"}
\n
<ExternalLink href=\"https://github.com/bvaughn/react-error-boundary/issues/new\">
\n
please file a GitHub issue
\n
</ExternalLink>
\n
.
\n
</Callout>
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/RenderProp.json b/public/generated/examples/RenderProp.json index b31622fa..8cd1a068 100644 --- a/public/generated/examples/RenderProp.json +++ b/public/generated/examples/RenderProp.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
<ErrorBoundary
\n
fallbackRender={({ error, resetErrorBoundary }) => (
\n
<div role=\"alert\">
\n
<p>Something went wrong:</p>
\n
<pre style={{ color: \"red\" }}>{error.message}</pre>
\n
<button onClick={resetErrorBoundary}>Retry</button>
\n
</div>
\n
)}
\n
onReset={(details) => {
\n
// Reset the state of your app so the error doesn't happen again
\n
}}
\n
>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} \ No newline at end of file +} diff --git a/public/generated/examples/RenderPropRoute.tsx b/public/generated/examples/RenderPropRoute.tsx deleted file mode 100644 index dcab2db5..00000000 --- a/public/generated/examples/RenderPropRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, Code, ExternalLink, Header } from \"react-lib-tools\";
\n
import { html } from \"../../public/generated/examples/RenderProp.json\";
\n
 
\n
export default function RenderPropRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header section=\"Examples\" title=\"Render props\" />
\n
<div>
\n
<ExternalLink href=\"https://react.dev/reference/react/Children#calling-a-render-prop-to-customize-rendering\">
\n
Render prop
\n
</ExternalLink>{\" \"}
\n
function responsible for returning a fallback UI based on a thrown
\n
value.
\n
</div>
\n
<Code html={html} />
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/ResetWithUseErrorBoundary.json b/public/generated/examples/ResetWithUseErrorBoundary.json new file mode 100644 index 00000000..8ea77451 --- /dev/null +++ b/public/generated/examples/ResetWithUseErrorBoundary.json @@ -0,0 +1,3 @@ +{ + "html": "
import { useErrorBoundary } from \"react-error-boundary\";
\n
 
\n
function Example() {
\n
const { resetBoundary } = useErrorBoundary();
\n
 
\n
// Call resetBoundary() to reset the nearest ErrorBoundary and retry a failed render
\n
}
" +} diff --git a/public/generated/examples/SupportRoute.tsx b/public/generated/examples/SupportRoute.tsx deleted file mode 100644 index 32bfc346..00000000 --- a/public/generated/examples/SupportRoute.tsx +++ /dev/null @@ -1,3 +0,0 @@ -{ - "html": "
import { Box, ExternalLink, Header } from \"react-lib-tools\";
\n
 
\n
export default function SupportRoute() {
\n
return (
\n
<Box direction=\"column\" gap={4}>
\n
<Header title=\"Support\" />
\n
<div>
\n
<ExternalLink href=\"https://github.com/bvaughn/react-error-boundary\">
\n
GitHub
\n
</ExternalLink>{\" \"}
\n
is the easiest place to look for help, but it's probably not the
\n
fastest. This project is maintained by a single developer so there is
\n
limited bandwidth for answering questions.
\n
</div>
\n
<div>
\n
I recommend asking questions on{\" \"}
\n
<ExternalLink href=\"https://stackoverflow.com/search?q=react-error-boundary\">
\n
Stack Overflow
\n
</ExternalLink>{\" \"}
\n
or{\" \"}
\n
<ExternalLink href=\"https://reddit.com/r/reactjs\">Reddit</ExternalLink>{\" \"}
\n
to start with. Both sites have active communities who often respond
\n
quickly. If you don't find an answer there you can try opening a GitHub
\n
issue- but please take a moment first to see if your question has{\" \"}
\n
<ExternalLink href=\"https://github.com/bvaughn/react-error-boundary/issues?q=is%3Aissue%20state%3Aclosed\">
\n
has already been answered
\n
</ExternalLink>{\" \"}
\n
before opening a new one.
\n
</div>
\n
</Box>
\n
);
\n
}
" -} \ No newline at end of file diff --git a/public/generated/examples/WithErrorBoundaryA.json b/public/generated/examples/WithErrorBoundaryA.json new file mode 100644 index 00000000..73659866 --- /dev/null +++ b/public/generated/examples/WithErrorBoundaryA.json @@ -0,0 +1,3 @@ +{ + "html": "
function UserProfile({ username }: { username: string }) {
\n
// Render...
\n
}
" +} diff --git a/public/generated/examples/WithErrorBoundaryB.json b/public/generated/examples/WithErrorBoundaryB.json new file mode 100644 index 00000000..28bfc6ba --- /dev/null +++ b/public/generated/examples/WithErrorBoundaryB.json @@ -0,0 +1,3 @@ +{ + "html": "
import { withErrorBoundary } from \"react-error-boundary\";
\n
 
\n
const UserProfileWithErrorBoundary = withErrorBoundary(UserProfile, {
\n
fallback: <div>Something went wrong</div>,
\n
onError(error, info) {
\n
// Do something with the error
\n
// E.g. log to an error logging client here
\n
},
\n
});
" +} diff --git a/public/generated/examples/WithErrorBoundaryC.json b/public/generated/examples/WithErrorBoundaryC.json new file mode 100644 index 00000000..62b9bdf9 --- /dev/null +++ b/public/generated/examples/WithErrorBoundaryC.json @@ -0,0 +1,3 @@ +{ + "html": "
<UserProfileWithErrorBoundary username=\"Brian\" />;
" +} diff --git a/src/App.tsx b/src/App.tsx index 214c03cd..2e05ff80 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -13,14 +13,21 @@ export default function App() { Fallback component + Error logging + + Async user code errors + + + Retry nearest boundary + ErrorBoundary - useErrorBoundary + useErrorBoundary hook - withErrorBoundary + withErrorBoundary HOC Support diff --git a/src/routes.ts b/src/routes.ts index dca91448..8d50505a 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -10,9 +10,22 @@ export const routes = { "/examples/fallback-component": lazy( () => import("./routes/FallbackComponentRoute") ), + "/examples/error-logging": lazy(() => import("./routes/ErrorLoggingRoute")), + "/examples/async-user-code-errors": lazy( + () => import("./routes/AsyncUserCodeErrorsRoute") + ), + "/examples/retry-nearest-boundary": lazy( + () => import("./routes/ResetNearestBoundaryRoute") + ), "/api/error-boundary-props": lazy( () => import("./routes/ErrorBoundaryPropsRoute") ), + "/api/use-error-boundary-hook": lazy( + () => import("./routes/UseErrorBoundaryRoute") + ), + "/api/with-error-boundary-hoc": lazy( + () => import("./routes/WithErrorBoundaryRoute") + ), "/support": lazy(() => import("./routes/SupportRoute")), } satisfies Record; diff --git a/src/routes/AsyncUserCodeErrorsRoute.tsx b/src/routes/AsyncUserCodeErrorsRoute.tsx new file mode 100644 index 00000000..c07612cc --- /dev/null +++ b/src/routes/AsyncUserCodeErrorsRoute.tsx @@ -0,0 +1,20 @@ +import { Box, Code, Header, Link } from "react-lib-tools"; +import { html } from "../../public/generated/examples/AsyncUserCodeErrors.json"; + +export default function AsyncUserCodeErrorsRoute() { + return ( + +
+
+ React only handles errors thrown during render or during component + lifecycle methods (e.g. effects and did-mount/did-update). Errors thrown + in event handlers, or after async code has run, will not be caught. +
+
+ The useErrorBoundary hook + can be used to pass those errors to the nearest error boundary: +
+ + + ); +} diff --git a/src/routes/ErrorBoundaryPropsRoute.tsx b/src/routes/ErrorBoundaryPropsRoute.tsx index ae1b6286..dd9fd6c0 100644 --- a/src/routes/ErrorBoundaryPropsRoute.tsx +++ b/src/routes/ErrorBoundaryPropsRoute.tsx @@ -4,7 +4,7 @@ import json from "../../public/generated/docs/ErrorBoundary.json"; export default function ErrorBoundaryPropsRoute() { return ( - + ); } diff --git a/src/routes/ErrorLoggingRoute.tsx b/src/routes/ErrorLoggingRoute.tsx new file mode 100644 index 00000000..3e5a39fd --- /dev/null +++ b/src/routes/ErrorLoggingRoute.tsx @@ -0,0 +1,15 @@ +import { Box, Code, Header } from "react-lib-tools"; +import { html } from "../../public/generated/examples/ErrorLogging.json"; + +export default function ErrorLoggingRoute() { + return ( + +
+
+ Use the onError callback to log errors to a service like + Sentry. +
+ + + ); +} diff --git a/src/routes/ResetNearestBoundaryRoute.tsx b/src/routes/ResetNearestBoundaryRoute.tsx new file mode 100644 index 00000000..b947ecf4 --- /dev/null +++ b/src/routes/ResetNearestBoundaryRoute.tsx @@ -0,0 +1,17 @@ +import { Box, Code, Header } from "react-lib-tools"; +import { html } from "../../public/generated/examples/ResetWithUseErrorBoundary.json"; +import { Link } from "../components/Link"; + +export default function ResetNearestBoundaryRoute() { + return ( + +
+
+ The useErrorBoundary hook + can be used to reset the nearest error boundary and retry a failed + render attempt. +
+ + + ); +} diff --git a/src/routes/UseErrorBoundaryRoute.tsx b/src/routes/UseErrorBoundaryRoute.tsx new file mode 100644 index 00000000..b6bc0daa --- /dev/null +++ b/src/routes/UseErrorBoundaryRoute.tsx @@ -0,0 +1,14 @@ +import { Box, Header } from "react-lib-tools"; + +export default function UseErrorBoundaryRoute() { + return ( + +
+
+ Convenience hook for imperatively showing or dismissing error + boundaries. +
+
TODO
+ + ); +} diff --git a/src/routes/WithErrorBoundaryRoute.tsx b/src/routes/WithErrorBoundaryRoute.tsx new file mode 100644 index 00000000..a6e1f4ea --- /dev/null +++ b/src/routes/WithErrorBoundaryRoute.tsx @@ -0,0 +1,30 @@ +import { Box, Code, ExternalLink, Header } from "react-lib-tools"; +import { html as htmlA } from "../../public/generated/examples/WithErrorBoundaryA.json"; +import { html as htmlB } from "../../public/generated/examples/WithErrorBoundaryB.json"; +import { html as htmlC } from "../../public/generated/examples/WithErrorBoundaryC.json"; + +export default function WithErrorBoundaryRoute() { + return ( + +
+
+ This package can also be used as a{" "} + + higher-order component + + . For example, given a component like this: +
+ +
+ You could use the withErrorBoundary HOC to create a wrapper + component: +
+ +
And then render it like this
+ +
+ This might be useful for certain types of reusable/library components. +
+ + ); +} diff --git a/src/routes/examples/AsyncUserCodeErrors.example.tsx b/src/routes/examples/AsyncUserCodeErrors.example.tsx new file mode 100644 index 00000000..12b63b45 --- /dev/null +++ b/src/routes/examples/AsyncUserCodeErrors.example.tsx @@ -0,0 +1,25 @@ +import { useEffect } from "react"; // hidden +import { useErrorBoundary } from "react-error-boundary"; + +function useUserProfileInfo({ username }: { username: string }) { + const { showBoundary } = useErrorBoundary(); + + useEffect(() => { + fetchGreeting(username).then( + (response) => { + // Set data in state and re-render ... + response; // hidden + }, + (error) => { + // Show error boundary + showBoundary(error); + } + ); + }); +} + +// + +export { useUserProfileInfo }; + +async function fetchGreeting(a: string) {} diff --git a/src/routes/examples/ErrorLogging.example.tsx b/src/routes/examples/ErrorLogging.example.tsx new file mode 100644 index 00000000..7071c6e0 --- /dev/null +++ b/src/routes/examples/ErrorLogging.example.tsx @@ -0,0 +1,24 @@ +"use client"; + +import type { ErrorInfo } from "react"; +import { ErrorBoundary } from "react-error-boundary"; + +function logError(error: Error, info: ErrorInfo) { + // Do something with the error, e.g. log to an external API + error; // hidden + info; // hidden +} + + + +; + +// + +function ErrorFallback() { + return null; +} + +function YourApplication() { + return null; +} diff --git a/src/routes/examples/ResetWithUseErrorBoundary.example.tsx b/src/routes/examples/ResetWithUseErrorBoundary.example.tsx new file mode 100644 index 00000000..4f5bb753 --- /dev/null +++ b/src/routes/examples/ResetWithUseErrorBoundary.example.tsx @@ -0,0 +1,12 @@ +import { useErrorBoundary } from "react-error-boundary"; + +function Example() { + const { resetBoundary } = useErrorBoundary(); + + // Call resetBoundary() to reset the nearest ErrorBoundary and retry a failed render + resetBoundary; // hidden +} + +// + +export { Example }; diff --git a/src/routes/examples/WithErrorBoundaryA.example.tsx b/src/routes/examples/WithErrorBoundaryA.example.tsx new file mode 100644 index 00000000..05f63f67 --- /dev/null +++ b/src/routes/examples/WithErrorBoundaryA.example.tsx @@ -0,0 +1,8 @@ +function UserProfile({ username }: { username: string }) { + return null; // hidden + // Render... +} + +// + +export { UserProfile }; diff --git a/src/routes/examples/WithErrorBoundaryB.example.tsx b/src/routes/examples/WithErrorBoundaryB.example.tsx new file mode 100644 index 00000000..8d95c70a --- /dev/null +++ b/src/routes/examples/WithErrorBoundaryB.example.tsx @@ -0,0 +1,19 @@ +import { UserProfile } from "./WithErrorBoundaryA.example"; + +// + +import { withErrorBoundary } from "react-error-boundary"; + +const UserProfileWithErrorBoundary = withErrorBoundary(UserProfile, { + fallback:
Something went wrong
, + onError(error, info) { + // Do something with the error + // E.g. log to an error logging client here + error; // hidden + info; // hidden + }, +}); + +// + +export { UserProfileWithErrorBoundary }; diff --git a/src/routes/examples/WithErrorBoundaryC.example.tsx b/src/routes/examples/WithErrorBoundaryC.example.tsx new file mode 100644 index 00000000..5c4309b2 --- /dev/null +++ b/src/routes/examples/WithErrorBoundaryC.example.tsx @@ -0,0 +1,5 @@ +import { UserProfileWithErrorBoundary } from "./WithErrorBoundaryB.example"; + +// + +; diff --git a/vitest.config.ts b/vitest.config.ts index 3ecaed25..b1761030 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -15,7 +15,7 @@ export default mergeConfig( // }, environment: "jsdom", setupFiles: "./vitest.setup.js", - exclude: ["node_modules", "integrations"] - } + exclude: ["node_modules", "integrations"], + }, }) ); diff --git a/vitest.setup.ts b/vitest.setup.ts index 82461c96..70f7b303 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -7,11 +7,11 @@ const PROTOTYPE_PROPS = [ "clientHeight", "clientWidth", "offsetHeight", - "offsetWidth" + "offsetWidth", ]; failOnConsole({ - shouldFailOnError: true + shouldFailOnError: true, }); expect.addSnapshotSerializer({ @@ -28,7 +28,7 @@ expect.addSnapshotSerializer({ "width" in value && "height" in value ); - } + }, }); expect.extend({ @@ -43,16 +43,16 @@ expect.extend({ return { pass: true, - message: () => "" + message: () => "", }; - } + }, }); beforeAll(() => { PROTOTYPE_PROPS.forEach((propertyKey) => { Object.defineProperty(HTMLElement.prototype, propertyKey, { configurable: true, - value: 0 + value: 0, }); }); From 06ae87b4dbf1e7179625db5b7bec0566727ac147 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:06:25 -0500 Subject: [PATCH 05/12] Copied over GitHub Workflows --- .github/ISSUE_TEMPLATE.md | 39 ------------------------- .github/PULL_REQUEST_TEMPLATE.md | 41 --------------------------- .github/workflows/ci.yml | 24 ---------------- .github/workflows/eslint.yml | 15 ++++++++++ .github/workflows/pending-changes.yml | 16 +++++++++++ .github/workflows/playwright.yml | 37 ++++++++++++++++++++++++ .github/workflows/prettier.yml | 15 ++++++++++ .github/workflows/typescript.yml | 17 +++++++++++ .github/workflows/vitest.yml | 17 +++++++++++ 9 files changed, 117 insertions(+), 104 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/eslint.yml create mode 100644 .github/workflows/pending-changes.yml create mode 100644 .github/workflows/playwright.yml create mode 100644 .github/workflows/prettier.yml create mode 100644 .github/workflows/typescript.yml create mode 100644 .github/workflows/vitest.yml diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 9a5cbadb..00000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,39 +0,0 @@ - - -- `react-error-boundary` version: -- `node` version: -- `npm` version: - -Relevant code or config - -```js - -``` - -What you did: - -What happened: - - - -Reproduction repository: - - - -Problem description: - -Suggested solution: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index f534e2db..00000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,41 +0,0 @@ - - - - -**What**: - - - -**Why**: - - - -**How**: - - - -**Checklist**: - - - - -- [ ] Documentation -- [ ] Tests -- [ ] Ready to be merged - - - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index f7bd6344..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: CI - -on: - pull_request: - types: [opened, synchronize, reopened] - -jobs: - ci: - runs-on: ubuntu-latest - strategy: - matrix: - command: ["pnpm lint", "pnpm typescript", "pnpm test"] - steps: - - uses: actions/checkout@v5 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v5 - with: - cache: "pnpm" - cache-dependency-path: "pnpm-lock.yaml" - node-version-file: ".nvmrc" - - run: pnpm install --frozen-lockfile - - run: pnpm prerelease - - name: Run cis - run: ${{ matrix.command }} diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 00000000..3668f2b5 --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,15 @@ +name: "ESLint" +on: [pull_request] +jobs: + eslint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v2 + with: + version: 10 + - name: Install dependencies + run: pnpm install --frozen-lockfile --recursive + - name: Run ESLint + run: pnpm lint diff --git a/.github/workflows/pending-changes.yml b/.github/workflows/pending-changes.yml new file mode 100644 index 00000000..6fb2d40b --- /dev/null +++ b/.github/workflows/pending-changes.yml @@ -0,0 +1,16 @@ +name: "Pending changes" +on: [pull_request] +jobs: + pending-changes: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v2 + with: + version: 10 + - name: Install dependencies + run: pnpm install --frozen-lockfile --recursive + - uses: nickcharlton/diff-check@main + with: + command: pnpm run compile diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 00000000..0abbbcd8 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,37 @@ +name: "Playwright Tests" +on: [pull_request] +jobs: + e2e-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v2 + with: + version: 10 + - name: Install dependencies + run: pnpm install --frozen-lockfile --recursive + + - name: Cache Playwright browser binaries + id: playwright-cache + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright # Default Linux path + key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-playwright- + + - name: Install Playwright browsers and dependencies (on cache miss) + if: steps.playwright-cache.outputs.cache-hit != 'true' + run: pnpm e2e:install + + - name: Build library + run: pnpm prerelease + - name: Run Playwright tests + run: pnpm dev:integrations & pnpm e2e:test + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: playwright-report + path: integrations/vite/test-results/ + retention-days: 14 \ No newline at end of file diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 00000000..a0307d4c --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,15 @@ +name: "Prettier" +on: [pull_request] +jobs: + prettier: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v2 + with: + version: 10 + - name: Install dependencies + run: pnpm install --frozen-lockfile --recursive + - name: Run Prettier + run: pnpm run prettier:ci diff --git a/.github/workflows/typescript.yml b/.github/workflows/typescript.yml new file mode 100644 index 00000000..e32fb91e --- /dev/null +++ b/.github/workflows/typescript.yml @@ -0,0 +1,17 @@ +name: "TypeScript" +on: [pull_request] +jobs: + typescript: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v2 + with: + version: 10 + - name: Install dependencies + run: pnpm install --frozen-lockfile --recursive + - name: Build NPM package + run: pnpm build + - name: Run TypeScript + run: pnpm tsc diff --git a/.github/workflows/vitest.yml b/.github/workflows/vitest.yml new file mode 100644 index 00000000..abbd39f7 --- /dev/null +++ b/.github/workflows/vitest.yml @@ -0,0 +1,17 @@ +name: "Vitest" +on: [pull_request] +jobs: + unit-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v2 + with: + version: 10 + - name: Install dependencies + run: pnpm install --frozen-lockfile --recursive + - name: Build NPM packages + run: pnpm run build + - name: Run tests + run: pnpm run test:ci From 6b73d9164d50c60a3365a74a4a551109c6ad61a0 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:07:16 -0500 Subject: [PATCH 06/12] Udpate comment --- pnpm-workspace.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f2dc4f0e..8f332427 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,7 @@ packages: # e2e testing - integrations/* - # react-resizable-panels library + # react-error-boundary library - lib/* # documentation website - src/* \ No newline at end of file From 65167d6f94d4ac58d66070d897ce38b965e549ab Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:08:35 -0500 Subject: [PATCH 07/12] Remove references to integrations --- .github/workflows/playwright.yml | 37 -------------------------------- eslint.config.js | 7 +----- package.json | 3 --- pnpm-workspace.yaml | 2 -- tsconfig.json | 1 - vitest.config.ts | 2 +- 6 files changed, 2 insertions(+), 50 deletions(-) delete mode 100644 .github/workflows/playwright.yml diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index 0abbbcd8..00000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: "Playwright Tests" -on: [pull_request] -jobs: - e2e-tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - - uses: pnpm/action-setup@v2 - with: - version: 10 - - name: Install dependencies - run: pnpm install --frozen-lockfile --recursive - - - name: Cache Playwright browser binaries - id: playwright-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ms-playwright # Default Linux path - key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-playwright- - - - name: Install Playwright browsers and dependencies (on cache miss) - if: steps.playwright-cache.outputs.cache-hit != 'true' - run: pnpm e2e:install - - - name: Build library - run: pnpm prerelease - - name: Run Playwright tests - run: pnpm dev:integrations & pnpm e2e:test - - uses: actions/upload-artifact@v4 - if: ${{ !cancelled() }} - with: - name: playwright-report - path: integrations/vite/test-results/ - retention-days: 14 \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js index 0389a21b..382be100 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -6,12 +6,7 @@ import globals from "globals"; import tseslint from "typescript-eslint"; export default tseslint.config([ - globalIgnores([ - "dist", - "docs", - "public/generated", - "integrations/next/.next", - ]), + globalIgnores(["dist", "docs", "public/generated"]), { files: ["**/*.{ts,tsx}"], ignores: ["**/*.example.tsx"], diff --git a/package.json b/package.json index 8d853c6a..b72c0216 100644 --- a/package.json +++ b/package.json @@ -35,15 +35,12 @@ ], "scripts": { "dev": "vite", - "dev:integrations": "pnpm -C integrations/vite/ run dev", "build": "pnpm run build:lib && pnpm run build:docs", "build:docs": "TARGET=docs vite build", "build:lib": "TARGET=lib vite build", "compile": "pnpm run compile:docs && pnpm run compile:examples", "compile:docs": "tsx ./scripts/compile-docs", "compile:examples": "tsx ./scripts/compile-examples", - "e2e:install": "pnpm -C integrations/vite/ exec playwright install --with-deps", - "e2e:test": "pnpm -C integrations/vite/ run test", "lint": "eslint .", "prerelease": "rm -rf dist && pnpm run build:lib", "prettier": "prettier --write \"**/*.{css,html,js,json,jsx,ts,tsx}\"", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8f332427..01185b3d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,4 @@ packages: - # e2e testing - - integrations/* # react-error-boundary library - lib/* # documentation website diff --git a/tsconfig.json b/tsconfig.json index 3a1f6a21..34d15fc7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,7 +34,6 @@ "include": [ "vitest.d.ts", "lib", - "integrations", "scripts", "src", "index.tsx" diff --git a/vitest.config.ts b/vitest.config.ts index b1761030..af8a014a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -15,7 +15,7 @@ export default mergeConfig( // }, environment: "jsdom", setupFiles: "./vitest.setup.js", - exclude: ["node_modules", "integrations"], + exclude: ["node_modules"], }, }) ); From 06d8da1ef57db1dfa7649177603563b5f42899dd Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:32:39 -0500 Subject: [PATCH 08/12] Udpate react-lib-tools --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- ...rCodeErrors.example.tsx => AsyncUserCodeErrors.tsx} | 0 .../{ErrorLogging.example.tsx => ErrorLogging.tsx} | 0 ...backComponent.example.tsx => FallbackComponent.tsx} | 0 ...FallbackContent.example.tsx => FallbackContent.tsx} | 0 .../{RenderProp.example.tsx => RenderProp.tsx} | 0 ...ndary.example.tsx => ResetWithUseErrorBoundary.tsx} | 0 ...rorBoundaryA.example.tsx => WithErrorBoundaryA.tsx} | 0 ...rorBoundaryB.example.tsx => WithErrorBoundaryB.tsx} | 2 +- ...rorBoundaryC.example.tsx => WithErrorBoundaryC.tsx} | 2 +- tsconfig.json | 8 +------- 12 files changed, 9 insertions(+), 15 deletions(-) rename src/routes/examples/{AsyncUserCodeErrors.example.tsx => AsyncUserCodeErrors.tsx} (100%) rename src/routes/examples/{ErrorLogging.example.tsx => ErrorLogging.tsx} (100%) rename src/routes/examples/{FallbackComponent.example.tsx => FallbackComponent.tsx} (100%) rename src/routes/examples/{FallbackContent.example.tsx => FallbackContent.tsx} (100%) rename src/routes/examples/{RenderProp.example.tsx => RenderProp.tsx} (100%) rename src/routes/examples/{ResetWithUseErrorBoundary.example.tsx => ResetWithUseErrorBoundary.tsx} (100%) rename src/routes/examples/{WithErrorBoundaryA.example.tsx => WithErrorBoundaryA.tsx} (100%) rename src/routes/examples/{WithErrorBoundaryB.example.tsx => WithErrorBoundaryB.tsx} (86%) rename src/routes/examples/{WithErrorBoundaryC.example.tsx => WithErrorBoundaryC.tsx} (90%) diff --git a/package.json b/package.json index b72c0216..3f9c6e1e 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "react-docgen-typescript": "^2.4.0", "react-dom": "^19.2.3", "react-error-boundary": "^6.0.0", - "react-lib-tools": "^0.0.6", + "react-lib-tools": "^0.0.7", "react-router-dom": "^7.6.3", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-visualizer": "^6.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d438f354..99b7f74f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,8 +144,8 @@ importers: specifier: ^6.0.0 version: 6.0.0(react@19.2.3) react-lib-tools: - specifier: ^0.0.6 - version: 0.0.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^0.0.7 + version: 0.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react-router-dom: specifier: ^7.6.3 version: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -2640,8 +2640,8 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-lib-tools@0.0.6: - resolution: {integrity: sha512-1oJB9AqKSL/wmUzBr98PDXeNCuWhKFZs1A+XDOQsNbgSscXPSmoHle0D+sNmRwjKw5Fw5JHKYPcpISaVIwk/3g==} + react-lib-tools@0.0.7: + resolution: {integrity: sha512-gdXn0upex0/BZAYYWhUWSLKMCwUDBqhI16TS5vM4o36rIsUAllanTIckaXoZ5GZsk+Zyh5/SDwpTFtfCeZy8tA==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -5701,7 +5701,7 @@ snapshots: react-is@17.0.2: {} - react-lib-tools@0.0.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-lib-tools@0.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) diff --git a/src/routes/examples/AsyncUserCodeErrors.example.tsx b/src/routes/examples/AsyncUserCodeErrors.tsx similarity index 100% rename from src/routes/examples/AsyncUserCodeErrors.example.tsx rename to src/routes/examples/AsyncUserCodeErrors.tsx diff --git a/src/routes/examples/ErrorLogging.example.tsx b/src/routes/examples/ErrorLogging.tsx similarity index 100% rename from src/routes/examples/ErrorLogging.example.tsx rename to src/routes/examples/ErrorLogging.tsx diff --git a/src/routes/examples/FallbackComponent.example.tsx b/src/routes/examples/FallbackComponent.tsx similarity index 100% rename from src/routes/examples/FallbackComponent.example.tsx rename to src/routes/examples/FallbackComponent.tsx diff --git a/src/routes/examples/FallbackContent.example.tsx b/src/routes/examples/FallbackContent.tsx similarity index 100% rename from src/routes/examples/FallbackContent.example.tsx rename to src/routes/examples/FallbackContent.tsx diff --git a/src/routes/examples/RenderProp.example.tsx b/src/routes/examples/RenderProp.tsx similarity index 100% rename from src/routes/examples/RenderProp.example.tsx rename to src/routes/examples/RenderProp.tsx diff --git a/src/routes/examples/ResetWithUseErrorBoundary.example.tsx b/src/routes/examples/ResetWithUseErrorBoundary.tsx similarity index 100% rename from src/routes/examples/ResetWithUseErrorBoundary.example.tsx rename to src/routes/examples/ResetWithUseErrorBoundary.tsx diff --git a/src/routes/examples/WithErrorBoundaryA.example.tsx b/src/routes/examples/WithErrorBoundaryA.tsx similarity index 100% rename from src/routes/examples/WithErrorBoundaryA.example.tsx rename to src/routes/examples/WithErrorBoundaryA.tsx diff --git a/src/routes/examples/WithErrorBoundaryB.example.tsx b/src/routes/examples/WithErrorBoundaryB.tsx similarity index 86% rename from src/routes/examples/WithErrorBoundaryB.example.tsx rename to src/routes/examples/WithErrorBoundaryB.tsx index 8d95c70a..c15e5efa 100644 --- a/src/routes/examples/WithErrorBoundaryB.example.tsx +++ b/src/routes/examples/WithErrorBoundaryB.tsx @@ -1,4 +1,4 @@ -import { UserProfile } from "./WithErrorBoundaryA.example"; +import { UserProfile } from "./WithErrorBoundaryA"; // diff --git a/src/routes/examples/WithErrorBoundaryC.example.tsx b/src/routes/examples/WithErrorBoundaryC.tsx similarity index 90% rename from src/routes/examples/WithErrorBoundaryC.example.tsx rename to src/routes/examples/WithErrorBoundaryC.tsx index 5c4309b2..fe0c28ce 100644 --- a/src/routes/examples/WithErrorBoundaryC.example.tsx +++ b/src/routes/examples/WithErrorBoundaryC.tsx @@ -1,4 +1,4 @@ -import { UserProfileWithErrorBoundary } from "./WithErrorBoundaryB.example"; +import { UserProfileWithErrorBoundary } from "./WithErrorBoundaryB"; // diff --git a/tsconfig.json b/tsconfig.json index 34d15fc7..6905003b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -31,12 +31,6 @@ "@testing-library/jest-dom/vitest" ] }, - "include": [ - "vitest.d.ts", - "lib", - "scripts", - "src", - "index.tsx" - ], + "include": ["vitest.d.ts", "lib", "scripts", "src", "index.tsx"], "exclude": [] } From faf7308be1ee6ba62a8194b3abe88384db67065c Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:50:45 -0500 Subject: [PATCH 09/12] Fixed lint ignore path --- eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint.config.js b/eslint.config.js index 382be100..20aaa0b8 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -9,7 +9,7 @@ export default tseslint.config([ globalIgnores(["dist", "docs", "public/generated"]), { files: ["**/*.{ts,tsx}"], - ignores: ["**/*.example.tsx"], + ignores: ["**/examples/*.{ts,tsx}"], extends: [ js.configs.recommended, tseslint.configs.recommended, From fd7e78d45a5bb04125d30fe25b97dd8c945d6b2c Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 17:55:21 -0500 Subject: [PATCH 10/12] Lint fix --- src/routes/examples/AsyncUserCodeErrors.tsx | 2 +- src/routes/examples/WithErrorBoundaryA.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/examples/AsyncUserCodeErrors.tsx b/src/routes/examples/AsyncUserCodeErrors.tsx index 12b63b45..a4bfcb31 100644 --- a/src/routes/examples/AsyncUserCodeErrors.tsx +++ b/src/routes/examples/AsyncUserCodeErrors.tsx @@ -22,4 +22,4 @@ function useUserProfileInfo({ username }: { username: string }) { export { useUserProfileInfo }; -async function fetchGreeting(a: string) {} +async function fetchGreeting(_: string) {} diff --git a/src/routes/examples/WithErrorBoundaryA.tsx b/src/routes/examples/WithErrorBoundaryA.tsx index 05f63f67..afb00ce0 100644 --- a/src/routes/examples/WithErrorBoundaryA.tsx +++ b/src/routes/examples/WithErrorBoundaryA.tsx @@ -1,4 +1,5 @@ function UserProfile({ username }: { username: string }) { + username; // hidden return null; // hidden // Render... } From 4c91988949dea12f4acba3e49043b707bfc45a12 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 18:54:40 -0500 Subject: [PATCH 11/12] Lint fix --- .prettierignore | 7 +++-- .prettierrc.json | 13 --------- index.tsx | 2 +- lib/components/ErrorBoundary.test.tsx | 24 ++++++++-------- lib/components/ErrorBoundary.tsx | 6 ++-- lib/hooks/useErrorBoundary.test.tsx | 4 +-- lib/hooks/useErrorBoundary.ts | 28 +++++++++++++++++-- lib/types.ts | 2 +- lib/utils/assert.ts | 2 +- lib/utils/assertErrorBoundaryContext.ts | 2 +- lib/utils/isErrorBoundaryContext.ts | 2 +- lib/utils/withErrorBoundary.ts | 4 +-- public/generated/docs/ErrorBoundary.json | 2 +- .../examples/AsyncUserCodeErrors.json | 2 +- public/generated/examples/ErrorLogging.json | 2 +- .../generated/examples/FallbackComponent.json | 2 +- .../generated/examples/FallbackContent.json | 2 +- public/generated/examples/RenderProp.json | 2 +- .../examples/ResetWithUseErrorBoundary.json | 2 +- .../examples/WithErrorBoundaryA.json | 2 +- .../examples/WithErrorBoundaryB.json | 2 +- .../examples/WithErrorBoundaryC.json | 2 +- src/routes.ts | 12 ++++---- vitest.config.ts | 2 +- 24 files changed, 72 insertions(+), 58 deletions(-) delete mode 100644 .prettierrc.json diff --git a/.prettierignore b/.prettierignore index de4d1f00..db8bc77b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,5 @@ -dist -node_modules +/dist +/docs +/generated +/public +/src/routes/examples diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 1d471186..00000000 --- a/.prettierrc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "semi": true, - "singleQuote": false, - "arrowParens": "always", - "bracketSameLine": false, - "bracketSpacing": true, - "endOfLine": "lf", - "jsxSingleQuote": false, - "proseWrap": "preserve", - "quoteProps": "as-needed" -} diff --git a/index.tsx b/index.tsx index 7cce5685..747a1129 100644 --- a/index.tsx +++ b/index.tsx @@ -6,5 +6,5 @@ import App from "./src/App.tsx"; createRoot(document.getElementById("root")!).render( - + , ); diff --git a/lib/components/ErrorBoundary.test.tsx b/lib/components/ErrorBoundary.test.tsx index 9c372629..8538fa2c 100644 --- a/lib/components/ErrorBoundary.test.tsx +++ b/lib/components/ErrorBoundary.test.tsx @@ -52,7 +52,7 @@ describe("ErrorBoundary", () => { root.render( Error}> Content - + , ); }); @@ -71,7 +71,7 @@ describe("ErrorBoundary", () => { root.render( Content - + , ); }); } @@ -126,13 +126,13 @@ describe("ErrorBoundary", () => { describe('"fallback" element', () => { function render( - props: Omit = {} + props: Omit = {}, ) { act(() => { root.render( Error}> Content - + , ); }); } @@ -160,7 +160,7 @@ describe("ErrorBoundary", () => { root.render( Content - + , ); }); expect(container.textContent).toBe(""); @@ -175,13 +175,13 @@ describe("ErrorBoundary", () => { | null = null; function render( - props: Omit = {} + props: Omit = {}, ) { act(() => { root.render( Content - + , ); }); } @@ -197,7 +197,7 @@ describe("ErrorBoundary", () => { lastRenderedResetErrorBoundary = resetErrorBoundary; return
FallbackComponent
; - } + }, ); }); @@ -242,13 +242,13 @@ describe("ErrorBoundary", () => { let fallbackRender: Mock<(props: FallbackProps) => ReactElement>; function render( - props: Omit = {} + props: Omit = {}, ) { act(() => { root.render( Content - + , ); }); } @@ -264,7 +264,7 @@ describe("ErrorBoundary", () => { lastRenderedResetErrorBoundary = resetErrorBoundary; return
fallbackRender
; - } + }, ); }); @@ -327,7 +327,7 @@ describe("ErrorBoundary", () => { root.render( Content - + , ); }); } diff --git a/lib/components/ErrorBoundary.tsx b/lib/components/ErrorBoundary.tsx index 93481e24..42f0df9d 100644 --- a/lib/components/ErrorBoundary.tsx +++ b/lib/components/ErrorBoundary.tsx @@ -63,7 +63,7 @@ export class ErrorBoundary extends Component< componentDidUpdate( prevProps: ErrorBoundaryProps, - prevState: ErrorBoundaryState + prevState: ErrorBoundaryState, ) { const { didCatch } = this.state; const { resetKeys } = this.props; @@ -110,7 +110,7 @@ export class ErrorBoundary extends Component< } else { if (isDevelopment) { console.error( - "react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop" + "react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop", ); } @@ -127,7 +127,7 @@ export class ErrorBoundary extends Component< resetErrorBoundary: this.resetErrorBoundary, }, }, - childToRender + childToRender, ); } } diff --git a/lib/hooks/useErrorBoundary.test.tsx b/lib/hooks/useErrorBoundary.test.tsx index 377270eb..ca88a672 100644 --- a/lib/hooks/useErrorBoundary.test.tsx +++ b/lib/hooks/useErrorBoundary.test.tsx @@ -44,7 +44,7 @@ describe("useErrorBoundary", () => { fallbackRender={({ error }) =>
Fallback: {error.message}
} > - + , ); expect(container.textContent).toBe("Child"); @@ -83,7 +83,7 @@ describe("useErrorBoundary", () => { render( - + , ); expect(container.textContent).toBe("Fallback"); diff --git a/lib/hooks/useErrorBoundary.ts b/lib/hooks/useErrorBoundary.ts index 253d24d6..d86c3a5d 100644 --- a/lib/hooks/useErrorBoundary.ts +++ b/lib/hooks/useErrorBoundary.ts @@ -12,7 +12,31 @@ export type UseErrorBoundaryApi = { showBoundary: (error: Error) => void; }; -export function useErrorBoundary(): UseErrorBoundaryApi { +/** + * Convenience hook for imperatively showing or dismissing error boundaries. + * + * ⚠️ This hook must only be used within an `ErrorBoundary` subtree. + */ +export function useErrorBoundary(): { + /** + * The currently visible `Error` (if one has been thrown). + */ + error: Error | null; + + /** + * Method to reset and retry the nearest active error boundary (if one is active). + */ + resetBoundary: () => void; + + /** + * Trigger the nearest error boundary to display the error provided. + * + * ℹ️ React only handles errors thrown during render or during component lifecycle methods (e.g. effects and did-mount/did-update). + * Errors thrown in event handlers, or after async code has run, will not be caught. + * This method is a way to imperatively trigger an error boundary during these phases. + */ + showBoundary: (error: Error) => void; +} { const context = useContext(ErrorBoundaryContext); assertErrorBoundaryContext(context); @@ -37,7 +61,7 @@ export function useErrorBoundary(): UseErrorBoundaryApi { hasError: true, }), }), - [error, resetErrorBoundary] + [error, resetErrorBoundary], ); if (state.hasError) { diff --git a/lib/types.ts b/lib/types.ts index 4a6403ce..1b72a321 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -31,7 +31,7 @@ type ErrorBoundarySharedProps = PropsWithChildren<{ reason: "keys"; prev: unknown[] | undefined; next: unknown[] | undefined; - } + }, ) => void; /** diff --git a/lib/utils/assert.ts b/lib/utils/assert.ts index 9c70efc9..ed60414d 100644 --- a/lib/utils/assert.ts +++ b/lib/utils/assert.ts @@ -1,6 +1,6 @@ export function assert( expectedCondition: unknown, - message: string = "Assertion error" + message: string = "Assertion error", ): asserts expectedCondition { if (!expectedCondition) { throw Error(message); diff --git a/lib/utils/assertErrorBoundaryContext.ts b/lib/utils/assertErrorBoundaryContext.ts index 610973b0..12c75fa3 100644 --- a/lib/utils/assertErrorBoundaryContext.ts +++ b/lib/utils/assertErrorBoundaryContext.ts @@ -2,7 +2,7 @@ import type { ErrorBoundaryContextType } from "../context/ErrorBoundaryContext"; import { isErrorBoundaryContext } from "./isErrorBoundaryContext"; export function assertErrorBoundaryContext( - value: unknown + value: unknown, ): asserts value is ErrorBoundaryContextType { if (!isErrorBoundaryContext(value)) { throw new Error("ErrorBoundaryContext not found"); diff --git a/lib/utils/isErrorBoundaryContext.ts b/lib/utils/isErrorBoundaryContext.ts index 41bfd811..aab544ba 100644 --- a/lib/utils/isErrorBoundaryContext.ts +++ b/lib/utils/isErrorBoundaryContext.ts @@ -1,7 +1,7 @@ import type { ErrorBoundaryContextType } from "../context/ErrorBoundaryContext"; export function isErrorBoundaryContext( - value: unknown + value: unknown, ): value is ErrorBoundaryContextType { return ( value !== null && diff --git a/lib/utils/withErrorBoundary.ts b/lib/utils/withErrorBoundary.ts index f7423b58..2204860f 100644 --- a/lib/utils/withErrorBoundary.ts +++ b/lib/utils/withErrorBoundary.ts @@ -15,8 +15,8 @@ export function withErrorBoundary< createElement( ErrorBoundary, errorBoundaryProps, - createElement(Component, { ...props, ref } as Props) - ) + createElement(Component, { ...props, ref } as Props), + ), ); // Format for display in DevTools diff --git a/public/generated/docs/ErrorBoundary.json b/public/generated/docs/ErrorBoundary.json index 57e03d36..44ae7cc9 100644 --- a/public/generated/docs/ErrorBoundary.json +++ b/public/generated/docs/ErrorBoundary.json @@ -85,4 +85,4 @@ "required": false } } -} +} \ No newline at end of file diff --git a/public/generated/examples/AsyncUserCodeErrors.json b/public/generated/examples/AsyncUserCodeErrors.json index 19193ce4..52276e19 100644 --- a/public/generated/examples/AsyncUserCodeErrors.json +++ b/public/generated/examples/AsyncUserCodeErrors.json @@ -1,3 +1,3 @@ { "html": "
import { useErrorBoundary } from \"react-error-boundary\";
\n
 
\n
function useUserProfileInfo({ username }: { username: string }) {
\n
const { showBoundary } = useErrorBoundary();
\n
 
\n
useEffect(() => {
\n
fetchGreeting(username).then(
\n
(response) => {
\n
// Set data in state and re-render ...
\n
},
\n
(error) => {
\n
// Show error boundary
\n
showBoundary(error);
\n
}
\n
);
\n
});
\n
}
" -} +} \ No newline at end of file diff --git a/public/generated/examples/ErrorLogging.json b/public/generated/examples/ErrorLogging.json index a993ce8f..063c0542 100644 --- a/public/generated/examples/ErrorLogging.json +++ b/public/generated/examples/ErrorLogging.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import type { ErrorInfo } from \"react\";
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
function logError(error: Error, info: ErrorInfo) {
\n
// Do something with the error, e.g. log to an external API
\n
}
\n
 
\n
<ErrorBoundary FallbackComponent={ErrorFallback} onError={logError}>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} +} \ No newline at end of file diff --git a/public/generated/examples/FallbackComponent.json b/public/generated/examples/FallbackComponent.json index 8c1edd2a..702ca174 100644 --- a/public/generated/examples/FallbackComponent.json +++ b/public/generated/examples/FallbackComponent.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary, type FallbackProps } from \"react-error-boundary\";
\n
 
\n
function Fallback({ error, resetErrorBoundary }: FallbackProps) {
\n
return (
\n
<div role=\"alert\">
\n
<p>Something went wrong:</p>
\n
<pre style={{ color: \"red\" }}>{error.message}</pre>
\n
<button onClick={resetErrorBoundary}>Retry</button>
\n
</div>
\n
);
\n
}
\n
 
\n
<ErrorBoundary
\n
FallbackComponent={Fallback}
\n
onReset={(details) => {
\n
// Reset the state of your app so the error doesn't happen again
\n
}}
\n
>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} +} \ No newline at end of file diff --git a/public/generated/examples/FallbackContent.json b/public/generated/examples/FallbackContent.json index 22b33d6a..9c633679 100644 --- a/public/generated/examples/FallbackContent.json +++ b/public/generated/examples/FallbackContent.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
<ErrorBoundary fallback={<div>Something went wrong</div>}>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} +} \ No newline at end of file diff --git a/public/generated/examples/RenderProp.json b/public/generated/examples/RenderProp.json index 8cd1a068..b31622fa 100644 --- a/public/generated/examples/RenderProp.json +++ b/public/generated/examples/RenderProp.json @@ -1,3 +1,3 @@ { "html": "
\"use client\";
\n
 
\n
import { ErrorBoundary } from \"react-error-boundary\";
\n
 
\n
<ErrorBoundary
\n
fallbackRender={({ error, resetErrorBoundary }) => (
\n
<div role=\"alert\">
\n
<p>Something went wrong:</p>
\n
<pre style={{ color: \"red\" }}>{error.message}</pre>
\n
<button onClick={resetErrorBoundary}>Retry</button>
\n
</div>
\n
)}
\n
onReset={(details) => {
\n
// Reset the state of your app so the error doesn't happen again
\n
}}
\n
>
\n
<YourApplication />
\n
</ErrorBoundary>;
" -} +} \ No newline at end of file diff --git a/public/generated/examples/ResetWithUseErrorBoundary.json b/public/generated/examples/ResetWithUseErrorBoundary.json index 8ea77451..e3e68c87 100644 --- a/public/generated/examples/ResetWithUseErrorBoundary.json +++ b/public/generated/examples/ResetWithUseErrorBoundary.json @@ -1,3 +1,3 @@ { "html": "
import { useErrorBoundary } from \"react-error-boundary\";
\n
 
\n
function Example() {
\n
const { resetBoundary } = useErrorBoundary();
\n
 
\n
// Call resetBoundary() to reset the nearest ErrorBoundary and retry a failed render
\n
}
" -} +} \ No newline at end of file diff --git a/public/generated/examples/WithErrorBoundaryA.json b/public/generated/examples/WithErrorBoundaryA.json index 73659866..ef6bdafc 100644 --- a/public/generated/examples/WithErrorBoundaryA.json +++ b/public/generated/examples/WithErrorBoundaryA.json @@ -1,3 +1,3 @@ { "html": "
function UserProfile({ username }: { username: string }) {
\n
// Render...
\n
}
" -} +} \ No newline at end of file diff --git a/public/generated/examples/WithErrorBoundaryB.json b/public/generated/examples/WithErrorBoundaryB.json index 28bfc6ba..94eb1f34 100644 --- a/public/generated/examples/WithErrorBoundaryB.json +++ b/public/generated/examples/WithErrorBoundaryB.json @@ -1,3 +1,3 @@ { "html": "
import { withErrorBoundary } from \"react-error-boundary\";
\n
 
\n
const UserProfileWithErrorBoundary = withErrorBoundary(UserProfile, {
\n
fallback: <div>Something went wrong</div>,
\n
onError(error, info) {
\n
// Do something with the error
\n
// E.g. log to an error logging client here
\n
},
\n
});
" -} +} \ No newline at end of file diff --git a/public/generated/examples/WithErrorBoundaryC.json b/public/generated/examples/WithErrorBoundaryC.json index 62b9bdf9..6c740714 100644 --- a/public/generated/examples/WithErrorBoundaryC.json +++ b/public/generated/examples/WithErrorBoundaryC.json @@ -1,3 +1,3 @@ { "html": "
<UserProfileWithErrorBoundary username=\"Brian\" />;
" -} +} \ No newline at end of file diff --git a/src/routes.ts b/src/routes.ts index 8d50505a..8d20c68e 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -8,23 +8,23 @@ export const routes = { "/examples/fallback": lazy(() => import("./routes/FallbackContentRoute")), "/examples/render-prop": lazy(() => import("./routes/RenderPropRoute")), "/examples/fallback-component": lazy( - () => import("./routes/FallbackComponentRoute") + () => import("./routes/FallbackComponentRoute"), ), "/examples/error-logging": lazy(() => import("./routes/ErrorLoggingRoute")), "/examples/async-user-code-errors": lazy( - () => import("./routes/AsyncUserCodeErrorsRoute") + () => import("./routes/AsyncUserCodeErrorsRoute"), ), "/examples/retry-nearest-boundary": lazy( - () => import("./routes/ResetNearestBoundaryRoute") + () => import("./routes/ResetNearestBoundaryRoute"), ), "/api/error-boundary-props": lazy( - () => import("./routes/ErrorBoundaryPropsRoute") + () => import("./routes/ErrorBoundaryPropsRoute"), ), "/api/use-error-boundary-hook": lazy( - () => import("./routes/UseErrorBoundaryRoute") + () => import("./routes/UseErrorBoundaryRoute"), ), "/api/with-error-boundary-hoc": lazy( - () => import("./routes/WithErrorBoundaryRoute") + () => import("./routes/WithErrorBoundaryRoute"), ), "/support": lazy(() => import("./routes/SupportRoute")), } satisfies Record; diff --git a/vitest.config.ts b/vitest.config.ts index af8a014a..af8fdc7e 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -17,5 +17,5 @@ export default mergeConfig( setupFiles: "./vitest.setup.js", exclude: ["node_modules"], }, - }) + }), ); From eb36ad03f4233413a78c067e957853a5957cbc6d Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sun, 28 Dec 2025 18:55:10 -0500 Subject: [PATCH 12/12] Update react-lib-tools --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 3f9c6e1e..a5d95672 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "react-docgen-typescript": "^2.4.0", "react-dom": "^19.2.3", "react-error-boundary": "^6.0.0", - "react-lib-tools": "^0.0.7", + "react-lib-tools": "^0.0.10", "react-router-dom": "^7.6.3", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-visualizer": "^6.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99b7f74f..b08d6cf5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,8 +144,8 @@ importers: specifier: ^6.0.0 version: 6.0.0(react@19.2.3) react-lib-tools: - specifier: ^0.0.7 - version: 0.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^0.0.10 + version: 0.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react-router-dom: specifier: ^7.6.3 version: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -2640,8 +2640,8 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-lib-tools@0.0.7: - resolution: {integrity: sha512-gdXn0upex0/BZAYYWhUWSLKMCwUDBqhI16TS5vM4o36rIsUAllanTIckaXoZ5GZsk+Zyh5/SDwpTFtfCeZy8tA==} + react-lib-tools@0.0.10: + resolution: {integrity: sha512-kRXkdEpPdFel0gI+z1g3FvdBj9a5t6yFMWFiFxp9kBzK/ZtbngaX0l8G1qvv/nwSq7XNi12uyRCeQDcFotJodQ==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -5701,7 +5701,7 @@ snapshots: react-is@17.0.2: {} - react-lib-tools@0.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-lib-tools@0.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3)