`) rather than putting it as a direct child of the flex container, like so:
-```jsx
+```tsx
-
+ {/* Other children... */}
-
- {({ height, width }) => (
-
- )}
-
+
```
### Why is `AutoSizer` passing a height of 0?
-`AutoSizer` expands to _fill_ its parent but it will not _stretch_ the parent. This is done to prevent problems with flexbox layouts. If `AutoSizer` is reporting a height (or width) of 0- then it's likely that the parent element (or one of its parents) has a height of 0.
+`AutoSizer` expands to _fill_ its parent but it will not _stretch_ the parent. This is done to prevent problems with Flex layouts. If `AutoSizer` is reporting a height (or width) of 0- then it's likely that the parent element (or one of its parents) has a height of 0.
-The solution to this problem is often to add `height: 100%` or `flex: 1` to the parent. One easy way to test this is to add a style property (eg `background-color: red;`) to the parent to visually confirm that it is the expected size.
+The solution to this problem is often to add `height: 100%` or `flex: 1` to the parent. One easy way to test this is to add a style property (eg. `background-color: red;`) to the parent to visually confirm that it is the expected size.
-### Can I use `AutoSizer` to manage only width or height (not both)?
+### Can I use `AutoSizer` to manage _only_ width or height (not both)?
-You can use `AutoSizer` to control only one dimension of its child component using the `disableHeight` or `disableWidth` attributes. For example, a fixed-height component that should grow to fill the available width can be created like so:
+No, but you can memoize your child component so that it only re-renders if width (or height) changes.
+```tsx
+import { memo } from "react";
-```jsx
-
- {({width}) => }
-
+const MemoizedChild = memo(
+ Child,
+ function arePropsEqual(oldProps, newProps) {
+ return oldProps.height === newProps.height;
+ }
+);
```
-
-### Module parsing fails because of an unexpected token?
-
-This package targets [ECMAScript 2015](https://262.ecma-international.org/6.0/) (ES6) and requires a build tool such as [babel-loader](https://www.npmjs.com/package/babel-loader) that is capable of parsing the ES6 `class` syntax.
-
### Can this component work with a Content Security Policy?
-[The specification of Content Security Policy](https://www.w3.org/TR/2016/REC-CSP2-20161215/#intro)
-describes as the following:
+[The specification of Content Security Policy](https://www.w3.org/TR/2016/REC-CSP2-20161215/#intro) describes as the following:
> This document defines Content Security Policy, a mechanism web applications
> can use to mitigate a broad class of content injection vulnerabilities, such
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..6f4ebde
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,66 @@
+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", "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
+ }
+ ]
+ }
+ }
+]);
diff --git a/index.css b/index.css
new file mode 100644
index 0000000..3da6c53
--- /dev/null
+++ b/index.css
@@ -0,0 +1,92 @@
+@import "tailwindcss";
+
+:root {
+ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+ font-size: 12px;
+
+ @media only screen and (max-width: 600px) {
+ font-size: 16px;
+ }
+
+ color-scheme: dark;
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+@keyframes background-gradient-animation {
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+#root {
+ width: 100dvw;
+ height: 100dvh;
+ overflow: auto;
+ background: linear-gradient(
+ -45deg,
+ var(--color-fuchsia-500),
+ var(--color-violet-500),
+ var(--color-fuchsia-700)
+ );
+ background-size: 400% 400%;
+ animation: background-gradient-animation 20s ease infinite;
+}
+
+* {
+ scrollbar-width: thin;
+ scrollbar-color: var(--color-slate-600) transparent;
+ outline: none;
+ transition:
+ color 0.25s ease,
+ background-color 0.25s ease,
+ border-color 0.25s ease,
+ opacity 0.25s ease,
+ outline-color 0.25s ease;
+}
+
+main {
+ [data-link],
+ a {
+ cursor: pointer;
+ color: var(--color-sky-400);
+ &:hover {
+ color: var(--color-sky-300);
+ }
+ }
+}
+
+*[data-focus] {
+ border: 2px solid transparent;
+ &:focus {
+ border: 2px solid var(--color-sky-300);
+ }
+}
+
+*[data-focus-within] {
+ border: 2px solid transparent;
+ &:focus-within {
+ border: 2px solid var(--color-sky-300);
+ }
+
+ &[data-focus-within="bold"] {
+ border-color: var(--color-sky-600);
+ &:focus-within {
+ border: 2px solid var(--color-sky-300);
+ }
+ }
+}
+
+code {
+ color: rgba(255, 255, 255, 0.8);
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f9de753
--- /dev/null
+++ b/index.html
@@ -0,0 +1,41 @@
+
+
+
+
react-virtualized-auto-sizer | (re)sizing helper component
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.tsx b/index.tsx
new file mode 100644
index 0000000..7cce568
--- /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/integrations/vite/README.md b/integrations/vite/README.md
new file mode 100644
index 0000000..da98444
--- /dev/null
+++ b/integrations/vite/README.md
@@ -0,0 +1,54 @@
+# React + TypeScript + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## Expanding the ESLint configuration
+
+If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
+
+```js
+export default tseslint.config({
+ extends: [
+ // Remove ...tseslint.configs.recommended and replace with this
+ ...tseslint.configs.recommendedTypeChecked,
+ // Alternatively, use this for stricter rules
+ ...tseslint.configs.strictTypeChecked,
+ // Optionally, add this for stylistic rules
+ ...tseslint.configs.stylisticTypeChecked,
+ ],
+ languageOptions: {
+ // other options...
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+})
+```
+
+You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
+
+```js
+// eslint.config.js
+import reactX from 'eslint-plugin-react-x'
+import reactDom from 'eslint-plugin-react-dom'
+
+export default tseslint.config({
+ plugins: {
+ // Add the react-x and react-dom plugins
+ 'react-x': reactX,
+ 'react-dom': reactDom,
+ },
+ rules: {
+ // other rules...
+ // Enable its recommended typescript rules
+ ...reactX.configs['recommended-typescript'].rules,
+ ...reactDom.configs.recommended.rules,
+ },
+})
+```
diff --git a/integrations/vite/eslint.config.js b/integrations/vite/eslint.config.js
new file mode 100644
index 0000000..fc0144d
--- /dev/null
+++ b/integrations/vite/eslint.config.js
@@ -0,0 +1,43 @@
+import js from "@eslint/js";
+import globals from "globals";
+import reactHooks from "eslint-plugin-react-hooks";
+import reactRefresh from "eslint-plugin-react-refresh";
+import tseslint from "typescript-eslint";
+
+export default tseslint.config(
+ { ignores: ["dist"] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ["**/*.{ts,tsx}"],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ parserOptions: {
+ tsconfigRootDir: import.meta.dirname
+ }
+ },
+ plugins: {
+ "react-hooks": reactHooks,
+ "react-refresh": reactRefresh
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ args: "all",
+ argsIgnorePattern: "^_",
+ caughtErrors: "all",
+ caughtErrorsIgnorePattern: "^_",
+ destructuredArrayIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ ignoreRestSiblings: true
+ }
+ ],
+ "react-refresh/only-export-components": [
+ "warn",
+ { allowConstantExport: true }
+ ]
+ }
+ }
+);
diff --git a/integrations/vite/index.html b/integrations/vite/index.html
new file mode 100644
index 0000000..abcf27a
--- /dev/null
+++ b/integrations/vite/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
[Vite] react-resizable-panels integration
+
+
+
+
+
+
diff --git a/integrations/vite/package.json b/integrations/vite/package.json
new file mode 100644
index 0000000..1144cb9
--- /dev/null
+++ b/integrations/vite/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "vite",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite --port 3010",
+ "build": "tsc -b && vite build",
+ "test": "npx playwright test",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "react": "^19.2.3",
+ "react-dom": "^19.2.3",
+ "react-virtualized-auto-sizer": "workspace:*",
+ "react-router": "^7"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.25.0",
+ "@playwright/test": "^1",
+ "@tailwindcss/vite": "^4.1.17",
+ "@types/react": "^19.1.2",
+ "@types/react-dom": "^19.1.2",
+ "@vitejs/plugin-react": "^4.4.1",
+ "eslint": "^9.25.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.19",
+ "globals": "^16.0.0",
+ "tailwindcss": "^4.1.17",
+ "typescript": "~5.8.3",
+ "typescript-eslint": "^8.30.1",
+ "vite": "^6.3.5"
+ }
+}
diff --git a/integrations/vite/playwright.config.ts b/integrations/vite/playwright.config.ts
new file mode 100644
index 0000000..4356231
--- /dev/null
+++ b/integrations/vite/playwright.config.ts
@@ -0,0 +1,20 @@
+import { defineConfig, devices } from "@playwright/test";
+
+export default defineConfig({
+ projects: [
+ {
+ name: "chromium",
+ timeout: 5_000,
+ use: {
+ ...devices["Desktop Chrome"],
+ viewport: { width: 1000, height: 600 }
+
+ // Uncomment to visually debug
+ // headless: false,
+ // launchOptions: {
+ // slowMo: 500
+ // }
+ }
+ }
+ ]
+});
diff --git a/integrations/vite/src/components/Children.tsx b/integrations/vite/src/components/Children.tsx
new file mode 100644
index 0000000..62e2d94
--- /dev/null
+++ b/integrations/vite/src/components/Children.tsx
@@ -0,0 +1,43 @@
+import { useLayoutEffect, useState } from "react";
+
+export type SizeProps = {
+ height: number | undefined;
+ width: number | undefined;
+};
+
+export const Children = function Children({
+ height,
+ onCommitLogsChange,
+ width
+}: SizeProps & {
+ onCommitLogsChange: (logs: SizeProps[]) => void;
+}) {
+ const [commitLogs, setCommitLogs] = useState
([]);
+
+ useLayoutEffect(() => {
+ setCommitLogs((prev) => [
+ ...prev,
+ {
+ height:
+ height === undefined ? undefined : parseFloat(height.toFixed(1)),
+ width: width === undefined ? undefined : parseFloat(width.toFixed(1))
+ } as SizeProps
+ ]);
+ }, [height, width]);
+
+ useLayoutEffect(() => onCommitLogsChange(commitLogs));
+
+ // Account for StrictMode double rendering on mount
+ useLayoutEffect(
+ () => () => {
+ setCommitLogs([]);
+ },
+ []
+ );
+
+ return (
+
+ {width} x {height} pixels
+
+ );
+};
diff --git a/integrations/vite/src/components/Container.tsx b/integrations/vite/src/components/Container.tsx
new file mode 100644
index 0000000..9d0059b
--- /dev/null
+++ b/integrations/vite/src/components/Container.tsx
@@ -0,0 +1,9 @@
+import { type PropsWithChildren } from "react";
+
+export type ContainerProps = PropsWithChildren<{
+ className?: string | undefined;
+}>;
+
+export function Container({ children, className }: ContainerProps) {
+ return {children}
;
+}
diff --git a/integrations/vite/src/components/DebugData.tsx b/integrations/vite/src/components/DebugData.tsx
new file mode 100644
index 0000000..accf3f0
--- /dev/null
+++ b/integrations/vite/src/components/DebugData.tsx
@@ -0,0 +1,22 @@
+import { cn } from "../utils/cn";
+
+export function DebugData({ data }: { data: object }) {
+ return (
+
+ {JSON.stringify(data, replacer, 2)}
+
+ );
+}
+
+function replacer(_key: string, value: unknown) {
+ if (typeof value === "number") {
+ return Math.round(value);
+ }
+
+ return value;
+}
diff --git a/integrations/vite/src/components/Resizer.tsx b/integrations/vite/src/components/Resizer.tsx
new file mode 100644
index 0000000..c054f62
--- /dev/null
+++ b/integrations/vite/src/components/Resizer.tsx
@@ -0,0 +1,8 @@
+import { type PropsWithChildren } from "react";
+
+export type ResizerProps = PropsWithChildren;
+
+export function Resizer({ children: childrenProp }: ResizerProps) {
+ // TODO
+ return childrenProp;
+}
diff --git a/integrations/vite/src/index.css b/integrations/vite/src/index.css
new file mode 100644
index 0000000..522bae2
--- /dev/null
+++ b/integrations/vite/src/index.css
@@ -0,0 +1,23 @@
+@import "tailwindcss";
+
+@layer base {
+ h1 {
+ @apply mb-4 text-4xl font-bold tracking-tight text-gray-900;
+ }
+ ul {
+ @apply list-disc pl-6;
+ }
+ ol {
+ @apply list-decimal pl-6;
+ }
+ p {
+ @apply mb-2 mt-2;
+ }
+ a {
+ @apply text-blue-600 hover:text-pink-400 visited:text-blue-900;
+ }
+}
+
+#root {
+ height: 100vh;
+}
diff --git a/integrations/vite/src/main.tsx b/integrations/vite/src/main.tsx
new file mode 100644
index 0000000..30740b3
--- /dev/null
+++ b/integrations/vite/src/main.tsx
@@ -0,0 +1,15 @@
+import { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import { BrowserRouter, Route, Routes } from "react-router";
+import "./index.css";
+import { Home } from "./routes/Home";
+
+createRoot(document.getElementById("root")!).render(
+
+
+
+ } />
+
+
+
+);
diff --git a/integrations/vite/src/routes/Home.tsx b/integrations/vite/src/routes/Home.tsx
new file mode 100644
index 0000000..6b5b509
--- /dev/null
+++ b/integrations/vite/src/routes/Home.tsx
@@ -0,0 +1,85 @@
+import {
+ useCallback,
+ useLayoutEffect,
+ useMemo,
+ useState,
+ type FunctionComponent
+} from "react";
+import { createPortal } from "react-dom";
+import {
+ AutoSizer,
+ type AutoSizerBox,
+ type Size
+} from "react-virtualized-auto-sizer";
+import { Children, type SizeProps } from "../components/Children";
+import { useSearchParams } from "react-router";
+
+export function Home() {
+ const [params] = useSearchParams();
+ const box = (params.get("box") || undefined) as AutoSizerBox | undefined;
+ const style = params.get("style") || "";
+ console.log("Home:", JSON.stringify({ box, style }, null, 2));
+
+ const [container] = useState(() => {
+ const div = document.createElement("div");
+ div.setAttribute("data-testid", "container");
+ div.style = `width: 100%; height: 100%; box-sizing: border-box; color: white; ${style}`;
+ return div;
+ });
+ const [iframe, setIframe] = useState(null);
+
+ useLayoutEffect(() => {
+ if (!iframe || !iframe.contentDocument) {
+ return;
+ }
+
+ iframe.contentDocument.body.style = "margin: 0; padding: 0; height: 100vh;";
+ iframe.contentDocument.body.appendChild(container);
+ }, [container, iframe]);
+
+ const [commits, setCommits] = useState([]);
+ const [onResizeCalls, setOnResizeCalls] = useState([]);
+
+ const Child = useMemo>(
+ () =>
+ ({ height, width }) => (
+
+ ),
+ []
+ );
+
+ const onResize = useCallback((size: Size) => {
+ setOnResizeCalls((prev) => [
+ ...prev,
+ {
+ height: parseFloat(size.height.toFixed(1)),
+ width: parseFloat(size.width.toFixed(1))
+ }
+ ]);
+ }, []);
+
+ return (
+
+
+ {createPortal(
+
,
+ container
+ )}
+
+
+ {JSON.stringify({
+ commits,
+ onResizeCalls
+ })}
+
+
+
+ );
+}
diff --git a/integrations/vite/src/utils/assert.ts b/integrations/vite/src/utils/assert.ts
new file mode 100644
index 0000000..ff8d568
--- /dev/null
+++ b/integrations/vite/src/utils/assert.ts
@@ -0,0 +1,10 @@
+export function assert(
+ expectedCondition: unknown,
+ message: string = "Assertion error"
+): asserts expectedCondition {
+ if (!expectedCondition) {
+ console.error(message);
+
+ throw Error(message);
+ }
+}
diff --git a/integrations/vite/src/utils/cn.ts b/integrations/vite/src/utils/cn.ts
new file mode 100644
index 0000000..365058c
--- /dev/null
+++ b/integrations/vite/src/utils/cn.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/integrations/vite/src/vite-env.d.ts b/integrations/vite/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/integrations/vite/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/integrations/vite/tests/render.spec.tsx b/integrations/vite/tests/render.spec.tsx
new file mode 100644
index 0000000..a02e749
--- /dev/null
+++ b/integrations/vite/tests/render.spec.tsx
@@ -0,0 +1,146 @@
+import { expect, test, type Page } from "@playwright/test";
+import type { AutoSizerBox } from "react-virtualized-auto-sizer";
+
+async function startTest({
+ box,
+ page,
+ style = ""
+}: {
+ box?: AutoSizerBox;
+ page: Page;
+ style?: string;
+}) {
+ // page.on("console", (message) => console.log(message.text()));
+
+ const url = `http://localhost:3010/?box=${box ?? ""}&style=${encodeURIComponent(style)}`;
+
+ console.log(`\n${url}\n`);
+
+ await page.goto(url);
+}
+
+test.describe("render", () => {
+ test("should mount with undefined size and then update with measured size", async ({
+ page
+ }) => {
+ await startTest({ page });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [{}, { height: 150, width: 1000 }],
+ onResizeCalls: [{ height: 150, width: 1000 }]
+ })
+ );
+ });
+
+ test("should support box: content-box", async ({ page }) => {
+ await startTest({
+ box: "content-box",
+ page,
+ style: "padding: 10px; border: 2px solid black;"
+ });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [{}, { height: 126, width: 976 }],
+ onResizeCalls: [{ height: 126, width: 976 }]
+ })
+ );
+
+ await page.setViewportSize({
+ width: 500,
+ height: 500
+ });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [{}, { height: 126, width: 976 }, { height: 101, width: 476 }],
+ onResizeCalls: [
+ { height: 126, width: 976 },
+ { height: 101, width: 476 }
+ ]
+ })
+ );
+ });
+
+ test("should support box: border-box", async ({ page }) => {
+ await startTest({
+ box: "border-box",
+ page,
+ style: "padding: 10px; border: 2px solid black;"
+ });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [{}, { height: 150, width: 1000 }],
+ onResizeCalls: [{ height: 150, width: 1000 }]
+ })
+ );
+
+ await page.setViewportSize({
+ width: 500,
+ height: 500
+ });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [
+ {},
+ { height: 150, width: 1000 },
+ { height: 125, width: 500 }
+ ],
+ onResizeCalls: [
+ { height: 150, width: 1000 },
+ { height: 125, width: 500 }
+ ]
+ })
+ );
+ });
+
+ test("should support box: device-pixel-content-box", async ({ page }) => {
+ await startTest({
+ box: "device-pixel-content-box",
+ page,
+ style: "scale: 0.5;"
+ });
+
+ // Would be 75 x 500 if scale was applied
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [{}, { height: 150, width: 1000 }],
+ onResizeCalls: [{ height: 150, width: 1000 }]
+ })
+ );
+
+ await page.setViewportSize({
+ width: 500,
+ height: 500
+ });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [
+ {},
+ { height: 150, width: 1000 },
+ { height: 125, width: 500 }
+ ],
+ onResizeCalls: [
+ { height: 150, width: 1000 },
+ { height: 125, width: 500 }
+ ]
+ })
+ );
+ });
+
+ // Regression test for issues #96
+ test("should support floating values", async ({ page }) => {
+ await startTest({ page, style: "width: 500.4px; height: 125.6px;" });
+
+ await expect(page.getByTestId("code")).toHaveText(
+ JSON.stringify({
+ commits: [{}, { height: 125.6, width: 500.4 }],
+ onResizeCalls: [{ height: 125.6, width: 500.4 }]
+ })
+ );
+ });
+});
diff --git a/integrations/vite/tsconfig.json b/integrations/vite/tsconfig.json
new file mode 100644
index 0000000..fcbd955
--- /dev/null
+++ b/integrations/vite/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["src"]
+}
diff --git a/integrations/vite/vite.config.ts b/integrations/vite/vite.config.ts
new file mode 100644
index 0000000..8d7be99
--- /dev/null
+++ b/integrations/vite/vite.config.ts
@@ -0,0 +1,11 @@
+import tailwindcss from "@tailwindcss/vite";
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: [react(), tailwindcss()],
+ server: {
+ cors: true
+ }
+});
diff --git a/jest.config.js b/jest.config.js
deleted file mode 100644
index 5352e83..0000000
--- a/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-module.exports = {
- globals: {
- "ts-jest": {
- tsconfig: {
- allowJs: true,
- },
- },
- },
- preset: "ts-jest",
- testMatch: ["**/*.test.{ts,tsx}"],
- transform: {
- "^.+\\.[tj]sx?$": "ts-jest",
- },
-};
diff --git a/lib/components/AutoSizer.test.tsx b/lib/components/AutoSizer.test.tsx
new file mode 100644
index 0000000..fa7fd6a
--- /dev/null
+++ b/lib/components/AutoSizer.test.tsx
@@ -0,0 +1,89 @@
+import { render as renderForTest } from "@testing-library/react";
+import { beforeEach, describe, expect, it, vi } from "vitest";
+import { simulateResize } from "../utils/test/simulateResize";
+import { AutoSizer } from "./AutoSizer";
+
+describe("AutoSizer", () => {
+ beforeEach(() => {
+ vi.resetAllMocks();
+ });
+
+ it("should call Child with undefined size values during the initial render", async () => {
+ const Child = vi.fn(() => null);
+ const onResize = vi.fn();
+
+ renderForTest( );
+
+ expect(Child).toHaveBeenCalledTimes(1);
+ expect(Child).toHaveBeenCalledWith({}, undefined);
+ expect(onResize).not.toHaveBeenCalled();
+ });
+
+ it("should pass Child width and height once mounted", async () => {
+ const Child = vi.fn(() => null);
+ const onResize = vi.fn();
+
+ const { container } = renderForTest(
+
+ );
+
+ expect(Child).toHaveBeenCalled();
+ expect(onResize).not.toHaveBeenCalled();
+
+ Child.mockReset();
+
+ await simulateResize({
+ element: container,
+ height: 100,
+ width: 200
+ });
+
+ expect(Child).toHaveBeenCalledTimes(1);
+ expect(Child).toHaveBeenCalledWith(
+ {
+ height: 100,
+ width: 200
+ },
+ undefined
+ );
+
+ expect(onResize).toHaveBeenCalledTimes(1);
+ expect(onResize).toHaveBeenCalledWith({
+ height: 100,
+ width: 200
+ });
+ });
+
+ describe("HTML", () => {
+ it("pass through additional attributes", () => {
+ const { container } = renderForTest(
+
+ );
+
+ const element = container.querySelector(
+ "[data-auto-sizer]"
+ ) as HTMLDivElement;
+ expect(element.className).toContain("foo");
+ expect(element.getAttribute("data-testid")).toEqual("test-id");
+ expect(element.getAttribute("id")).toEqual("auto-sizer");
+ expect(element.style.backgroundColor).toEqual("red");
+ });
+
+ it("should support a different tagName", () => {
+ const { container } = renderForTest(
+
+ );
+
+ const element = container.querySelector(
+ "[data-auto-sizer]"
+ ) as HTMLDivElement;
+ expect(element.tagName).toEqual("SPAN");
+ });
+ });
+});
diff --git a/lib/components/AutoSizer.tsx b/lib/components/AutoSizer.tsx
new file mode 100644
index 0000000..738c844
--- /dev/null
+++ b/lib/components/AutoSizer.tsx
@@ -0,0 +1,59 @@
+import { createElement, memo, useMemo, useState } from "react";
+import { useSize } from "../hooks/useSize";
+import type { Size } from "../types";
+import type { AutoSizerChildProps, AutoSizerProps } from "./types";
+
+/**
+ * Measures the available width and height of its parent `HTMLElement` and passes those values as `width` and `height` props to its `children`.
+ *
+ * ℹ️ This component began as a fork of the [javascript-detect-element-resize](https://www.npmjs.com/package/javascript-detect-element-resize) package.
+ */
+export function AutoSizer({
+ box = "content-box",
+ className,
+ Child,
+ "data-testid": dataTestId,
+ id,
+ nonce,
+ onResize,
+ style,
+ tagName: TagName = "div"
+}: AutoSizerProps) {
+ const [element, setElement] = useState(null);
+
+ const [height, setHeight] = useState();
+ const [width, setWidth] = useState();
+
+ useSize({
+ box,
+ nonce,
+ onResize: (nextSize: Size) => {
+ setHeight(nextSize.height);
+ setWidth(nextSize.width);
+
+ if (typeof onResize !== "undefined") {
+ onResize(nextSize);
+ }
+ },
+ rootElement: element
+ });
+
+ const MemoizedChild = useMemo(() => memo(Child ?? NoopChild), [Child]);
+
+ return createElement(
+ TagName,
+ {
+ className,
+ "data-auto-sizer": "",
+ "data-testid": dataTestId,
+ id,
+ ref: setElement,
+ style
+ },
+ createElement(MemoizedChild, { height, width })
+ );
+}
+
+function NoopChild(_: AutoSizerChildProps) {
+ return null;
+}
diff --git a/lib/components/types.ts b/lib/components/types.ts
new file mode 100644
index 0000000..dd26e10
--- /dev/null
+++ b/lib/components/types.ts
@@ -0,0 +1,79 @@
+import type { CSSProperties, FunctionComponent } from "react";
+
+/**
+ * Props definition for the `AutoSizer` component's `Child` prop.
+ */
+export type AutoSizerChildProps = {
+ height: number | undefined;
+ width: number | undefined;
+};
+
+export type AutoSizerBox =
+ | "border-box"
+ | "content-box"
+ | "device-pixel-content-box";
+
+/**
+ * Props definition to the `AutoSizer` component.
+ */
+export type AutoSizerProps = {
+ /**
+ * Corresponds to the `ResizeObserver` [box](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe#box) parameter.
+ * Sets which box model the observer will observe changes to.
+ *
+ * - `border-box`: Size of the box border area as defined in CSS.
+ * - `content-box`: Size of the content area as defined in CSS.
+ * - `device-pixel-content-box`: The size of the content area as defined in CSS, in device pixels, before applying any CSS transforms on the element or its ancestors.
+ */
+ box?: "border-box" | "content-box" | "device-pixel-content-box" | undefined;
+
+ /**
+ * Child component to be passed the available width and height values as props.
+ *
+ * ℹ️ Width and height are undefined during the during the initial render (including server-rendering).
+ */
+ Child:
+ | FunctionComponent<{
+ height: number | undefined;
+ width: number | undefined;
+ }>
+ | undefined;
+
+ /**
+ * Class name to be applied to the auto-sizer `HTMLElement`.
+ */
+ className?: string | undefined;
+
+ /**
+ * Test id attribute to interop with frameworks like [Testing Library](https://testing-library.com/docs/queries/bytestid/).
+ */
+ "data-testid"?: string | undefined;
+
+ /**
+ * Unique id attribute to attach to root DOM element.
+ */
+ id?: string | number | undefined;
+
+ /**
+ * [Nonce](https://www.w3.org/TR/2016/REC-CSP2-20161215/#script-src-the-nonce-attribute) used for inline `StyleSheet`
+ * in browsers/environments that do not support the `ResizeObserver` API.
+ */
+ nonce?: string | undefined;
+
+ /**
+ * Optional callback notified after a resize.
+ *
+ * @param size New width and height of parent element
+ */
+ onResize?: ((size: { height: number; width: number }) => void) | undefined;
+
+ /**
+ * Style properties to be applied to the auto-sizer `HTMLElement`.
+ */
+ style?: CSSProperties | undefined;
+
+ /**
+ * Optional HTML tag name for root HTMLElement; defaults to `"div"`.
+ */
+ tagName?: string | undefined;
+};
diff --git a/lib/hooks/useSize.ts b/lib/hooks/useSize.ts
new file mode 100644
index 0000000..e0c7266
--- /dev/null
+++ b/lib/hooks/useSize.ts
@@ -0,0 +1,153 @@
+import { useLayoutEffect, useRef } from "react";
+import type { Size } from "../types";
+import { createDetectElementResize } from "../vendor/detectElementResize";
+
+export function useSize({
+ box,
+ nonce,
+ onResize,
+ rootElement
+}: {
+ box: "border-box" | "content-box" | "device-pixel-content-box";
+ nonce: string | undefined;
+ onResize: (size: Size) => void;
+ rootElement: HTMLElement | null;
+}) {
+ const stableValuesRef = useRef<{
+ onResize: (size: Size) => void;
+ parentNode: HTMLElement | null;
+ prevSize:
+ | Size
+ | {
+ height: undefined;
+ width: undefined;
+ };
+ }>({
+ onResize,
+ parentNode: null,
+ prevSize: {
+ height: undefined,
+ width: undefined
+ }
+ });
+
+ useLayoutEffect(() => {
+ stableValuesRef.current.onResize = onResize;
+ });
+
+ const onResizeStableRef = useRef(() => {
+ const { onResize, parentNode, prevSize } = stableValuesRef.current;
+ if (parentNode === null) {
+ return;
+ }
+
+ let height: number;
+ let width: number;
+
+ switch (box) {
+ case "border-box": {
+ const rect = parentNode.getBoundingClientRect();
+
+ height = rect.height;
+ width = rect.width;
+ break;
+ }
+ case "content-box": {
+ const rect = parentNode.getBoundingClientRect();
+
+ // Guard against AutoSizer component being removed from the DOM immediately after being added.
+ // This can result in invalid style values which can result in NaN values if we don't handle them.
+ const style = window.getComputedStyle(parentNode) || {};
+ const borderBottomWidth = parseFloat(style.borderBottomWidth || "0");
+ const borderLeftWidth = parseFloat(style.borderLeftWidth || "0");
+ const borderRightWidth = parseFloat(style.borderRightWidth || "0");
+ const borderTopWidth = parseFloat(style.borderTopWidth || "0");
+ const paddingLeft = parseFloat(style.paddingLeft || "0");
+ const paddingRight = parseFloat(style.paddingRight || "0");
+ const paddingTop = parseFloat(style.paddingTop || "0");
+ const paddingBottom = parseFloat(style.paddingBottom || "0");
+
+ height =
+ rect.height -
+ paddingTop -
+ paddingBottom -
+ borderTopWidth -
+ borderBottomWidth;
+ width =
+ rect.width -
+ paddingLeft -
+ paddingRight -
+ borderLeftWidth -
+ borderRightWidth;
+ break;
+ }
+ case "device-pixel-content-box": {
+ height = parentNode.offsetHeight;
+ width = parentNode.offsetWidth;
+ break;
+ }
+ }
+
+ if (prevSize.height !== height || prevSize.width !== width) {
+ stableValuesRef.current.prevSize = { height, width };
+
+ onResize({
+ height,
+ width
+ });
+ }
+ });
+
+ useLayoutEffect(() => {
+ if (rootElement === null) {
+ return;
+ }
+
+ const parentNode = rootElement.parentNode;
+ if (
+ parentNode === null ||
+ parentNode.ownerDocument === null ||
+ parentNode.ownerDocument.defaultView === null ||
+ !(parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement)
+ ) {
+ return;
+ }
+
+ stableValuesRef.current.parentNode = parentNode;
+
+ const onResizeStable = onResizeStableRef.current;
+
+ // Use ResizeObserver from the same context where parentNode (which we will observe) was defined
+ // Using just global can result into onResize events not being emitted in cases with multiple realms
+ const ResizeObserver = parentNode.ownerDocument.defaultView.ResizeObserver;
+ if (ResizeObserver != null) {
+ let timeoutId: NodeJS.Timeout;
+
+ const resizeObserver = new ResizeObserver(() => {
+ // Guard against "ResizeObserver loop limit exceeded" error;
+ // could be triggered if the state update causes the ResizeObserver handler to run long.
+ // See github.com/bvaughn/react-virtualized-auto-sizer/issues/55
+ timeoutId = setTimeout(onResizeStable, 0);
+ });
+
+ resizeObserver.observe(parentNode);
+
+ return () => {
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+
+ resizeObserver.disconnect();
+ };
+ } else {
+ // Defer requiring resize handler in order to support server-side rendering.
+ // See github.com/bvaughn/react-virtualized-auto-sizer/issues/41
+ const detectElementResize = createDetectElementResize(nonce);
+ detectElementResize.addResizeListener(parentNode, onResizeStable);
+
+ return () => {
+ detectElementResize.removeResizeListener(parentNode, onResizeStable);
+ };
+ }
+ }, [nonce, rootElement]);
+}
diff --git a/lib/index.ts b/lib/index.ts
new file mode 100644
index 0000000..ba13e17
--- /dev/null
+++ b/lib/index.ts
@@ -0,0 +1,9 @@
+export { AutoSizer } from "./components/AutoSizer";
+
+export type {
+ AutoSizerProps,
+ AutoSizerBox,
+ AutoSizerChildProps
+} from "./components/types";
+
+export type { Size } from "./types";
diff --git a/lib/types.ts b/lib/types.ts
new file mode 100644
index 0000000..c08f4ca
--- /dev/null
+++ b/lib/types.ts
@@ -0,0 +1 @@
+export type Size = { height: number; width: number };
diff --git a/lib/utils/assert.ts b/lib/utils/assert.ts
new file mode 100644
index 0000000..9c70efc
--- /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/test/mockOffsetSize.ts b/lib/utils/test/mockOffsetSize.ts
new file mode 100644
index 0000000..0ce8c28
--- /dev/null
+++ b/lib/utils/test/mockOffsetSize.ts
@@ -0,0 +1,15 @@
+// AutoSizer uses measurements APIs that JSDOm doesn't support.
+export function mockOffsetSize(width: number, height: number) {
+ Object.defineProperty(HTMLElement.prototype, "getBoundingClientRect", {
+ configurable: true,
+ value: () => ({ height, width })
+ });
+ Object.defineProperty(HTMLElement.prototype, "offsetHeight", {
+ configurable: true,
+ value: height
+ });
+ Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
+ configurable: true,
+ value: width
+ });
+}
diff --git a/lib/utils/test/simulateResize.ts b/lib/utils/test/simulateResize.ts
new file mode 100644
index 0000000..5e942d6
--- /dev/null
+++ b/lib/utils/test/simulateResize.ts
@@ -0,0 +1,24 @@
+import { act } from "@testing-library/react";
+import { mockOffsetSize } from "./mockOffsetSize";
+
+export async function simulateResize({
+ element,
+ height,
+ width
+}: {
+ element: HTMLElement;
+ height: number;
+ width: number;
+}) {
+ mockOffsetSize(width, height);
+
+ await act(async () => {
+ // Trigger detectElementResize library by faking a scroll event
+ // TestUtils Simulate doesn't work here in JSDom so we manually dispatch
+ const trigger = element.querySelector(".contract-trigger");
+ trigger?.dispatchEvent(new Event("scroll"));
+
+ // Allow requestAnimationFrame to be invoked before continuing
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ });
+}
diff --git a/src/vendor/detectElementResize.d.ts b/lib/vendor/detectElementResize.d.ts
similarity index 100%
rename from src/vendor/detectElementResize.d.ts
rename to lib/vendor/detectElementResize.d.ts
diff --git a/src/vendor/detectElementResize.js b/lib/vendor/detectElementResize.js
similarity index 97%
rename from src/vendor/detectElementResize.js
rename to lib/vendor/detectElementResize.js
index 6e35d5a..b1d19ee 100644
--- a/src/vendor/detectElementResize.js
+++ b/lib/vendor/detectElementResize.js
@@ -15,10 +15,7 @@
let windowObject;
if (typeof window !== "undefined") {
windowObject = window;
-
- // eslint-disable-next-line no-restricted-globals
} else if (typeof self !== "undefined") {
- // eslint-disable-next-line no-restricted-globals
windowObject = self;
} else {
windowObject = global;
@@ -127,11 +124,11 @@ function createDetectElementResize(nonce) {
if (checkTriggers(element)) {
element.__resizeLast__.width = element.offsetWidth;
element.__resizeLast__.height = element.offsetHeight;
- element.__resizeListeners__.forEach(function forEachResizeListener(
- fn
- ) {
- fn.call(element, e);
- });
+ element.__resizeListeners__.forEach(
+ function forEachResizeListener(fn) {
+ fn.call(element, e);
+ }
+ );
}
});
};
@@ -278,7 +275,7 @@ function createDetectElementResize(nonce) {
return {
addResizeListener,
- removeResizeListener,
+ removeResizeListener
};
}
diff --git a/package.json b/package.json
index 8ca9969..a787c33 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,13 @@
{
"name": "react-virtualized-auto-sizer",
- "version": "1.0.26",
- "description": "Standalone version of the AutoSizer component from react-virtualized",
+ "version": "1.0.0-alpha.0",
+ "type": "module",
"author": "Brian Vaughn (https://github.com/bvaughn/)",
"contributors": [
"Brian Vaughn (https://github.com/bvaughn/)"
],
"license": "MIT",
+ "homepage": "http://react-virtualized-auto-sizer.now.sh/",
"repository": {
"type": "git",
"url": "https://github.com/bvaughn/react-virtualized-auto-sizer.git"
@@ -25,71 +26,104 @@
"grid",
"spreadsheet"
],
- "main": "dist/react-virtualized-auto-sizer.cjs.js",
- "module": "dist/react-virtualized-auto-sizer.esm.js",
- "exports": {
- ".": {
- "types": {
- "import": "./dist/react-virtualized-auto-sizer.cjs.mjs",
- "default": "./dist/react-virtualized-auto-sizer.cjs.js"
- },
- "module": "./dist/react-virtualized-auto-sizer.esm.js",
- "import": "./dist/react-virtualized-auto-sizer.cjs.mjs",
- "default": "./dist/react-virtualized-auto-sizer.cjs.js"
- },
- "./package.json": "./package.json"
- },
- "types": "dist/react-virtualized-auto-sizer.cjs.d.ts",
+ "main": "dist/react-virtualized-auto-sizer.cjs",
+ "module": "dist/react-virtualized-auto-sizer.js",
+ "types": "dist/react-virtualized-auto-sizer.d.ts",
"files": [
"dist"
],
"scripts": {
- "clear": "npm run clear:builds & npm run clear:node_modules",
- "clear:builds": "rm -rf ./dist",
- "clear:node_modules": "rm -rf ./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:code-snippets && pnpm run compile:docs",
+ "compile:code-snippets": "node --loader ts-node/esm ./scripts/compile-code-snippets.ts",
+ "compile:docs": "node --loader ts-node/esm ./scripts/compile-docs.ts",
+ "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}\"",
"prettier:ci": "prettier --check \"**/*.{css,html,js,json,jsx,ts,tsx}\"",
- "test": "jest",
- "test:watch": "jest --watch",
- "typescript": "tsc --noEmit",
- "typescript:watch": "tsc --noEmit --watch"
+ "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"
},
"lint-staged": {
- "{example,src}/**/*.{js,json,css}": [
- "prettier --write",
- "git add"
- ],
- "**/*.js": "eslint --max-warnings 0"
- },
- "devDependencies": {
- "@babel/core": "^7.21.4",
- "@babel/helper-create-class-features-plugin": "^7.21.4",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
- "@babel/preset-typescript": "^7.21.5",
- "@preconstruct/cli": "^2.8.1",
- "@types/jest": "^26.0.15",
- "@types/react": "^18",
- "@types/react-dom": "^18",
- "jest": "^29.5.0",
- "jest-environment-jsdom": "^29.5.0",
- "prettier": "^2.8.6",
- "react": "^18",
- "react-dom": "^18",
- "ts-jest": "^29.1.0",
- "typescript": "^4.1.2"
+ "**/*": "prettier --write --ignore-unknown"
},
"peerDependencies": {
- "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
},
- "preconstruct": {
- "exports": {
- "importConditionDefaultExport": "default"
- },
- "___experimentalFlags_WILL_CHANGE_IN_PATCH": {
- "importsConditions": 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-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",
+ "typescript": "~5.8.3",
+ "typescript-eslint": "^8.35.1",
+ "typescript-json-schema": "^0.65.1",
+ "vite": "^7.0.4",
+ "vitest-fail-on-console": "^0.10.1",
+ "vite-plugin-dts": "^4.5.4",
+ "vite-plugin-svgr": "^4.3.0",
+ "vitest": "^3.2.4",
+ "zustand": "^5.0.7"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b2516a7..ef4beac 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,3629 +1,6846 @@
-lockfileVersion: '6.0'
+lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
-devDependencies:
- '@babel/core':
- specifier: ^7.21.4
- version: 7.22.6
- '@babel/helper-create-class-features-plugin':
- specifier: ^7.21.4
- version: 7.22.6(@babel/core@7.22.6)
- '@babel/plugin-proposal-class-properties':
- specifier: ^7.18.6
- version: 7.18.6(@babel/core@7.22.6)
- '@babel/plugin-proposal-nullish-coalescing-operator':
- specifier: ^7.18.6
- version: 7.18.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.1
- version: 2.8.1
- '@types/jest':
- specifier: ^26.0.15
- version: 26.0.24
- '@types/react':
- specifier: ^18
- version: 18.2.14
- '@types/react-dom':
- specifier: ^18
- version: 18.2.6
- jest:
- specifier: ^29.5.0
- version: 29.5.0
- jest-environment-jsdom:
- specifier: ^29.5.0
- version: 29.5.0
- prettier:
- specifier: ^2.8.6
- version: 2.8.8
- react:
- specifier: ^18
- version: 18.2.0
- react-dom:
- specifier: ^18
- version: 18.2.0(react@18.2.0)
- ts-jest:
- specifier: ^29.1.0
- version: 29.1.1(@babel/core@7.22.6)(jest@29.5.0)(typescript@4.9.5)
- typescript:
- specifier: ^4.1.2
- version: 4.9.5
+importers:
+
+ .:
+ devDependencies:
+ '@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)(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: ^19.1.8
+ version: 19.2.7
+ '@types/react-dom':
+ 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)(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.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: ^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.6.2
+ version: 3.6.2
+ prettier-plugin-tailwindcss:
+ specifier: ^0.7.1
+ version: 0.7.1(prettier@3.6.2)
+ react:
+ 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: ^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-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)
+ typescript:
+ specifier: ~5.8.3
+ version: 5.8.3
+ typescript-eslint:
+ 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)(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)(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)(yaml@2.8.1))
+ vitest:
+ 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)(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)(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)(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))
+
+ integrations/vite:
+ dependencies:
+ react:
+ specifier: ^19.2.3
+ version: 19.2.3
+ react-dom:
+ specifier: ^19.2.3
+ version: 19.2.3(react@19.2.3)
+ react-router:
+ specifier: ^7
+ version: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react-virtualized-auto-sizer:
+ specifier: workspace:*
+ version: link:../..
+ devDependencies:
+ '@eslint/js':
+ specifier: ^9.25.0
+ version: 9.39.2
+ '@playwright/test':
+ specifier: ^1
+ version: 1.57.0
+ '@tailwindcss/vite':
+ specifier: ^4.1.17
+ version: 4.1.17(vite@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))
+ '@types/react':
+ specifier: ^19.1.2
+ version: 19.2.7
+ '@types/react-dom':
+ specifier: ^19.1.2
+ version: 19.2.3(@types/react@19.2.7)
+ '@vitejs/plugin-react':
+ specifier: ^4.4.1
+ version: 4.7.0(vite@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))
+ eslint:
+ specifier: ^9.25.0
+ 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.19
+ version: 0.4.26(eslint@9.39.2(jiti@2.6.1))
+ globals:
+ specifier: ^16.0.0
+ version: 16.5.0
+ tailwindcss:
+ specifier: ^4.1.17
+ version: 4.1.17
+ typescript:
+ specifier: ~5.8.3
+ version: 5.8.3
+ typescript-eslint:
+ specifier: ^8.30.1
+ version: 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ vite:
+ specifier: ^6.3.5
+ version: 6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)
packages:
- /@ampproject/remapping@2.2.1:
- resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
- dev: true
+ '@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==}
+ '@asamuzakjp/css-color@3.2.0':
+ resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/highlight': 7.22.5
- dev: true
- /@babel/compat-data@7.22.6:
- resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==}
+ '@babel/compat-data@7.28.4':
+ resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/core@7.22.6:
- resolution: {integrity: sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==}
+ '@babel/core@7.28.5':
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
engines: {node: '>=6.9.0'}
- 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.3.4
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/generator@7.22.5:
- resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==}
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
- jsesc: 2.5.2
- dev: true
- /@babel/helper-annotate-as-pure@7.22.5:
- resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-compilation-targets@7.22.6(@babel/core@7.22.6):
- resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==}
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- 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
- dev: true
- /@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.22.6):
- resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==}
+ '@babel/helper-module-transforms@7.28.3':
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- 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
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/helper-environment-visitor@7.22.5:
- resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-function-name@7.22.5:
- resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.22.5
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-hoist-variables@7.22.5:
- resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-member-expression-to-functions@7.22.5:
- resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==}
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-module-imports@7.22.5:
- resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-module-transforms@7.22.5:
- resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==}
- engines: {node: '>=6.9.0'}
- 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
- dev: true
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
- /@babel/helper-optimise-call-expression@7.22.5:
- resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- /@babel/helper-plugin-utils@7.22.5:
- resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
engines: {node: '>=6.9.0'}
- dev: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- /@babel/helper-replace-supers@7.22.5:
- resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==}
+ '@babel/runtime@7.28.3':
+ resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==}
engines: {node: '>=6.9.0'}
- 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
- dev: true
- /@babel/helper-simple-access@7.22.5:
- resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
- resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-split-export-declaration@7.22.6:
- resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
- /@babel/helper-string-parser@7.22.5:
- resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
- engines: {node: '>=6.9.0'}
- dev: true
+ '@codemirror/autocomplete@6.18.7':
+ resolution: {integrity: sha512-8EzdeIoWPJDsMBwz3zdzwXnUpCzMiCyz5/A3FIPpriaclFCGDkAzK13sMcnsu5rowqiyeQN2Vs2TsOcoDPZirQ==}
- /@babel/helper-validator-identifier@7.22.5:
- resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
- engines: {node: '>=6.9.0'}
- dev: true
+ '@codemirror/lang-css@6.3.1':
+ resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==}
- /@babel/helper-validator-option@7.22.5:
- resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
- engines: {node: '>=6.9.0'}
- dev: true
+ '@codemirror/lang-html@6.4.11':
+ resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==}
- /@babel/helpers@7.22.6:
- resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.22.5
- '@babel/traverse': 7.22.6
- '@babel/types': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@codemirror/lang-javascript@6.2.4':
+ resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==}
- /@babel/highlight@7.22.5:
- resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.22.5
- chalk: 2.4.2
- js-tokens: 4.0.0
- dev: true
+ '@codemirror/lang-markdown@6.5.0':
+ resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==}
- /@babel/parser@7.22.6:
- resolution: {integrity: sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==}
- engines: {node: '>=6.0.0'}
- hasBin: true
- dependencies:
- '@babel/types': 7.22.5
- dev: true
+ '@codemirror/language@6.11.3':
+ resolution: {integrity: sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==}
- /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.6):
- resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- 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
- dev: true
+ '@codemirror/lint@6.8.5':
+ resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==}
- /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.6):
- resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- 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)
- dev: true
+ '@codemirror/state@6.5.2':
+ resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==}
- /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.6):
- resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@codemirror/view@6.38.2':
+ resolution: {integrity: sha512-bTWAJxL6EOFLPzTx+O5P5xAO3gTqpatQ2b/ARQ8itfU/v2LlpS3pH2fkL0A3E/Fx8Y2St2KES7ZEV0sHTsSW/A==}
- /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.6):
- resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
- /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.6):
- resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@csstools/color-helpers@5.1.0':
+ resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
+ engines: {node: '>=18'}
- /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.6):
- resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
+ engines: {node: '>=18'}
peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.6):
- resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ '@csstools/css-color-parser@3.1.0':
+ resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
+ engines: {node: '>=18'}
peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.6):
- resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
- 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
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@csstools/css-tokenizer': ^3.0.4
- /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.6):
- resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
+ engines: {node: '>=18'}
- /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.6):
- resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ '@csstools/postcss-oklab-function@4.0.11':
+ resolution: {integrity: sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig==}
+ engines: {node: '>=18'}
peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ postcss: ^8.4
- /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.6):
- resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ '@csstools/postcss-progressive-custom-properties@4.2.0':
+ resolution: {integrity: sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA==}
+ engines: {node: '>=18'}
peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ postcss: ^8.4
- /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.6):
- resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ '@csstools/utilities@2.0.0':
+ resolution: {integrity: sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==}
+ engines: {node: '>=18'}
peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ postcss: ^8.4
+
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.27.2':
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.27.2':
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.2':
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.2':
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
- /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.6):
- resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@esbuild/darwin-arm64@0.27.2':
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
- /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.6):
- resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
- /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.6):
- resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ '@esbuild/darwin-x64@0.27.2':
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
- /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.6):
- resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.2':
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.27.2':
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.2':
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.2':
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.2':
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.2':
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.2':
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.2':
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.2':
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.2':
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.2':
+ resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.2':
+ resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.27.2':
+ resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.27.2':
+ resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.2':
+ resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.2':
+ resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@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
- dependencies:
- '@babel/core': 7.22.6
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.6):
- resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.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
- dev: true
+ '@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-typescript@7.22.5(@babel/core@7.22.6):
- resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- 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
- dev: true
+ '@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/preset-typescript@7.22.5(@babel/core@7.22.6):
- resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- 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
- dev: true
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@babel/runtime@7.22.6:
- resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==}
- engines: {node: '>=6.9.0'}
- dependencies:
- regenerator-runtime: 0.13.11
- dev: true
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@babel/template@7.22.5:
- resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.22.5
- '@babel/parser': 7.22.6
- '@babel/types': 7.22.5
- dev: true
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@babel/traverse@7.22.6:
- resolution: {integrity: sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==}
- engines: {node: '>=6.9.0'}
- 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.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@eslint/js@9.39.2':
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@babel/types@7.22.5:
- resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.22.5
- '@babel/helper-validator-identifier': 7.22.5
- to-fast-properties: 2.0.0
- dev: true
+ '@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}
- /@bcoe/v8-coverage@0.2.3:
- resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
- dev: true
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@istanbuljs/load-nyc-config@1.1.0:
- resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
- engines: {node: '>=8'}
- dependencies:
- camelcase: 5.3.1
- find-up: 4.1.0
- get-package-type: 0.1.0
- js-yaml: 3.14.1
- resolve-from: 5.0.0
- dev: true
+ '@floating-ui/core@1.7.3':
+ resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
- /@istanbuljs/schema@0.1.3:
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
- dev: true
+ '@floating-ui/dom@1.7.4':
+ resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
- /@jest/console@29.5.0:
- resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- chalk: 4.1.2
- jest-message-util: 29.5.0
- jest-util: 29.5.0
- slash: 3.0.0
- dev: true
+ '@floating-ui/react-dom@2.1.6':
+ resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
- /@jest/core@29.5.0:
- resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@floating-ui/react@0.26.28':
+ resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==}
peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
- dependencies:
- '@jest/console': 29.5.0
- '@jest/reporters': 29.5.0
- '@jest/test-result': 29.5.0
- '@jest/transform': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- ci-info: 3.8.0
- exit: 0.1.2
- graceful-fs: 4.2.11
- jest-changed-files: 29.5.0
- jest-config: 29.5.0(@types/node@20.3.3)
- jest-haste-map: 29.5.0
- jest-message-util: 29.5.0
- jest-regex-util: 29.4.3
- jest-resolve: 29.5.0
- jest-resolve-dependencies: 29.5.0
- jest-runner: 29.5.0
- jest-runtime: 29.5.0
- jest-snapshot: 29.5.0
- jest-util: 29.5.0
- jest-validate: 29.5.0
- jest-watcher: 29.5.0
- micromatch: 4.0.5
- pretty-format: 29.5.0
- slash: 3.0.0
- strip-ansi: 6.0.1
- transitivePeerDependencies:
- - supports-color
- - ts-node
- dev: true
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
- /@jest/environment@29.5.0:
- resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/fake-timers': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- jest-mock: 29.5.0
- dev: true
+ '@floating-ui/utils@0.2.10':
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
- /@jest/expect-utils@29.5.0:
- resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- jest-get-type: 29.4.3
- dev: true
+ '@headlessui/react@2.2.9':
+ resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^18 || ^19 || ^19.0.0-rc
- /@jest/expect@29.5.0:
- resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- expect: 29.5.0
- jest-snapshot: 29.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@jest/fake-timers@29.5.0:
- resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.5.0
- '@sinonjs/fake-timers': 10.3.0
- '@types/node': 20.3.3
- jest-message-util: 29.5.0
- jest-mock: 29.5.0
- jest-util: 29.5.0
- dev: true
-
- /@jest/globals@29.5.0:
- resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.5.0
- '@jest/expect': 29.5.0
- '@jest/types': 29.5.0
- jest-mock: 29.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@headlessui/tailwindcss@0.2.2':
+ resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ tailwindcss: ^3.0 || ^4.0
- /@jest/reporters@29.5.0:
- resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@heroicons/react@2.2.0':
+ resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==}
peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
- dependencies:
- '@bcoe/v8-coverage': 0.2.3
- '@jest/console': 29.5.0
- '@jest/test-result': 29.5.0
- '@jest/transform': 29.5.0
- '@jest/types': 29.5.0
- '@jridgewell/trace-mapping': 0.3.18
- '@types/node': 20.3.3
- chalk: 4.1.2
- collect-v8-coverage: 1.0.1
- exit: 0.1.2
- glob: 7.2.3
- graceful-fs: 4.2.11
- istanbul-lib-coverage: 3.2.0
- istanbul-lib-instrument: 5.2.1
- istanbul-lib-report: 3.0.0
- istanbul-lib-source-maps: 4.0.1
- istanbul-reports: 3.1.5
- jest-message-util: 29.5.0
- jest-util: 29.5.0
- jest-worker: 29.5.0
- slash: 3.0.0
- string-length: 4.0.2
- strip-ansi: 6.0.1
- v8-to-istanbul: 9.1.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ react: '>= 16 || ^19.0.0-rc'
- /@jest/schemas@29.4.3:
- resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@sinclair/typebox': 0.25.24
- dev: true
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
- /@jest/source-map@29.4.3:
- resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jridgewell/trace-mapping': 0.3.18
- callsites: 3.1.0
- graceful-fs: 4.2.11
- dev: true
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
- /@jest/test-result@29.5.0:
- resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/console': 29.5.0
- '@jest/types': 29.5.0
- '@types/istanbul-lib-coverage': 2.0.4
- collect-v8-coverage: 1.0.1
- dev: true
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
- /@jest/test-sequencer@29.5.0:
- resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/test-result': 29.5.0
- graceful-fs: 4.2.11
- jest-haste-map: 29.5.0
- slash: 3.0.0
- dev: true
-
- /@jest/transform@29.5.0:
- resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/core': 7.22.6
- '@jest/types': 29.5.0
- '@jridgewell/trace-mapping': 0.3.18
- babel-plugin-istanbul: 6.1.1
- chalk: 4.1.2
- convert-source-map: 2.0.0
- fast-json-stable-stringify: 2.1.0
- graceful-fs: 4.2.11
- jest-haste-map: 29.5.0
- jest-regex-util: 29.4.3
- jest-util: 29.5.0
- micromatch: 4.0.5
- pirates: 4.0.6
- slash: 3.0.0
- write-file-atomic: 4.0.2
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
- /@jest/types@26.6.2:
- resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==}
- engines: {node: '>= 10.14.2'}
- dependencies:
- '@types/istanbul-lib-coverage': 2.0.4
- '@types/istanbul-reports': 3.0.1
- '@types/node': 20.3.3
- '@types/yargs': 15.0.15
- chalk: 4.1.2
- dev: true
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
- /@jest/types@29.5.0:
- resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/schemas': 29.4.3
- '@types/istanbul-lib-coverage': 2.0.4
- '@types/istanbul-reports': 3.0.1
- '@types/node': 20.3.3
- '@types/yargs': 17.0.24
- chalk: 4.1.2
- dev: true
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
- /@jridgewell/gen-mapping@0.3.3:
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.18
- dev: true
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
- /@jridgewell/resolve-uri@3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
- engines: {node: '>=6.0.0'}
- dev: true
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- dev: true
- /@jridgewell/source-map@0.3.5:
- resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
- dev: true
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: true
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- /@jridgewell/sourcemap-codec@1.4.15:
- resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
+ '@jridgewell/trace-mapping@0.3.30':
+ resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
- /@jridgewell/trace-mapping@0.3.18:
- resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: true
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@lezer/common@1.2.3':
+ resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
+
+ '@lezer/css@1.3.0':
+ resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==}
+
+ '@lezer/highlight@1.2.1':
+ resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
+
+ '@lezer/html@1.3.12':
+ resolution: {integrity: sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==}
+
+ '@lezer/javascript@1.5.2':
+ resolution: {integrity: sha512-oJDMyptbtS/zhSi/uOszsqCm7/0l6QpbnvjoXBgNiFlk4NHrqoP/+psiVxYKYe9GHRr6K7jBSxwmIW61TrtZOQ==}
+
+ '@lezer/lr@1.4.2':
+ resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==}
+
+ '@lezer/markdown@1.6.1':
+ resolution: {integrity: sha512-72ah+Sml7lD8Wn7lnz9vwYmZBo9aQT+I2gjK/0epI+gjdwUbWw3MJ/ZBGEqG1UfrIauRqH37/c5mVHXeCTGXtA==}
- /@nicolo-ribaudo/semver-v6@6.3.3:
- resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==}
+ '@marijn/find-cluster-break@1.0.2':
+ resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
+
+ '@microsoft/api-extractor-model@7.30.7':
+ resolution: {integrity: sha512-TBbmSI2/BHpfR9YhQA7nH0nqVmGgJ0xH0Ex4D99/qBDAUpnhA2oikGmdXanbw9AWWY/ExBYIpkmY8dBHdla3YQ==}
+
+ '@microsoft/api-extractor@7.52.13':
+ resolution: {integrity: sha512-K6/bBt8zZfn9yc06gNvA+/NlBGJC/iJlObpdufXHEJtqcD4Dln4ITCLZpwP3DNZ5NyBFeTkKdv596go3V72qlA==}
hasBin: true
- dev: true
- /@nodelib/fs.scandir@2.1.5:
+ '@microsoft/tsdoc-config@0.17.1':
+ resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==}
+
+ '@microsoft/tsdoc@0.15.1':
+ resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
+
+ '@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
- dev: true
- /@nodelib/fs.stat@2.0.5:
+ '@nodelib/fs.stat@2.0.5':
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
- dev: true
- /@nodelib/fs.walk@1.2.8:
+ '@nodelib/fs.walk@1.2.8':
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.15.0
- dev: true
- /@preconstruct/cli@2.8.1:
- resolution: {integrity: sha512-PX5w+au06iY/QaT+9RLmRlIfavRCRoMTC/krwtNrgPEnubR9e6P+QlywrKmwiEvkzbR9AEzGnRZL8uNRDDMzrQ==}
+ '@playwright/test@1.57.0':
+ resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==}
+ engines: {node: '>=18'}
hasBin: true
- 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
- 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.0
- fs-extra: 9.1.0
- is-ci: 2.0.0
- is-reference: 1.2.1
- jest-worker: 26.6.2
- magic-string: 0.30.1
- meow: 7.1.1
- 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: 1.22.2
- resolve-from: 5.0.0
- rollup: 2.79.1
- semver: 7.5.3
- terser: 5.18.2
- v8-compile-cache: 2.3.0
- zod: 3.21.4
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@preconstruct/hook@0.4.0:
- resolution: {integrity: sha512-a7mrlPTM3tAFJyz43qb4pPVpUx8j8TzZBFsNFqcKcE/sEakNXRlQAuCT4RGZRf9dQiiUnBahzSIWawU4rENl+Q==}
- 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
- dev: true
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
- /@rollup/plugin-alias@3.1.9(rollup@2.79.1):
- resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==}
- engines: {node: '>=8.0.0'}
+ '@react-aria/focus@3.21.2':
+ resolution: {integrity: sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==}
peerDependencies:
- rollup: ^1.20.0||^2.0.0
- dependencies:
- rollup: 2.79.1
- slash: 3.0.0
- dev: true
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
+ react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- /@rollup/plugin-commonjs@15.1.0(rollup@2.79.1):
- resolution: {integrity: sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==}
- engines: {node: '>= 8.0.0'}
+ '@react-aria/interactions@3.25.6':
+ resolution: {integrity: sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==}
peerDependencies:
- rollup: ^2.22.0
- 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.2
- rollup: 2.79.1
- dev: true
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
+ react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- /@rollup/plugin-json@4.1.0(rollup@2.79.1):
- resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==}
+ '@react-aria/ssr@3.9.10':
+ resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==}
+ engines: {node: '>= 12'}
peerDependencies:
- rollup: ^1.20.0 || ^2.0.0
- dependencies:
- '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
- rollup: 2.79.1
- dev: true
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1):
- resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==}
- engines: {node: '>= 10.0.0'}
+ '@react-aria/utils@3.31.0':
+ resolution: {integrity: sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==}
peerDependencies:
- rollup: ^1.20.0||^2.0.0
- 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.2
- rollup: 2.79.1
- dev: true
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
+ react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
+
+ '@react-stately/flags@3.1.2':
+ resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==}
- /@rollup/plugin-replace@2.4.2(rollup@2.79.1):
- resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
+ '@react-stately/utils@3.10.8':
+ resolution: {integrity: sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==}
peerDependencies:
- rollup: ^1.20.0 || ^2.0.0
- dependencies:
- '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
- magic-string: 0.25.9
- rollup: 2.79.1
- dev: true
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- /@rollup/pluginutils@3.1.0(rollup@2.79.1):
- resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
- engines: {node: '>= 8.0.0'}
+ '@react-types/shared@3.32.1':
+ resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==}
peerDependencies:
- rollup: ^1.20.0||^2.0.0
- dependencies:
- '@types/estree': 0.0.39
- estree-walker: 1.0.1
- picomatch: 2.3.1
- rollup: 2.79.1
- dev: true
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
- /@sinclair/typebox@0.25.24:
- resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==}
- dev: true
+ '@rolldown/pluginutils@1.0.0-beta.27':
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
- /@sinonjs/commons@3.0.0:
- resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==}
- dependencies:
- type-detect: 4.0.8
- dev: true
+ '@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
- /@sinonjs/fake-timers@10.3.0:
- resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
- dependencies:
- '@sinonjs/commons': 3.0.0
- dev: true
+ '@rollup/rollup-android-arm-eabi@4.49.0':
+ resolution: {integrity: sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==}
+ cpu: [arm]
+ os: [android]
- /@tootallnate/once@2.0.0:
- resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
- engines: {node: '>= 10'}
- dev: true
+ '@rollup/rollup-android-arm64@4.49.0':
+ resolution: {integrity: sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==}
+ cpu: [arm64]
+ os: [android]
- /@types/babel__core@7.20.1:
- resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==}
- dependencies:
- '@babel/parser': 7.22.6
- '@babel/types': 7.22.5
- '@types/babel__generator': 7.6.4
- '@types/babel__template': 7.4.1
- '@types/babel__traverse': 7.20.1
- dev: true
+ '@rollup/rollup-darwin-arm64@4.49.0':
+ resolution: {integrity: sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==}
+ cpu: [arm64]
+ os: [darwin]
- /@types/babel__generator@7.6.4:
- resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
+ '@rollup/rollup-darwin-x64@4.49.0':
+ resolution: {integrity: sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==}
+ cpu: [x64]
+ os: [darwin]
- /@types/babel__template@7.4.1:
- resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
- dependencies:
- '@babel/parser': 7.22.6
- '@babel/types': 7.22.5
- dev: true
+ '@rollup/rollup-freebsd-arm64@4.49.0':
+ resolution: {integrity: sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.49.0':
+ resolution: {integrity: sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.49.0':
+ resolution: {integrity: sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.49.0':
+ resolution: {integrity: sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.49.0':
+ resolution: {integrity: sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.49.0':
+ resolution: {integrity: sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.49.0':
+ resolution: {integrity: sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.49.0':
+ resolution: {integrity: sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.49.0':
+ resolution: {integrity: sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.49.0':
+ resolution: {integrity: sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.49.0':
+ resolution: {integrity: sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.49.0':
+ resolution: {integrity: sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.49.0':
+ resolution: {integrity: sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.49.0':
+ resolution: {integrity: sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.49.0':
+ resolution: {integrity: sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.49.0':
+ resolution: {integrity: sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rushstack/node-core-library@5.14.0':
+ resolution: {integrity: sha512-eRong84/rwQUlATGFW3TMTYVyqL1vfW9Lf10PH+mVGfIb9HzU3h5AASNIw+axnBLjnD0n3rT5uQBwu9fvzATrg==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- /@types/babel__traverse@7.20.1:
- resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
+ '@rushstack/rig-package@0.5.3':
+ resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==}
- /@types/estree@0.0.39:
- resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
- dev: true
+ '@rushstack/terminal@0.16.0':
+ resolution: {integrity: sha512-WEvNuKkoR1PXorr9SxO0dqFdSp1BA+xzDrIm/Bwlc5YHg2FFg6oS+uCTYjerOhFuqCW+A3vKBm6EmKWSHfgx/A==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- /@types/estree@1.0.1:
- resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
- dev: true
+ '@rushstack/ts-command-line@5.0.3':
+ resolution: {integrity: sha512-bgPhQEqLVv/2hwKLYv/XvsTWNZ9B/+X1zJ7WgQE9rO5oiLzrOZvkIW4pk13yOQBhHyjcND5qMOa6p83t+Z66iQ==}
- /@types/graceful-fs@4.1.6:
- resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
- dependencies:
- '@types/node': 20.3.3
- dev: true
+ '@sindresorhus/merge-streams@2.3.0':
+ resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
+ engines: {node: '>=18'}
- /@types/istanbul-lib-coverage@2.0.4:
- resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
- dev: true
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-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
+
+ '@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
+
+ '@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
+
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0':
+ resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@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
+
+ '@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
+
+ '@svgr/babel-plugin-transform-svg-component@8.0.0':
+ resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-preset@8.1.0':
+ resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/core@8.1.0':
+ resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
+ engines: {node: '>=14'}
+
+ '@svgr/hast-util-to-babel-ast@8.0.0':
+ resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
+ engines: {node: '>=14'}
+
+ '@svgr/plugin-jsx@8.1.0':
+ resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@svgr/core': '*'
+
+ '@swc/core-darwin-arm64@1.13.5':
+ resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@swc/core-darwin-x64@1.13.5':
+ resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@swc/core-linux-arm-gnueabihf@1.13.5':
+ resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@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]
+
+ '@swc/core-linux-arm64-musl@1.13.5':
+ resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-x64-gnu@1.13.5':
+ resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-linux-x64-musl@1.13.5':
+ resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-win32-arm64-msvc@1.13.5':
+ resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@swc/core-win32-ia32-msvc@1.13.5':
+ resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@swc/core-win32-x64-msvc@1.13.5':
+ resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core@1.13.5':
+ resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.17'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@swc/types@0.1.25':
+ resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
+
+ '@tailwindcss/node@4.1.17':
+ resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
+
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@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]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.1.17':
+ resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
+ engines: {node: '>= 10'}
+
+ '@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/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/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/express-serve-static-core@5.1.0':
+ resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==}
+
+ '@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/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/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.7':
+ resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
+
+ '@types/send@0.17.6':
+ resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
+
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+ '@types/serve-static@1.15.10':
+ resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
+
+ '@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.50.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@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.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.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.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.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.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.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.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.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}
+
+ '@vitejs/plugin-react-swc@3.11.0':
+ resolution: {integrity: sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==}
+ peerDependencies:
+ vite: ^4 || ^5 || ^6 || ^7
+
+ '@vitejs/plugin-react@4.7.0':
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+
+ '@vitest/mocker@3.2.4':
+ resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+
+ '@vitest/runner@3.2.4':
+ resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+
+ '@vitest/snapshot@3.2.4':
+ resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+
+ '@volar/language-core@2.4.23':
+ resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
+
+ '@volar/source-map@2.4.23':
+ resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==}
+
+ '@volar/typescript@2.4.23':
+ resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
+
+ '@vue/compiler-core@3.5.22':
+ resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
+
+ '@vue/compiler-dom@3.5.22':
+ resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
+
+ '@vue/compiler-vue2@2.7.16':
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+ '@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==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ 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==}
+
+ 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.2.0:
+ resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ body-parser@2.2.0:
+ resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+ engines: {node: '>=18'}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ 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==}
+
+ 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==}
+ engines: {node: '>=8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ 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'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ caniuse-lite@1.0.30001739:
+ resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==}
+
+ 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'}
+
+ 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'}
+
+ 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.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ 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==}
+
+ 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==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ confbox@0.2.2:
+ resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+
+ 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'}
+
+ css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+
+ cssstyle@4.6.0:
+ resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
+ engines: {node: '>=18'}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ data-urls@5.0.0:
+ resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
+ engines: {node: '>=18'}
+
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ 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'}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ 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==}
+
+ 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'}
+
+ 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-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.27.2:
+ resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-plugin-react-hooks@5.2.0:
+ resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ 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-refresh@0.4.26:
+ resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==}
+ peerDependencies:
+ eslint: '>=8.40'
+
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ 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:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ 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'}
+
+ 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-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ fill-range@7.1.1:
+ 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'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
+ fs-extra@11.3.1:
+ resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==}
+ engines: {node: '>=14.14'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-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==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
+ engines: {node: '>=18'}
+
+ globby@14.1.0:
+ resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==}
+ engines: {node: '>=18'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ html-encoding-sniffer@4.0.0:
+ resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
+ engines: {node: '>=18'}
+
+ 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@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.1:
+ 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.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ 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-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ 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-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ 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-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-potential-custom-element-name@1.0.1:
+ resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ 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-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsdom@26.1.0:
+ resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ canvas: ^3.0.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ 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@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
+ 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]
+
+ lightningcss@1.30.2:
+ resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ engines: {node: '>= 12.0.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.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-update@6.1.0:
+ resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+ engines: {node: '>=18'}
+
+ 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==}
+
+ 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==}
+
+ 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==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@3.0.1:
+ resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+ engines: {node: '>= 0.6'}
+
+ 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:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ 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}
+ hasBin: true
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ negotiator@0.6.4:
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-releases@2.0.20:
+ resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==}
+
+ nwsapi@2.2.22:
+ resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ 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'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ 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'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-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.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
+ playwright-core@1.57.0:
+ resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.57.0:
+ resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ 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-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.6.2:
+ resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ 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'}
+
+ 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'}
+
+ 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==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@3.0.0:
+ resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
+ engines: {node: '>= 0.8'}
+
+ react-docgen-typescript@2.4.0:
+ resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+
+ react-dom@19.2.3:
+ resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==}
+ peerDependencies:
+ react: ^19.2.3
+
+ react-error-boundary@6.0.0:
+ resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==}
+ peerDependencies:
+ react: '>=16.13.1'
+
+ react-is@17.0.2:
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react-router-dom@7.10.1:
+ resolution: {integrity: sha512-JNBANI6ChGVjA5bwsUIwJk7LHKmqB4JYnYfzFwyp2t12Izva11elds2jx7Yfoup2zssedntwU0oZ5DEmk5Sdaw==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+
+ 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
+
+ react@19.2.3:
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
+
+ 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'}
+
+ 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@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ 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.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-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ saxes@6.0.0:
+ resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
+ engines: {node: '>=v12.22.7'}
+
+ 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.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@1.2.0:
+ resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+ engines: {node: '>= 18'}
+
+ 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==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ 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:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ 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==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ 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@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-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'}
+
+ 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==}
+
+ 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==}
+
+ 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
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@4.0.3:
+ resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
+ engines: {node: '>=14.0.0'}
+
+ 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'}
+
+ 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'}
+
+ 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==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
+ 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==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
+ 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
+
+ uc.micro@2.1.0:
+ resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+
+ ufo@1.6.1:
+ resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
+ unicorn-magic@0.3.0:
+ resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
+ engines: {node: '>=18'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ 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'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ 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
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ 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-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@6.4.1:
+ resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ jiti: '>=1.21.0'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vite@7.3.0:
+ resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest-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.2.4
+ '@vitest/ui': 3.2.4
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ vscode-uri@3.1.0:
+ resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
+ w3c-xmlserializer@5.0.0:
+ resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
+ engines: {node: '>=18'}
+
+ webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+
+ whatwg-encoding@3.1.1:
+ resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+ engines: {node: '>=18'}
+
+ whatwg-mimetype@4.0.0:
+ resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+ engines: {node: '>=18'}
+
+ 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==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ ws@8.18.3:
+ resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ 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'}
+
+ 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:
+
+ '@adobe/css-tools@4.4.4': {}
+
+ '@asamuzakjp/css-color@3.2.0':
+ dependencies:
+ '@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/code-frame@7.27.1':
+ dependencies:
+ '@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.28.5':
+ dependencies:
+ '@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-compilation-targets@7.27.2':
+ dependencies:
+ '@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-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
+ dependencies:
+ '@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-plugin-utils@7.27.1': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+
+ '@babel/parser@7.28.5':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/runtime@7.28.3': {}
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@babel/traverse@7.28.5':
+ dependencies:
+ '@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/types@7.28.5':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@codemirror/autocomplete@6.18.7':
+ dependencies:
+ '@codemirror/language': 6.11.3
+ '@codemirror/state': 6.5.2
+ '@codemirror/view': 6.38.2
+ '@lezer/common': 1.2.3
+
+ '@codemirror/lang-css@6.3.1':
+ dependencies:
+ '@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
+
+ '@codemirror/lang-html@6.4.11':
+ dependencies:
+ '@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
+
+ '@codemirror/lang-javascript@6.2.4':
+ dependencies:
+ '@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
+
+ '@codemirror/lang-markdown@6.5.0':
+ dependencies:
+ '@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
+
+ '@codemirror/language@6.11.3':
+ dependencies:
+ '@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
+
+ '@codemirror/lint@6.8.5':
+ dependencies:
+ '@codemirror/state': 6.5.2
+ '@codemirror/view': 6.38.2
+ crelt: 1.0.6
+
+ '@codemirror/state@6.5.2':
+ dependencies:
+ '@marijn/find-cluster-break': 1.0.2
+
+ '@codemirror/view@6.38.2':
+ dependencies:
+ '@codemirror/state': 6.5.2
+ crelt: 1.0.6
+ style-mod: 4.1.2
+ w3c-keyname: 2.2.8
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@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)':
+ dependencies:
+ '@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)':
+ dependencies:
+ '@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
+
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-tokenizer@3.0.4': {}
+
+ '@csstools/postcss-oklab-function@4.0.11(postcss@8.5.6)':
+ dependencies:
+ '@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
+
+ '@csstools/postcss-progressive-custom-properties@4.2.0(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/utilities@2.0.0(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm@0.27.2':
+ optional: true
+
+ '@esbuild/android-x64@0.25.12':
+ optional: true
+
+ '@esbuild/android-x64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.2':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.8.0(eslint@9.39.2(jiti@2.6.1))':
+ dependencies:
+ eslint: 9.39.2(jiti@2.6.1)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/config-array@0.21.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.1
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ 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
+
+ '@eslint/js@9.39.2': {}
+
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
+
+ '@floating-ui/core@1.7.3':
+ dependencies:
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/dom@1.7.4':
+ dependencies:
+ '@floating-ui/core': 1.7.3
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@floating-ui/dom': 1.7.4
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@floating-ui/react@0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@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
+
+ '@floating-ui/utils@0.2.10': {}
+
+ '@headlessui/react@2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@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)
+
+ '@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.17)':
+ dependencies:
+ tailwindcss: 4.1.17
+
+ '@heroicons/react@2.2.0(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.7':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.30
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.30
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.30
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.30':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@lezer/common@1.2.3': {}
+
+ '@lezer/css@1.3.0':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/highlight@1.2.1':
+ dependencies:
+ '@lezer/common': 1.2.3
+
+ '@lezer/html@1.3.12':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/javascript@1.5.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/lr@1.4.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+
+ '@lezer/markdown@1.6.1':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+
+ '@marijn/find-cluster-break@1.0.2': {}
+
+ '@microsoft/api-extractor-model@7.30.7(@types/node@24.10.4)':
+ dependencies:
+ '@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'
+
+ '@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'
+
+ '@microsoft/tsdoc-config@0.17.1':
+ dependencies:
+ '@microsoft/tsdoc': 0.15.1
+ ajv: 8.12.0
+ jju: 1.4.0
+ resolve: 1.22.10
+
+ '@microsoft/tsdoc@0.15.1': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@playwright/test@1.57.0':
+ dependencies:
+ playwright: 1.57.0
+
+ '@polka/url@1.0.0-next.29': {}
+
+ '@react-aria/focus@3.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@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)
+
+ '@react-aria/interactions@3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@react-aria/ssr': 3.9.10(react@19.2.3)
+ '@react-aria/utils': 3.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)
+
+ '@react-aria/ssr@3.9.10(react@19.2.3)':
+ dependencies:
+ '@swc/helpers': 0.5.17
+ react: 19.2.3
+
+ '@react-aria/utils@3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@react-aria/ssr': 3.9.10(react@19.2.3)
+ '@react-stately/flags': 3.1.2
+ '@react-stately/utils': 3.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)
+
+ '@react-stately/flags@3.1.2':
+ dependencies:
+ '@swc/helpers': 0.5.17
+
+ '@react-stately/utils@3.10.8(react@19.2.3)':
+ dependencies:
+ '@swc/helpers': 0.5.17
+ react: 19.2.3
+
+ '@react-types/shared@3.32.1(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
+
+ '@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
+
+ '@rollup/rollup-android-arm-eabi@4.49.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.49.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.49.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.49.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.49.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.49.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.49.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.49.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.49.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.49.0':
+ optional: true
+
+ '@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
- /@types/istanbul-lib-report@3.0.0:
- resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
+ '@rushstack/rig-package@0.5.3':
dependencies:
- '@types/istanbul-lib-coverage': 2.0.4
- dev: true
+ resolve: 1.22.10
+ strip-json-comments: 3.1.1
+
+ '@rushstack/terminal@0.16.0(@types/node@24.10.4)':
+ dependencies:
+ '@rushstack/node-core-library': 5.14.0(@types/node@24.10.4)
+ supports-color: 8.1.1
+ optionalDependencies:
+ '@types/node': 24.10.4
+
+ '@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'
+
+ '@sindresorhus/merge-streams@2.3.0': {}
+
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
- /@types/istanbul-reports@3.0.1:
- resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==}
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@types/istanbul-lib-report': 3.0.0
- dev: true
+ '@babel/core': 7.28.5
- /@types/jest@26.0.24:
- resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==}
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.5)':
dependencies:
- jest-diff: 26.6.2
- pretty-format: 26.6.2
- dev: true
+ '@babel/core': 7.28.5
- /@types/jsdom@20.0.1:
- resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
+ '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@types/node': 20.3.3
- '@types/tough-cookie': 4.0.2
- parse5: 7.1.2
- dev: true
+ '@babel/core': 7.28.5
- /@types/minimist@1.2.2:
- resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
- dev: true
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
- /@types/node@20.3.3:
- resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==}
- dev: true
+ '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
- /@types/normalize-package-data@2.4.1:
- resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
- dev: true
+ '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
- /@types/prettier@2.7.3:
- resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==}
- dev: true
+ '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
- /@types/prop-types@15.7.5:
- resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
- dev: true
+ '@svgr/babel-preset@8.1.0(@babel/core@7.28.5)':
+ dependencies:
+ '@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)
- /@types/react-dom@18.2.6:
- resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==}
+ '@svgr/core@8.1.0(typescript@5.8.3)':
dependencies:
- '@types/react': 18.2.14
- dev: true
+ '@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
- /@types/react@18.2.14:
- resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==}
+ '@svgr/hast-util-to-babel-ast@8.0.0':
dependencies:
- '@types/prop-types': 15.7.5
- '@types/scheduler': 0.16.3
- csstype: 3.1.2
- dev: true
+ '@babel/types': 7.28.5
+ entities: 4.5.0
- /@types/resolve@1.17.1:
- resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
+ '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))':
dependencies:
- '@types/node': 20.3.3
- dev: true
+ '@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
+
+ '@swc/core-darwin-x64@1.13.5':
+ optional: true
+
+ '@swc/core-linux-arm-gnueabihf@1.13.5':
+ optional: true
+
+ '@swc/core-linux-arm64-gnu@1.13.5':
+ optional: true
- /@types/scheduler@0.16.3:
- resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
- dev: true
+ '@swc/core-linux-arm64-musl@1.13.5':
+ optional: true
+
+ '@swc/core-linux-x64-gnu@1.13.5':
+ optional: true
+
+ '@swc/core-linux-x64-musl@1.13.5':
+ optional: true
- /@types/stack-utils@2.0.1:
- resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
- dev: true
+ '@swc/core-win32-arm64-msvc@1.13.5':
+ optional: true
- /@types/tough-cookie@4.0.2:
- resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==}
- dev: true
+ '@swc/core-win32-ia32-msvc@1.13.5':
+ optional: true
- /@types/yargs-parser@21.0.0:
- resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
- dev: true
+ '@swc/core-win32-x64-msvc@1.13.5':
+ optional: true
- /@types/yargs@15.0.15:
- resolution: {integrity: sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==}
+ '@swc/core@1.13.5(@swc/helpers@0.5.17)':
dependencies:
- '@types/yargs-parser': 21.0.0
- dev: true
+ '@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': {}
- /@types/yargs@17.0.24:
- resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==}
+ '@swc/helpers@0.5.17':
dependencies:
- '@types/yargs-parser': 21.0.0
- dev: true
+ tslib: 2.8.1
- /abab@2.0.6:
- resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
- dev: true
+ '@swc/types@0.1.25':
+ dependencies:
+ '@swc/counter': 0.1.3
- /acorn-globals@7.0.1:
- resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
+ '@tailwindcss/node@4.1.17':
dependencies:
- acorn: 8.9.0
- acorn-walk: 8.2.0
- dev: true
+ '@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
- /acorn-walk@8.2.0:
- resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
- engines: {node: '>=0.4.0'}
- dev: true
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ optional: true
- /acorn@8.9.0:
- resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==}
- engines: {node: '>=0.4.0'}
- hasBin: true
- dev: true
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ optional: true
- /agent-base@6.0.2:
- resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
- engines: {node: '>= 6.0.0'}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ optional: true
+
+ '@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@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))':
+ dependencies:
+ '@tailwindcss/node': 4.1.17
+ '@tailwindcss/oxide': 4.1.17
+ tailwindcss: 4.1.17
+ vite: 6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)
+
+ '@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)(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)(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:
- debug: 4.3.4
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@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)
- /ansi-colors@4.1.3:
- resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
- engines: {node: '>=6'}
- dev: true
+ '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)':
+ dependencies:
+ '@testing-library/dom': 10.4.1
- /ansi-escapes@4.3.2:
- resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
- engines: {node: '>=8'}
+ '@ts-ast-parser/comment@0.2.0':
dependencies:
- type-fest: 0.21.3
- dev: true
+ tslib: 2.8.1
- /ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
- dev: true
+ '@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
- /ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
+ '@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/babel__core@7.20.5':
dependencies:
- color-convert: 1.9.3
- dev: true
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
- /ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
+ '@types/babel__generator@7.27.0':
dependencies:
- color-convert: 2.0.1
- dev: true
+ '@babel/types': 7.28.5
- /ansi-styles@5.2.0:
- resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
- engines: {node: '>=10'}
- dev: true
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
- /anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
+ '@types/babel__traverse@7.28.0':
dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
- dev: true
+ '@babel/types': 7.28.5
- /argparse@1.0.10:
- resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+ '@types/body-parser@1.19.6':
dependencies:
- sprintf-js: 1.0.3
- dev: true
+ '@types/connect': 3.4.38
+ '@types/node': 24.10.4
- /arrify@1.0.1:
- resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ '@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
- /asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- dev: true
+ '@types/deep-eql@4.0.2': {}
- /at-least-node@1.0.0:
- resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
- engines: {node: '>= 4.0.0'}
- dev: true
+ '@types/estree@1.0.8': {}
- /babel-jest@29.5.0(@babel/core@7.22.6):
- resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- peerDependencies:
- '@babel/core': ^7.8.0
+ '@types/express-serve-static-core@5.1.0':
dependencies:
- '@babel/core': 7.22.6
- '@jest/transform': 29.5.0
- '@types/babel__core': 7.20.1
- babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 29.5.0(@babel/core@7.22.6)
- chalk: 4.1.2
- graceful-fs: 4.2.11
- slash: 3.0.0
+ '@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/http-errors@2.0.5': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@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/react-dom@19.2.3(@types/react@19.2.7)':
+ dependencies:
+ '@types/react': 19.2.7
+
+ '@types/react@19.2.7':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/send@0.17.6':
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 24.10.4
+
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 24.10.4
+
+ '@types/serve-static@1.15.10':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 24.10.4
+ '@types/send': 0.17.6
+
+ '@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.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)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- dev: true
- /babel-plugin-istanbul@6.1.1:
- resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
- engines: {node: '>=8'}
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
- '@babel/helper-plugin-utils': 7.22.5
- '@istanbuljs/load-nyc-config': 1.1.0
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-instrument: 5.2.1
- test-exclude: 6.0.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.39.2(jiti@2.6.1)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- dev: true
- /babel-plugin-jest-hoist@29.5.0:
- resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@typescript-eslint/project-service@8.50.0(typescript@5.8.3)':
dependencies:
- '@babel/template': 7.22.5
- '@babel/types': 7.22.5
- '@types/babel__core': 7.20.1
- '@types/babel__traverse': 7.20.1
- dev: true
+ '@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
- /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.6):
- resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@typescript-eslint/scope-manager@8.50.0':
dependencies:
- '@babel/core': 7.22.6
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.6)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.6)
- '@babel/plugin-syntax-class-properties': 7.12.13(@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-top-level-await': 7.14.5(@babel/core@7.22.6)
- dev: true
-
- /babel-preset-jest@29.5.0(@babel/core@7.22.6):
- resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
+
+ '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.8.3)':
dependencies:
- '@babel/core': 7.22.6
- babel-plugin-jest-hoist: 29.5.0
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.6)
- dev: true
+ typescript: 5.8.3
- /balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: true
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
+ dependencies:
+ '@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.39.2(jiti@2.6.1)
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
- /brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ '@typescript-eslint/types@8.50.0': {}
+
+ '@typescript-eslint/typescript-estree@8.50.0(typescript@5.8.3)':
dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
- dev: true
+ '@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
+ minimatch: 9.0.5
+ 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
- /braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
- fill-range: 7.0.1
- dev: true
+ '@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
- /browserslist@4.21.9:
- resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
+ '@typescript-eslint/visitor-keys@8.50.0':
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)
- dev: true
+ '@typescript-eslint/types': 8.50.0
+ eslint-visitor-keys: 4.2.1
- /bs-logger@0.2.6:
- resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
- engines: {node: '>= 6'}
+ '@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)(yaml@2.8.1))':
dependencies:
- fast-json-stable-stringify: 2.1.0
- dev: true
+ '@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)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@swc/helpers'
+
+ '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1))':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5)
+ '@rolldown/pluginutils': 1.0.0-beta.27
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - supports-color
- /bser@2.1.1:
- resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+ '@vitest/expect@3.2.4':
dependencies:
- node-int64: 0.4.0
- dev: true
+ '@types/chai': 5.2.2
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
- /buffer-from@1.1.2:
- resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- dev: true
+ '@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)(yaml@2.8.1))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)
- /builtin-modules@3.3.0:
- resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
- engines: {node: '>=6'}
- dev: true
+ '@vitest/pretty-format@3.2.4':
+ dependencies:
+ tinyrainbow: 2.0.0
- /callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
- dev: true
+ '@vitest/runner@3.2.4':
+ dependencies:
+ '@vitest/utils': 3.2.4
+ pathe: 2.0.3
+ strip-literal: 3.0.0
- /camelcase-keys@6.2.2:
- resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
- engines: {node: '>=8'}
+ '@vitest/snapshot@3.2.4':
dependencies:
- camelcase: 5.3.1
- map-obj: 4.3.0
- quick-lru: 4.0.1
- dev: true
+ '@vitest/pretty-format': 3.2.4
+ magic-string: 0.30.21
+ pathe: 2.0.3
- /camelcase@5.3.1:
- resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
- engines: {node: '>=6'}
- dev: true
+ '@vitest/spy@3.2.4':
+ dependencies:
+ tinyspy: 4.0.3
- /camelcase@6.3.0:
- resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
- engines: {node: '>=10'}
- dev: true
+ '@vitest/utils@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
+ '@volar/language-core@2.4.23':
+ dependencies:
+ '@volar/source-map': 2.4.23
- /caniuse-lite@1.0.30001512:
- resolution: {integrity: sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==}
- dev: true
+ '@volar/source-map@2.4.23': {}
- /chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
+ '@volar/typescript@2.4.23':
dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
- dev: true
+ '@volar/language-core': 2.4.23
+ path-browserify: 1.0.1
+ vscode-uri: 3.1.0
- /chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
+ '@vue/compiler-core@3.5.22':
dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
- dev: true
+ '@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
- /char-regex@1.0.2:
- resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
- engines: {node: '>=10'}
- dev: true
+ '@vue/compiler-dom@3.5.22':
+ dependencies:
+ '@vue/compiler-core': 3.5.22
+ '@vue/shared': 3.5.22
- /ci-info@2.0.0:
- resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
- dev: true
+ '@vue/compiler-vue2@2.7.16':
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
- /ci-info@3.8.0:
- resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
- engines: {node: '>=8'}
- dev: true
+ '@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
- /cjs-module-lexer@1.2.3:
- resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
- dev: true
+ '@vue/shared@3.5.22': {}
- /cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
+ accepts@2.0.0:
dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
- dev: true
+ mime-types: 3.0.1
+ negotiator: 1.0.0
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
- /co@4.6.0:
- resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
- engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
- dev: true
+ agent-base@7.1.4: {}
+
+ ajv-draft-04@1.0.0(ajv@8.13.0):
+ optionalDependencies:
+ ajv: 8.13.0
- /collect-v8-coverage@1.0.1:
- resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==}
- dev: true
+ ajv-formats@3.0.1(ajv@8.13.0):
+ optionalDependencies:
+ ajv: 8.13.0
- /color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ ajv@6.12.6:
dependencies:
- color-name: 1.1.3
- dev: true
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
- /color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
+ ajv@8.12.0:
dependencies:
- color-name: 1.1.4
- dev: true
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
- /color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
- dev: true
+ ajv@8.13.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
- /color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- dev: true
+ alien-signals@0.4.14: {}
- /combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
+ ansi-escapes@7.1.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.0: {}
+
+ ansi-styles@4.3.0:
dependencies:
- delayed-stream: 1.0.0
- dev: true
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ ansi-styles@6.2.1: {}
+
+ arg@4.1.3: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
- /commander@2.20.3:
- resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- dev: true
+ aria-query@5.3.0:
+ dependencies:
+ dequal: 2.0.3
- /commondir@1.0.1:
- resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
- dev: true
+ aria-query@5.3.2: {}
- /concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- dev: true
+ assertion-error@2.0.1: {}
- /convert-source-map@1.9.0:
- resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
- dev: true
+ balanced-match@1.0.2: {}
- /convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- dev: true
+ body-parser@2.2.0:
+ dependencies:
+ 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
- /cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
+ brace-expansion@1.1.12:
dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
- dev: true
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
- /cssom@0.3.8:
- resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
- dev: true
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
- /cssom@0.5.0:
- resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
- dev: true
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
- /cssstyle@2.3.0:
- resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
- engines: {node: '>=8'}
+ browserslist@4.25.4:
dependencies:
- cssom: 0.3.8
- dev: true
+ 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)
- /csstype@3.1.2:
- resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
- dev: true
+ buffer-from@1.1.2: {}
- /data-urls@3.0.2:
- resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
- engines: {node: '>=12'}
- dependencies:
- abab: 2.0.6
- whatwg-mimetype: 3.0.0
- whatwg-url: 11.0.0
- dev: true
+ bytes@3.1.2: {}
- /dataloader@2.2.2:
- resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==}
- dev: true
+ cac@6.7.14: {}
- /debug@4.3.4:
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
+ call-bind-apply-helpers@1.0.2:
dependencies:
- ms: 2.1.2
- dev: true
+ es-errors: 1.3.0
+ function-bind: 1.1.2
- /decamelize-keys@1.1.1:
- resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
- engines: {node: '>=0.10.0'}
+ call-bound@1.0.4:
dependencies:
- decamelize: 1.2.0
- map-obj: 1.0.1
- dev: true
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
- /decamelize@1.2.0:
- resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ callsites@3.1.0: {}
- /decimal.js@10.4.3:
- resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
- dev: true
+ camelcase@6.3.0: {}
- /dedent@0.7.0:
- resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
- dev: true
+ caniuse-lite@1.0.30001739: {}
- /deepmerge@4.3.1:
- resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
- engines: {node: '>=0.10.0'}
- dev: true
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
- /delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
- dev: true
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
- /detect-indent@6.1.0:
- resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
- engines: {node: '>=8'}
- dev: true
+ chalk@5.6.0: {}
- /detect-newline@3.1.0:
- resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
- engines: {node: '>=8'}
- dev: true
+ check-error@2.1.1: {}
- /diff-sequences@26.6.2:
- resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==}
- engines: {node: '>= 10.14.2'}
- dev: true
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
- /diff-sequences@29.4.3:
- resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
- /domexception@4.0.0:
- resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
- engines: {node: '>=12'}
+ cliui@8.0.1:
dependencies:
- webidl-conversions: 7.0.0
- dev: true
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
- /electron-to-chromium@1.4.449:
- resolution: {integrity: sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==}
- dev: true
+ clsx@2.1.1: {}
- /emittery@0.13.1:
- resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
- engines: {node: '>=12'}
- dev: true
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
- /emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- dev: true
+ color-name@1.1.4: {}
- /enquirer@2.3.6:
- resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
- engines: {node: '>=8.6'}
- dependencies:
- ansi-colors: 4.1.3
- dev: true
+ colorette@2.0.20: {}
- /entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
- dev: true
+ commander@14.0.0: {}
- /error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ commander@2.20.3: {}
+
+ compare-versions@6.1.1: {}
+
+ compressible@2.0.18:
dependencies:
- is-arrayish: 0.2.1
- dev: true
+ mime-db: 1.54.0
- /escalade@3.1.1:
- resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
- engines: {node: '>=6'}
- dev: true
+ 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
- /escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
- dev: true
+ concat-map@0.0.1: {}
- /escape-string-regexp@2.0.0:
- resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
- engines: {node: '>=8'}
- dev: true
+ confbox@0.1.8: {}
- /escodegen@2.1.0:
- resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
- engines: {node: '>=6.0'}
- hasBin: true
+ confbox@0.2.2: {}
+
+ content-disposition@1.0.0:
dependencies:
- esprima: 4.0.1
- estraverse: 5.3.0
- esutils: 2.0.3
- optionalDependencies:
- source-map: 0.6.1
- dev: true
+ safe-buffer: 5.2.1
- /esprima@4.0.1:
- resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
+ content-type@1.0.5: {}
- /estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
- dev: true
+ convert-source-map@2.0.0: {}
- /estree-walker@1.0.1:
- resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
- dev: true
+ cookie-signature@1.2.2: {}
- /estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
+ cookie@0.7.2: {}
- /esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
- dev: true
+ cookie@1.0.2: {}
- /execa@5.1.1:
- resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
- engines: {node: '>=10'}
+ cosmiconfig@8.3.6(typescript@5.8.3):
dependencies:
- cross-spawn: 7.0.3
- get-stream: 6.0.1
- human-signals: 2.1.0
- is-stream: 2.0.1
- merge-stream: 2.0.0
- npm-run-path: 4.0.1
- onetime: 5.1.2
- signal-exit: 3.0.7
- strip-final-newline: 2.0.0
- dev: true
-
- /exit@0.1.2:
- resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
- engines: {node: '>= 0.8.0'}
- dev: 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
- /expect@29.5.0:
- resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/expect-utils': 29.5.0
- jest-get-type: 29.4.3
- jest-matcher-utils: 29.5.0
- jest-message-util: 29.5.0
- jest-util: 29.5.0
- dev: true
+ create-require@1.1.1: {}
- /fast-deep-equal@2.0.1:
- resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==}
- dev: true
+ crelt@1.0.6: {}
- /fast-glob@3.3.0:
- resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==}
- engines: {node: '>=8.6.0'}
+ cross-spawn@7.0.6:
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.5
- dev: true
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
- /fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- dev: true
+ css.escape@1.5.1: {}
- /fastq@1.15.0:
- resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+ cssstyle@4.6.0:
dependencies:
- reusify: 1.0.4
- dev: true
+ '@asamuzakjp/css-color': 3.2.0
+ rrweb-cssom: 0.8.0
- /fb-watchman@2.0.2:
- resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
- dependencies:
- bser: 2.1.1
- dev: true
+ csstype@3.2.3: {}
- /fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
+ data-urls@5.0.0:
dependencies:
- to-regex-range: 5.0.1
- dev: true
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.2.0
- /find-up@4.1.0:
- resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
- engines: {node: '>=8'}
- dependencies:
- locate-path: 5.0.0
- path-exists: 4.0.0
- dev: true
+ de-indent@1.0.2: {}
- /form-data@4.0.0:
- resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
- engines: {node: '>= 6'}
+ debug@2.6.9:
dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- mime-types: 2.1.35
- dev: true
+ ms: 2.0.0
- /fs-extra@9.1.0:
- resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
- engines: {node: '>=10'}
+ debug@4.4.1:
dependencies:
- at-least-node: 1.0.0
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
+ ms: 2.1.3
- /fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- dev: true
+ decimal.js@10.6.0: {}
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
+ deep-eql@5.0.2: {}
- /function-bind@1.1.1:
- resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
- dev: true
+ deep-is@0.1.4: {}
- /gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
- dev: true
+ define-lazy-prop@2.0.0: {}
- /get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
- dev: true
+ depd@2.0.0: {}
- /get-package-type@0.1.0:
- resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
- engines: {node: '>=8.0.0'}
- dev: true
+ dequal@2.0.3: {}
- /get-stream@6.0.1:
- resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
- engines: {node: '>=10'}
- dev: true
+ detect-libc@2.1.2: {}
- /glob-base@0.3.0:
- resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==}
- engines: {node: '>=0.10.0'}
- dependencies:
- glob-parent: 2.0.0
- is-glob: 2.0.1
- dev: true
+ diff@4.0.2: {}
- /glob-parent@2.0.0:
- resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==}
- dependencies:
- is-glob: 2.0.1
- dev: true
+ dom-accessibility-api@0.5.16: {}
- /glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
+ dom-accessibility-api@0.6.3: {}
+
+ dot-case@3.0.4:
dependencies:
- is-glob: 4.0.3
- dev: true
+ no-case: 3.0.4
+ tslib: 2.8.1
- /glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dunder-proto@1.0.1:
dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
- dev: true
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
- /globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
- dev: true
+ ee-first@1.1.1: {}
- /graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- dev: true
+ electron-to-chromium@1.5.214: {}
- /hard-rejection@2.1.0:
- resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
- engines: {node: '>=6'}
- dev: true
+ emoji-regex@10.5.0: {}
- /has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
- dev: true
+ emoji-regex@8.0.0: {}
- /has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
- dev: true
+ encodeurl@2.0.0: {}
- /has@1.0.3:
- resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
- engines: {node: '>= 0.4.0'}
+ enhanced-resolve@5.18.3:
dependencies:
- function-bind: 1.1.1
- dev: true
+ graceful-fs: 4.2.11
+ tapable: 2.2.3
- /hosted-git-info@2.8.9:
- resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
- dev: true
+ entities@4.5.0: {}
- /html-encoding-sniffer@3.0.0:
- resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
- engines: {node: '>=12'}
- dependencies:
- whatwg-encoding: 2.0.0
- dev: true
+ entities@6.0.1: {}
- /html-escaper@2.0.2:
- resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
- dev: true
+ environment@1.1.0: {}
- /http-proxy-agent@5.0.0:
- resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
- engines: {node: '>= 6'}
+ error-ex@1.3.2:
dependencies:
- '@tootallnate/once': 2.0.0
- agent-base: 6.0.2
- debug: 4.3.4
- transitivePeerDependencies:
- - supports-color
- dev: true
+ is-arrayish: 0.2.1
- /https-proxy-agent@5.0.1:
- resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
- engines: {node: '>= 6'}
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ es-object-atoms@1.1.1:
dependencies:
- agent-base: 6.0.2
- debug: 4.3.4
+ es-errors: 1.3.0
+
+ esbuild@0.25.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
+ esbuild@0.27.2:
+ optionalDependencies:
+ '@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: {}
+
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.6.1)):
+ dependencies:
+ eslint: 9.39.2(jiti@2.6.1)
+
+ eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)):
+ dependencies:
+ eslint: 9.39.2(jiti@2.6.1)
+
+ eslint-scope@8.4.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.39.2(jiti@2.6.1):
+ dependencies:
+ '@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.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.1
+ '@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.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.1
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.6.1
transitivePeerDependencies:
- supports-color
- dev: true
- /human-signals@2.1.0:
- resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
- engines: {node: '>=10.17.0'}
- dev: true
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
- /iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
+ esquery@1.6.0:
dependencies:
- safer-buffer: 2.1.2
- dev: true
+ estraverse: 5.3.0
- /ignore-walk@3.0.4:
- resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==}
+ esrecurse@4.3.0:
dependencies:
- minimatch: 3.1.2
- dev: true
+ estraverse: 5.3.0
- /import-local@3.1.0:
- resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
- engines: {node: '>=8'}
- hasBin: true
+ estraverse@5.3.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
dependencies:
- pkg-dir: 4.2.0
- resolve-cwd: 3.0.0
- dev: true
+ '@types/estree': 1.0.8
- /imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
- dev: true
+ esutils@2.0.3: {}
- /indent-string@4.0.0:
- resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
- engines: {node: '>=8'}
- dev: true
+ etag@1.8.1: {}
- /inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ eventemitter3@5.0.1: {}
+
+ expect-type@1.2.2: {}
+
+ express@5.1.0:
dependencies:
+ 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
- wrappy: 1.0.2
- dev: true
+ 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
- /inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- dev: true
+ exsolve@1.0.7: {}
- /is-arrayish@0.2.1:
- resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- dev: true
+ fast-deep-equal@3.1.3: {}
- /is-ci@2.0.0:
- resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
- hasBin: true
+ fast-glob@3.3.3:
dependencies:
- ci-info: 2.0.0
- dev: true
+ '@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
- /is-core-module@2.12.1:
- resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
- dependencies:
- has: 1.0.3
- dev: true
+ fast-json-stable-stringify@2.1.0: {}
- /is-dotfile@1.0.3:
- resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ fast-levenshtein@2.0.6: {}
- /is-extglob@1.0.0:
- resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==}
- engines: {node: '>=0.10.0'}
- dev: true
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
- /is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
- dev: true
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
- /is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
- dev: true
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
- /is-generator-fn@2.1.0:
- resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
- engines: {node: '>=6'}
- dev: true
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
- /is-glob@2.0.1:
- resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==}
- engines: {node: '>=0.10.0'}
+ finalhandler@2.1.0:
dependencies:
- is-extglob: 1.0.0
- dev: true
+ 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
- /is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
+ find-up@5.0.0:
dependencies:
- is-extglob: 2.1.1
- dev: true
+ locate-path: 6.0.0
+ path-exists: 4.0.0
- /is-module@1.0.0:
- resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
- dev: true
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
- /is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
- dev: true
+ flatted@3.3.3: {}
- /is-plain-obj@1.1.0:
- resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ forwarded@0.2.0: {}
- /is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
- dev: true
+ fresh@2.0.0: {}
- /is-reference@1.2.1:
- resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+ fs-extra@11.3.1:
dependencies:
- '@types/estree': 1.0.1
- dev: true
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
- /is-stream@2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
- dev: true
+ fs.realpath@1.0.0: {}
- /isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- dev: true
+ fsevents@2.3.2:
+ optional: true
- /istanbul-lib-coverage@3.2.0:
- resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
- engines: {node: '>=8'}
- dev: true
+ fsevents@2.3.3:
+ optional: true
- /istanbul-lib-instrument@5.2.1:
- resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
- engines: {node: '>=8'}
- dependencies:
- '@babel/core': 7.22.6
- '@babel/parser': 7.22.6
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-coverage: 3.2.0
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ function-bind@1.1.2: {}
- /istanbul-lib-report@3.0.0:
- resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==}
- engines: {node: '>=8'}
- dependencies:
- istanbul-lib-coverage: 3.2.0
- make-dir: 3.1.0
- supports-color: 7.2.0
- dev: true
+ gensync@1.0.0-beta.2: {}
- /istanbul-lib-source-maps@4.0.1:
- resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
- engines: {node: '>=10'}
- dependencies:
- debug: 4.3.4
- istanbul-lib-coverage: 3.2.0
- source-map: 0.6.1
- transitivePeerDependencies:
- - supports-color
- dev: true
+ get-caller-file@2.0.5: {}
- /istanbul-reports@3.1.5:
- resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==}
- engines: {node: '>=8'}
+ get-east-asian-width@1.4.0: {}
+
+ get-intrinsic@1.3.0:
dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.0
- dev: true
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
- /jest-changed-files@29.5.0:
- resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ get-proto@1.0.1:
dependencies:
- execa: 5.1.1
- p-limit: 3.1.0
- dev: true
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
- /jest-circus@29.5.0:
- resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ glob-parent@5.1.2:
dependencies:
- '@jest/environment': 29.5.0
- '@jest/expect': 29.5.0
- '@jest/test-result': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- chalk: 4.1.2
- co: 4.6.0
- dedent: 0.7.0
- is-generator-fn: 2.1.0
- jest-each: 29.5.0
- jest-matcher-utils: 29.5.0
- jest-message-util: 29.5.0
- jest-runtime: 29.5.0
- jest-snapshot: 29.5.0
- jest-util: 29.5.0
- p-limit: 3.1.0
- pretty-format: 29.5.0
- pure-rand: 6.0.2
- slash: 3.0.0
- stack-utils: 2.0.6
- transitivePeerDependencies:
- - supports-color
- dev: true
+ is-glob: 4.0.3
- /jest-cli@29.5.0:
- resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- hasBin: true
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
+ glob-parent@6.0.2:
dependencies:
- '@jest/core': 29.5.0
- '@jest/test-result': 29.5.0
- '@jest/types': 29.5.0
- chalk: 4.1.2
- exit: 0.1.2
- graceful-fs: 4.2.11
- import-local: 3.1.0
- jest-config: 29.5.0(@types/node@20.3.3)
- jest-util: 29.5.0
- jest-validate: 29.5.0
- prompts: 2.4.2
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - supports-color
- - ts-node
- dev: true
+ is-glob: 4.0.3
- /jest-config@29.5.0(@types/node@20.3.3):
- resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- peerDependencies:
- '@types/node': '*'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- '@types/node':
- optional: true
- ts-node:
- optional: true
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ globals@14.0.0: {}
+
+ globals@16.5.0: {}
+
+ globby@14.1.0:
dependencies:
- '@babel/core': 7.22.6
- '@jest/test-sequencer': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- babel-jest: 29.5.0(@babel/core@7.22.6)
- chalk: 4.1.2
- ci-info: 3.8.0
- deepmerge: 4.3.1
- glob: 7.2.3
- graceful-fs: 4.2.11
- jest-circus: 29.5.0
- jest-environment-node: 29.5.0
- jest-get-type: 29.4.3
- jest-regex-util: 29.4.3
- jest-resolve: 29.5.0
- jest-runner: 29.5.0
- jest-util: 29.5.0
- jest-validate: 29.5.0
- micromatch: 4.0.5
- parse-json: 5.2.0
- pretty-format: 29.5.0
- slash: 3.0.0
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@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: {}
+
+ graceful-fs@4.2.11: {}
- /jest-diff@26.6.2:
- resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==}
- engines: {node: '>= 10.14.2'}
+ has-flag@4.0.0: {}
+
+ has-symbols@1.1.0: {}
+
+ hasown@2.0.2:
dependencies:
- chalk: 4.1.2
- diff-sequences: 26.6.2
- jest-get-type: 26.3.0
- pretty-format: 26.6.2
- dev: true
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
- /jest-diff@29.5.0:
- resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ html-encoding-sniffer@4.0.0:
dependencies:
- chalk: 4.1.2
- diff-sequences: 29.4.3
- jest-get-type: 29.4.3
- pretty-format: 29.5.0
- dev: true
+ whatwg-encoding: 3.1.1
- /jest-docblock@29.4.3:
- resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ http-errors@2.0.0:
dependencies:
- detect-newline: 3.1.0
- dev: true
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
- /jest-each@29.5.0:
- resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ http-proxy-agent@7.0.2:
dependencies:
- '@jest/types': 29.5.0
- chalk: 4.1.2
- jest-get-type: 29.4.3
- jest-util: 29.5.0
- pretty-format: 29.5.0
- dev: true
+ agent-base: 7.1.4
+ debug: 4.4.1
+ transitivePeerDependencies:
+ - supports-color
- /jest-environment-jsdom@29.5.0:
- resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- peerDependencies:
- canvas: ^2.5.0
- peerDependenciesMeta:
- canvas:
- optional: true
+ https-proxy-agent@7.0.6:
dependencies:
- '@jest/environment': 29.5.0
- '@jest/fake-timers': 29.5.0
- '@jest/types': 29.5.0
- '@types/jsdom': 20.0.1
- '@types/node': 20.3.3
- jest-mock: 29.5.0
- jest-util: 29.5.0
- jsdom: 20.0.3
+ agent-base: 7.1.4
+ debug: 4.4.1
transitivePeerDependencies:
- - bufferutil
- supports-color
- - utf-8-validate
- dev: true
-
- /jest-environment-node@29.5.0:
- resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.5.0
- '@jest/fake-timers': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- jest-mock: 29.5.0
- jest-util: 29.5.0
- dev: true
-
- /jest-get-type@26.3.0:
- resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==}
- engines: {node: '>= 10.14.2'}
- dev: true
-
- /jest-get-type@29.4.3:
- resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
-
- /jest-haste-map@29.5.0:
- resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.5.0
- '@types/graceful-fs': 4.1.6
- '@types/node': 20.3.3
- anymatch: 3.1.3
- fb-watchman: 2.0.2
- graceful-fs: 4.2.11
- jest-regex-util: 29.4.3
- jest-util: 29.5.0
- jest-worker: 29.5.0
- micromatch: 4.0.5
- walker: 1.0.8
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
- /jest-leak-detector@29.5.0:
- resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ husky@9.1.7: {}
+
+ iconv-lite@0.6.3:
dependencies:
- jest-get-type: 29.4.3
- pretty-format: 29.5.0
- dev: true
+ safer-buffer: 2.1.2
- /jest-matcher-utils@29.5.0:
- resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ ignore@5.3.2: {}
+
+ ignore@7.0.5: {}
+
+ import-fresh@3.3.1:
dependencies:
- chalk: 4.1.2
- jest-diff: 29.5.0
- jest-get-type: 29.4.3
- pretty-format: 29.5.0
- dev: true
-
- /jest-message-util@29.5.0:
- resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/code-frame': 7.22.5
- '@jest/types': 29.5.0
- '@types/stack-utils': 2.0.1
- chalk: 4.1.2
- graceful-fs: 4.2.11
- micromatch: 4.0.5
- pretty-format: 29.5.0
- slash: 3.0.0
- stack-utils: 2.0.6
- dev: true
-
- /jest-mock@29.5.0:
- resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- jest-util: 29.5.0
- dev: true
-
- /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0):
- resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
- engines: {node: '>=6'}
- peerDependencies:
- jest-resolve: '*'
- peerDependenciesMeta:
- jest-resolve:
- optional: true
+ 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:
- jest-resolve: 29.5.0
- dev: true
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
- /jest-regex-util@29.4.3:
- resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
+ ipaddr.js@1.9.1: {}
- /jest-resolve-dependencies@29.5.0:
- resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ is-arrayish@0.2.1: {}
+
+ is-core-module@2.16.1:
dependencies:
- jest-regex-util: 29.4.3
- jest-snapshot: 29.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
+ hasown: 2.0.2
+
+ is-docker@2.2.1: {}
- /jest-resolve@29.5.0:
- resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.1.0:
dependencies:
- chalk: 4.1.2
- graceful-fs: 4.2.11
- jest-haste-map: 29.5.0
- jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0)
- jest-util: 29.5.0
- jest-validate: 29.5.0
- resolve: 1.22.2
- resolve.exports: 2.0.2
- slash: 3.0.0
- dev: true
-
- /jest-runner@29.5.0:
- resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/console': 29.5.0
- '@jest/environment': 29.5.0
- '@jest/test-result': 29.5.0
- '@jest/transform': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- chalk: 4.1.2
- emittery: 0.13.1
- graceful-fs: 4.2.11
- jest-docblock: 29.4.3
- jest-environment-node: 29.5.0
- jest-haste-map: 29.5.0
- jest-leak-detector: 29.5.0
- jest-message-util: 29.5.0
- jest-resolve: 29.5.0
- jest-runtime: 29.5.0
- jest-util: 29.5.0
- jest-watcher: 29.5.0
- jest-worker: 29.5.0
- p-limit: 3.1.0
- source-map-support: 0.5.13
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /jest-runtime@29.5.0:
- resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.5.0
- '@jest/fake-timers': 29.5.0
- '@jest/globals': 29.5.0
- '@jest/source-map': 29.4.3
- '@jest/test-result': 29.5.0
- '@jest/transform': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- chalk: 4.1.2
- cjs-module-lexer: 1.2.3
- collect-v8-coverage: 1.0.1
- glob: 7.2.3
- graceful-fs: 4.2.11
- jest-haste-map: 29.5.0
- jest-message-util: 29.5.0
- jest-mock: 29.5.0
- jest-regex-util: 29.4.3
- jest-resolve: 29.5.0
- jest-snapshot: 29.5.0
- jest-util: 29.5.0
- slash: 3.0.0
- strip-bom: 4.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /jest-snapshot@29.5.0:
- resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/core': 7.22.6
- '@babel/generator': 7.22.5
- '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.6)
- '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.6)
- '@babel/traverse': 7.22.6
- '@babel/types': 7.22.5
- '@jest/expect-utils': 29.5.0
- '@jest/transform': 29.5.0
- '@jest/types': 29.5.0
- '@types/babel__traverse': 7.20.1
- '@types/prettier': 2.7.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.6)
- chalk: 4.1.2
- expect: 29.5.0
- graceful-fs: 4.2.11
- jest-diff: 29.5.0
- jest-get-type: 29.4.3
- jest-matcher-utils: 29.5.0
- jest-message-util: 29.5.0
- jest-util: 29.5.0
- natural-compare: 1.4.0
- pretty-format: 29.5.0
- semver: 7.5.3
- transitivePeerDependencies:
- - supports-color
- dev: true
+ get-east-asian-width: 1.4.0
- /jest-util@29.5.0:
- resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ is-glob@4.0.3:
dependencies:
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- chalk: 4.1.2
- ci-info: 3.8.0
- graceful-fs: 4.2.11
- picomatch: 2.3.1
- dev: true
+ is-extglob: 2.1.1
- /jest-validate@29.5.0:
- resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ is-number@7.0.0: {}
+
+ is-potential-custom-element-name@1.0.1: {}
+
+ is-promise@4.0.0: {}
+
+ is-wsl@2.2.0:
dependencies:
- '@jest/types': 29.5.0
- camelcase: 6.3.0
- chalk: 4.1.2
- jest-get-type: 29.4.3
- leven: 3.1.0
- pretty-format: 29.5.0
- dev: true
-
- /jest-watcher@29.5.0:
- resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/test-result': 29.5.0
- '@jest/types': 29.5.0
- '@types/node': 20.3.3
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- emittery: 0.13.1
- jest-util: 29.5.0
- string-length: 4.0.2
- dev: true
+ is-docker: 2.2.1
- /jest-worker@26.6.2:
- resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
- engines: {node: '>= 10.13.0'}
+ isexe@2.0.0: {}
+
+ 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
- dev: true
- /jest-worker@29.5.0:
- resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@types/node': 20.3.3
- jest-util: 29.5.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
- dev: true
+ jiti@2.6.1: {}
- /jest@29.5.0:
- resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- hasBin: true
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
- dependencies:
- '@jest/core': 29.5.0
- '@jest/types': 29.5.0
- import-local: 3.1.0
- jest-cli: 29.5.0
- transitivePeerDependencies:
- - '@types/node'
- - supports-color
- - ts-node
- dev: true
+ jju@1.4.0: {}
- /js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- dev: true
+ js-tokens@4.0.0: {}
- /js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
- hasBin: true
+ js-tokens@9.0.1: {}
+
+ js-yaml@4.1.1:
dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
- dev: true
+ argparse: 2.0.1
- /jsdom@20.0.3:
- resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==}
- engines: {node: '>=14'}
- peerDependencies:
- canvas: ^2.5.0
- peerDependenciesMeta:
- canvas:
- optional: true
+ jsdom@26.1.0:
dependencies:
- abab: 2.0.6
- acorn: 8.9.0
- acorn-globals: 7.0.1
- cssom: 0.5.0
- cssstyle: 2.3.0
- data-urls: 3.0.2
- decimal.js: 10.4.3
- domexception: 4.0.0
- escodegen: 2.1.0
- form-data: 4.0.0
- html-encoding-sniffer: 3.0.0
- http-proxy-agent: 5.0.0
- https-proxy-agent: 5.0.1
+ cssstyle: 4.6.0
+ data-urls: 5.0.0
+ decimal.js: 10.6.0
+ 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.6
- parse5: 7.1.2
+ 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.3
- 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
- ws: 8.13.0
- xml-name-validator: 4.0.0
+ whatwg-encoding: 3.1.1
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.2.0
+ ws: 8.18.3
+ xml-name-validator: 5.0.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- dev: true
- /jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
+ jsesc@3.1.0: {}
- /json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
+ json-buffer@3.0.1: {}
- /json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
- dev: true
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
- /jsonfile@6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ json-schema-traverse@1.0.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ jsonfile@6.2.0:
dependencies:
- universalify: 2.0.0
+ universalify: 2.0.1
optionalDependencies:
graceful-fs: 4.2.11
- dev: true
- /kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
- dev: true
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
- /kleur@3.0.3:
- resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
- engines: {node: '>=6'}
- dev: true
+ kolorist@1.8.0: {}
- /leven@3.1.0:
- resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
- engines: {node: '>=6'}
- dev: true
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
- /lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: true
+ lightningcss-android-arm64@1.30.2:
+ optional: true
- /locate-path@5.0.0:
- resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
- engines: {node: '>=8'}
- dependencies:
- p-locate: 4.1.0
- dev: true
+ lightningcss-darwin-arm64@1.30.2:
+ optional: true
- /lodash.memoize@4.1.2:
- resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
- dev: true
+ lightningcss-darwin-x64@1.30.2:
+ optional: true
- /loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: 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
+
+ lightningcss@1.30.2:
dependencies:
- js-tokens: 4.0.0
- dev: true
+ detect-libc: 2.1.2
+ optionalDependencies:
+ 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: {}
+
+ linkify-it@5.0.0:
+ dependencies:
+ uc.micro: 2.1.0
+
+ lint-staged@16.1.6:
+ dependencies:
+ 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
- /lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ listr2@9.0.3:
dependencies:
- yallist: 3.1.1
- dev: true
+ 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
- /lru-cache@6.0.0:
- resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
- engines: {node: '>=10'}
+ local-pkg@1.1.2:
dependencies:
- yallist: 4.0.0
- dev: true
+ mlly: 1.8.0
+ pkg-types: 2.3.0
+ quansync: 0.2.11
- /magic-string@0.25.9:
- resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+ locate-path@6.0.0:
dependencies:
- sourcemap-codec: 1.4.8
- dev: true
+ p-locate: 5.0.0
- /magic-string@0.30.1:
- resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==}
- engines: {node: '>=12'}
+ lodash.merge@4.6.2: {}
+
+ lodash@4.17.21: {}
+
+ log-update@6.1.0:
dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
+ 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
- /make-dir@3.1.0:
- resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
- engines: {node: '>=8'}
+ loupe@3.2.1: {}
+
+ lower-case@2.0.2:
dependencies:
- semver: 6.3.0
- dev: true
+ tslib: 2.8.1
- /make-error@1.3.6:
- resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
- dev: true
+ lru-cache@10.4.3: {}
- /makeerror@1.0.12:
- resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+ lru-cache@5.1.1:
dependencies:
- tmpl: 1.0.5
- dev: true
+ yallist: 3.1.1
- /map-obj@1.0.1:
- resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
- /map-obj@4.3.0:
- resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
- engines: {node: '>=8'}
- dev: true
+ lz-string@1.5.0: {}
- /meow@7.1.1:
- resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==}
- engines: {node: '>=10'}
+ magic-string@0.30.21:
dependencies:
- '@types/minimist': 1.2.2
- camelcase-keys: 6.2.2
- decamelize-keys: 1.1.1
- hard-rejection: 2.1.0
- minimist-options: 4.1.0
- normalize-package-data: 2.5.0
- read-pkg-up: 7.0.1
- redent: 3.0.0
- trim-newlines: 3.0.1
- type-fest: 0.13.1
- yargs-parser: 18.1.3
- dev: true
+ '@jridgewell/sourcemap-codec': 1.5.5
- /merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- dev: true
+ make-error@1.3.6: {}
- /merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
- dev: true
+ 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
- /micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
+ 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: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
dependencies:
- braces: 3.0.2
+ braces: 3.0.3
picomatch: 2.3.1
- dev: true
- /mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
- dev: true
+ mime-db@1.54.0: {}
- /mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
+ mime-types@3.0.1:
dependencies:
- mime-db: 1.52.0
- dev: true
+ mime-db: 1.54.0
- /mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
- dev: true
+ mimic-function@5.0.1: {}
- /min-indent@1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
- dev: true
+ min-indent@1.0.1: {}
- /minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ minimatch@10.0.3:
dependencies:
- brace-expansion: 1.1.11
- dev: true
+ '@isaacs/brace-expansion': 5.0.0
- /minimist-options@4.1.0:
- resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
- engines: {node: '>= 6'}
+ minimatch@3.1.2:
dependencies:
- arrify: 1.0.1
- is-plain-obj: 1.1.0
- kind-of: 6.0.3
- dev: true
+ brace-expansion: 1.1.12
- /ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
- dev: true
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
- /ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- dev: true
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.1
- /natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- dev: true
+ mrmime@2.0.1: {}
- /node-int64@0.4.0:
- resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
- dev: true
+ ms@2.0.0: {}
- /node-releases@2.0.12:
- resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==}
- dev: true
+ ms@2.1.3: {}
- /normalize-package-data@2.5.0:
- resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
- dependencies:
- hosted-git-info: 2.8.9
- resolve: 1.22.2
- semver: 5.7.1
- validate-npm-package-license: 3.0.4
- dev: true
+ muggle-string@0.4.1: {}
- /normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ nano-spawn@1.0.3: {}
- /npm-bundled@1.1.2:
- resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==}
- dependencies:
- npm-normalize-package-bin: 1.0.1
- dev: true
+ nanoid@3.3.11: {}
- /npm-normalize-package-bin@1.0.1:
- resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==}
- dev: true
+ natural-compare@1.4.0: {}
- /npm-packlist@2.2.2:
- resolution: {integrity: sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==}
- engines: {node: '>=10'}
- hasBin: true
+ negotiator@0.6.4: {}
+
+ negotiator@1.0.0: {}
+
+ 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
- dev: true
+ lower-case: 2.0.2
+ tslib: 2.8.1
- /npm-run-path@4.0.1:
- resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
- engines: {node: '>=8'}
+ node-releases@2.0.20: {}
+
+ nwsapi@2.2.22: {}
+
+ object-inspect@1.13.4: {}
+
+ on-finished@2.4.1:
dependencies:
- path-key: 3.1.1
- dev: true
+ ee-first: 1.1.1
- /nwsapi@2.2.6:
- resolution: {integrity: sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==}
- dev: true
+ on-headers@1.1.0: {}
- /once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ once@1.4.0:
dependencies:
wrappy: 1.0.2
- dev: true
- /onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
+ onetime@7.0.0:
dependencies:
- mimic-fn: 2.1.0
- dev: true
+ mimic-function: 5.0.1
- /p-limit@2.3.0:
- resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
- engines: {node: '>=6'}
+ open@8.4.2:
dependencies:
- p-try: 2.2.0
- dev: true
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
- /p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
+ optionator@0.9.4:
dependencies:
- yocto-queue: 0.1.0
- dev: true
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
- /p-locate@4.1.0:
- resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
- engines: {node: '>=8'}
+ p-limit@3.1.0:
dependencies:
- p-limit: 2.3.0
- dev: true
+ yocto-queue: 0.1.0
- /p-try@2.2.0:
- resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
- engines: {node: '>=6'}
- dev: true
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
- /parse-glob@3.0.4:
- resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==}
- engines: {node: '>=0.10.0'}
+ parent-module@1.0.1:
dependencies:
- glob-base: 0.3.0
- is-dotfile: 1.0.3
- is-extglob: 1.0.0
- is-glob: 2.0.1
- dev: true
+ callsites: 3.1.0
- /parse-json@5.2.0:
- resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
- engines: {node: '>=8'}
+ 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
- dev: true
- /parse5@7.1.2:
- resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ parse5@7.3.0:
dependencies:
- entities: 4.5.0
- dev: true
+ entities: 6.0.1
- /path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
- dev: true
+ parseurl@1.3.3: {}
- /path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ path-browserify@1.0.1: {}
- /path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
- dev: true
+ path-equal@1.2.5: {}
- /path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
+ path-exists@4.0.0: {}
- /picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
+ path-is-absolute@1.0.1: {}
- /picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
- dev: true
+ path-key@3.1.1: {}
- /pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
- engines: {node: '>= 6'}
- dev: true
+ path-parse@1.0.7: {}
- /pkg-dir@4.2.0:
- resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
- engines: {node: '>=8'}
+ path-to-regexp@8.2.0: {}
+
+ path-type@4.0.0: {}
+
+ path-type@6.0.0: {}
+
+ pathe@2.0.3: {}
+
+ pathval@2.0.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pidtree@0.6.0: {}
+
+ pkg-types@1.3.1:
dependencies:
- find-up: 4.1.0
- dev: true
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
- /prettier@2.8.8:
- resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- dev: true
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.2
+ exsolve: 1.0.7
+ pathe: 2.0.3
- /pretty-format@26.6.2:
- resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==}
- engines: {node: '>= 10'}
+ playwright-core@1.57.0: {}
+
+ playwright@1.57.0:
+ dependencies:
+ playwright-core: 1.57.0
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.2.1: {}
+
+ prettier-plugin-tailwindcss@0.7.1(prettier@3.6.2):
+ dependencies:
+ prettier: 3.6.2
+
+ prettier@3.6.2: {}
+
+ pretty-format@27.5.1:
dependencies:
- '@jest/types': 26.6.2
ansi-regex: 5.0.1
- ansi-styles: 4.3.0
+ ansi-styles: 5.2.0
react-is: 17.0.2
- dev: true
- /pretty-format@29.5.0:
- resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ proxy-addr@2.0.7:
dependencies:
- '@jest/schemas': 29.4.3
- ansi-styles: 5.2.0
- react-is: 18.2.0
- dev: true
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
- /prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
- engines: {node: '>= 6'}
+ punycode.js@2.3.1: {}
+
+ punycode@2.3.1: {}
+
+ qs@6.14.0:
dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
- dev: true
+ side-channel: 1.1.0
- /psl@1.9.0:
- resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
- dev: true
+ quansync@0.2.11: {}
- /punycode@2.3.0:
- resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
- engines: {node: '>=6'}
- dev: true
+ queue-microtask@1.2.3: {}
- /pure-rand@6.0.2:
- resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==}
- dev: true
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
- /querystringify@2.2.0:
- resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
- dev: true
+ range-parser@1.2.1: {}
- /queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- dev: true
+ raw-body@3.0.0:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ unpipe: 1.0.0
- /quick-lru@4.0.1:
- resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
- engines: {node: '>=8'}
- dev: true
+ react-docgen-typescript@2.4.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
- /quick-lru@5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
- dev: true
+ react-dom@19.2.3(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ scheduler: 0.27.0
- /react-dom@18.2.0(react@18.2.0):
- resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
- peerDependencies:
- react: ^18.2.0
+ react-error-boundary@6.0.0(react@19.2.3):
dependencies:
- loose-envify: 1.4.0
- react: 18.2.0
- scheduler: 0.23.0
- dev: true
+ '@babel/runtime': 7.28.3
+ react: 19.2.3
- /react-is@17.0.2:
- resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
- dev: true
+ react-is@17.0.2: {}
- /react-is@18.2.0:
- resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
- dev: true
+ react-refresh@0.17.0: {}
- /react@18.2.0:
- resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
- engines: {node: '>=0.10.0'}
+ react-router-dom@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
- loose-envify: 1.4.0
- dev: true
+ 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)
- /read-pkg-up@7.0.1:
- resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
- engines: {node: '>=8'}
+ react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
- find-up: 4.1.0
- read-pkg: 5.2.0
- type-fest: 0.8.1
- dev: true
+ cookie: 1.0.2
+ react: 19.2.3
+ set-cookie-parser: 2.7.1
+ optionalDependencies:
+ react-dom: 19.2.3(react@19.2.3)
- /read-pkg@5.2.0:
- resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
- engines: {node: '>=8'}
- dependencies:
- '@types/normalize-package-data': 2.4.1
- normalize-package-data: 2.5.0
- parse-json: 5.2.0
- type-fest: 0.6.0
- dev: true
+ react@19.2.3: {}
- /redent@3.0.0:
- resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
- engines: {node: '>=8'}
+ redent@3.0.0:
dependencies:
indent-string: 4.0.0
strip-indent: 3.0.0
- dev: true
- /regenerator-runtime@0.13.11:
- resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
- dev: true
+ require-directory@2.1.1: {}
- /require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
- dev: true
+ require-from-string@2.0.2: {}
- /requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
- dev: true
+ resolve-from@4.0.0: {}
- /resolve-cwd@3.0.0:
- resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
- engines: {node: '>=8'}
+ resolve@1.22.10:
dependencies:
- resolve-from: 5.0.0
- dev: true
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
- /resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
- dev: true
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
- /resolve.exports@2.0.2:
- resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
- engines: {node: '>=10'}
- dev: true
+ reusify@1.1.0: {}
- /resolve@1.22.2:
- resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
- hasBin: true
+ rfdc@1.4.1: {}
+
+ rollup-plugin-terser@7.0.2(rollup@4.49.0):
dependencies:
- is-core-module: 2.12.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
+ '@babel/code-frame': 7.27.1
+ jest-worker: 26.6.2
+ rollup: 4.49.0
+ serialize-javascript: 4.0.0
+ terser: 5.43.1
- /reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- dev: true
+ 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:
+ rollup: 4.49.0
- /rollup@2.79.1:
- resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
- engines: {node: '>=10.0.0'}
- hasBin: true
+ rollup-preserve-directives@1.1.3(rollup@4.49.0):
+ dependencies:
+ magic-string: 0.30.21
+ rollup: 4.49.0
+
+ rollup@4.49.0:
+ dependencies:
+ '@types/estree': 1.0.8
optionalDependencies:
- fsevents: 2.3.2
- dev: true
+ '@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
- /run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rrweb-cssom@0.8.0: {}
+
+ run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
- dev: true
- /safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- dev: true
+ safe-buffer@5.2.1: {}
- /saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
- dependencies:
- xmlchars: 2.2.0
- dev: true
+ safe-stable-stringify@2.5.0: {}
+
+ safer-buffer@2.1.2: {}
- /scheduler@0.23.0:
- resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+ saxes@6.0.0:
dependencies:
- loose-envify: 1.4.0
- dev: true
+ xmlchars: 2.2.0
- /semver@5.7.1:
- resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
- hasBin: true
- dev: true
+ scheduler@0.27.0: {}
- /semver@6.3.0:
- resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
- hasBin: true
- dev: true
+ semver@6.3.1: {}
- /semver@7.5.3:
- resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==}
- engines: {node: '>=10'}
- hasBin: true
+ semver@7.5.4:
dependencies:
lru-cache: 6.0.0
- dev: true
- /shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
+ semver@7.7.3: {}
+
+ send@1.2.0:
dependencies:
- shebang-regex: 3.0.0
- dev: true
+ 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
- /shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
- dev: true
+ serialize-javascript@4.0.0:
+ dependencies:
+ randombytes: 2.1.0
- /signal-exit@3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- dev: true
+ 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
- /sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- dev: true
+ set-cookie-parser@2.7.1: {}
- /slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
- dev: true
+ setprototypeof@1.2.0: {}
- /source-map-support@0.5.13:
- resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+ shebang-command@2.0.0:
dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
- dev: true
+ shebang-regex: 3.0.0
- /source-map-support@0.5.21:
- resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ shebang-regex@3.0.0: {}
+
+ side-channel-list@1.0.0:
dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
- dev: true
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
- /source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
- dev: true
+ 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
- /sourcemap-codec@1.4.8:
- resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- deprecated: Please use @jridgewell/sourcemap-codec instead
- dev: true
+ 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
- /spdx-correct@3.2.0:
- resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+ side-channel@1.1.0:
dependencies:
- spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.13
- dev: true
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
- /spdx-exceptions@2.3.0:
- resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
- dev: true
+ siginfo@2.0.0: {}
- /spdx-expression-parse@3.0.1:
- resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+ signal-exit@4.1.0: {}
+
+ sirv@3.0.2:
dependencies:
- spdx-exceptions: 2.3.0
- spdx-license-ids: 3.0.13
- dev: true
+ '@polka/url': 1.0.0-next.29
+ mrmime: 2.0.1
+ totalist: 3.0.1
- /spdx-license-ids@3.0.13:
- resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
- dev: true
+ slash@5.1.0: {}
- /sprintf-js@1.0.3:
- resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
- dev: true
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
- /stack-utils@2.0.6:
- resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
- engines: {node: '>=10'}
+ slice-ansi@7.1.2:
dependencies:
- escape-string-regexp: 2.0.0
- dev: true
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.1.0
- /string-length@4.0.2:
- resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
- engines: {node: '>=10'}
+ snake-case@3.0.4:
dependencies:
- char-regex: 1.0.2
- strip-ansi: 6.0.1
- dev: true
+ dot-case: 3.0.4
+ tslib: 2.8.1
- /string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ 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
- dev: true
- /strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
+ string-width@7.2.0:
dependencies:
- ansi-regex: 5.0.1
- dev: true
+ emoji-regex: 10.5.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.0
- /strip-bom@4.0.0:
- resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
- engines: {node: '>=8'}
- dev: true
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
- /strip-final-newline@2.0.0:
- resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
- engines: {node: '>=6'}
- dev: true
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.2.0
- /strip-indent@3.0.0:
- resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
- engines: {node: '>=8'}
+ strip-indent@3.0.0:
dependencies:
min-indent: 1.0.1
- dev: true
- /strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
- dev: true
+ strip-json-comments@3.1.1: {}
- /supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
+ strip-literal@3.0.0:
dependencies:
- has-flag: 3.0.0
- dev: true
+ js-tokens: 9.0.1
- /supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
+ style-mod@4.1.2: {}
+
+ supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
- dev: true
- /supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
+ supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
- dev: true
- /supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
- dev: true
+ supports-preserve-symlinks-flag@1.0.0: {}
- /symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
- dev: true
+ svg-parser@2.0.4: {}
- /terser@5.18.2:
- resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==}
- engines: {node: '>=10'}
- hasBin: true
+ symbol-tree@3.2.4: {}
+
+ tabbable@6.3.0: {}
+
+ tailwind-merge@3.4.0: {}
+
+ tailwindcss@4.1.17: {}
+
+ tapable@2.2.3: {}
+
+ terser@5.43.1:
dependencies:
- '@jridgewell/source-map': 0.3.5
- acorn: 8.9.0
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
- dev: true
- /test-exclude@6.0.0:
- resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
- engines: {node: '>=8'}
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.2: {}
+
+ tinyglobby@0.2.15:
dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 7.2.3
- minimatch: 3.1.2
- dev: true
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
- /tmpl@1.0.5:
- resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
- dev: true
+ tinypool@1.1.1: {}
- /to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
- dev: true
+ tinyrainbow@2.0.0: {}
- /to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
+ tinyspy@4.0.3: {}
+
+ tldts-core@6.1.86: {}
+
+ tldts@6.1.86:
+ dependencies:
+ tldts-core: 6.1.86
+
+ to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- dev: true
- /tough-cookie@4.1.3:
- resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
- engines: {node: '>=6'}
+ toidentifier@1.0.1: {}
+
+ totalist@3.0.1: {}
+
+ tough-cookie@5.1.2:
dependencies:
- psl: 1.9.0
- punycode: 2.3.0
- universalify: 0.2.0
- url-parse: 1.5.10
- dev: true
+ tldts: 6.1.86
- /tr46@3.0.0:
- resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
- engines: {node: '>=12'}
+ tr46@5.1.1:
dependencies:
- punycode: 2.3.0
- dev: true
+ punycode: 2.3.1
- /trim-newlines@3.0.1:
- resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
- engines: {node: '>=8'}
- dev: true
+ ts-api-utils@2.1.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
- /ts-jest@29.1.1(@babel/core@7.22.6)(jest@29.5.0)(typescript@4.9.5):
- resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- hasBin: true
- peerDependencies:
- '@babel/core': '>=7.0.0-beta.0 <8'
- '@jest/types': ^29.0.0
- babel-jest: ^29.0.0
- esbuild: '*'
- jest: ^29.0.0
- typescript: '>=4.3 <6'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- '@jest/types':
- optional: true
- babel-jest:
- optional: true
- esbuild:
- optional: true
+ ts-blank-space@0.6.2:
dependencies:
- '@babel/core': 7.22.6
- bs-logger: 0.2.6
- fast-json-stable-stringify: 2.1.0
- jest: 29.5.0
- jest-util: 29.5.0
- json5: 2.2.3
- lodash.memoize: 4.1.2
+ typescript: 5.8.3
+
+ 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:
+ '@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
- semver: 7.5.3
- typescript: 4.9.5
- yargs-parser: 21.1.1
- dev: true
+ 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)
+
+ 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:
+ '@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)
- /type-detect@4.0.8:
- resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
- engines: {node: '>=4'}
- dev: true
+ tslib@2.8.1: {}
- /type-fest@0.13.1:
- resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
- engines: {node: '>=10'}
- dev: true
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
- /type-fest@0.21.3:
- resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
- engines: {node: '>=10'}
- dev: true
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.1
- /type-fest@0.6.0:
- resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
- engines: {node: '>=8'}
- dev: true
+ typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3):
+ dependencies:
+ '@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
- /type-fest@0.8.1:
- resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
- engines: {node: '>=8'}
- dev: true
+ 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@4.9.5:
- resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
- engines: {node: '>=4.2.0'}
- hasBin: true
- dev: true
+ typescript@5.5.4: {}
- /universalify@0.2.0:
- resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
- engines: {node: '>= 4.0.0'}
- dev: true
+ typescript@5.8.2: {}
- /universalify@2.0.0:
- resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
- engines: {node: '>= 10.0.0'}
- dev: true
+ typescript@5.8.3: {}
- /update-browserslist-db@1.0.11(browserslist@4.21.9):
- resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
+ uc.micro@2.1.0: {}
+
+ ufo@1.6.1: {}
+
+ undici-types@5.26.5: {}
+
+ undici-types@7.16.0: {}
+
+ unicorn-magic@0.3.0: {}
+
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
+ update-browserslist-db@1.1.3(browserslist@4.25.4):
+ dependencies:
+ browserslist: 4.25.4
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uri-js@4.4.1:
dependencies:
- browserslist: 4.21.9
- escalade: 3.1.1
- picocolors: 1.0.0
- dev: true
+ punycode: 2.3.1
- /url-parse@1.5.10:
- resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+ use-sync-external-store@1.6.0(react@19.2.3):
dependencies:
- querystringify: 2.2.0
- requires-port: 1.0.0
- dev: true
+ react: 19.2.3
- /v8-compile-cache@2.3.0:
- resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
- dev: true
+ v8-compile-cache-lib@3.0.1: {}
- /v8-to-istanbul@9.1.0:
- resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==}
- engines: {node: '>=10.12.0'}
+ vary@1.1.2: {}
+
+ vite-node@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1):
dependencies:
- '@jridgewell/trace-mapping': 0.3.18
- '@types/istanbul-lib-coverage': 2.0.4
- convert-source-map: 1.9.0
- dev: true
+ cac: 6.7.14
+ debug: 4.4.1
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ 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)(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)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - rollup
+ - supports-color
- /validate-npm-package-license@3.0.4:
- resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ 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)(yaml@2.8.1)):
dependencies:
- spdx-correct: 3.2.0
- spdx-expression-parse: 3.0.1
- dev: true
+ '@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)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ - typescript
- /w3c-xmlserializer@4.0.0:
- resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
- engines: {node: '>=14'}
+ vite@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1):
dependencies:
- xml-name-validator: 4.0.0
- dev: true
+ esbuild: 0.25.12
+ 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': 24.10.4
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ terser: 5.43.1
+ yaml: 2.8.1
+
+ vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(yaml@2.8.1):
+ dependencies:
+ 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': 24.10.4
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ terser: 5.43.1
+ 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)(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)(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)(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)(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)(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)(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.15
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(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)(yaml@2.8.1)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 24.10.4
+ jsdom: 26.1.0
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
- /walker@1.0.8:
- resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+ vscode-uri@3.1.0: {}
+
+ w3c-keyname@2.2.8: {}
+
+ w3c-xmlserializer@5.0.0:
dependencies:
- makeerror: 1.0.12
- dev: true
+ xml-name-validator: 5.0.0
- /webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
- engines: {node: '>=12'}
- dev: true
+ webidl-conversions@7.0.0: {}
- /whatwg-encoding@2.0.0:
- resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
- engines: {node: '>=12'}
+ whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
- dev: true
- /whatwg-mimetype@3.0.0:
- resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
- engines: {node: '>=12'}
- dev: true
+ whatwg-mimetype@4.0.0: {}
- /whatwg-url@11.0.0:
- resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
- engines: {node: '>=12'}
+ whatwg-url@14.2.0:
dependencies:
- tr46: 3.0.0
+ tr46: 5.1.1
webidl-conversions: 7.0.0
- dev: true
- /which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
+ which@2.0.2:
dependencies:
isexe: 2.0.0
- dev: true
- /wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- dev: true
-
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- dev: true
- /write-file-atomic@4.0.2:
- resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
- engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ wrap-ansi@9.0.0:
dependencies:
- imurmurhash: 0.1.4
- signal-exit: 3.0.7
- dev: true
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
- /ws@8.13.0:
- resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- dev: true
+ wrappy@1.0.2: {}
- /xml-name-validator@4.0.0:
- resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
- engines: {node: '>=12'}
- dev: true
+ ws@8.18.3: {}
- /xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
- dev: true
+ xml-name-validator@5.0.0: {}
- /y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
- dev: true
+ xmlchars@2.2.0: {}
- /yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
+ y18n@5.0.8: {}
- /yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- dev: true
+ yallist@3.1.1: {}
- /yargs-parser@18.1.3:
- resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
- engines: {node: '>=6'}
- dependencies:
- camelcase: 5.3.1
- decamelize: 1.2.0
- dev: true
+ yallist@4.0.0: {}
- /yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
- dev: true
+ yaml@2.8.1: {}
- /yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
dependencies:
cliui: 8.0.1
- escalade: 3.1.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
- dev: true
- /yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
- dev: true
+ yn@3.1.1: {}
- /zod@3.21.4:
- resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
- dev: true
+ yocto-queue@0.1.0: {}
+
+ 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 0000000..f2dc4f0
--- /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/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..8f82e57
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,4 @@
+import postcss from "postcss";
+import postcssOKLabFunction from "@csstools/postcss-oklab-function";
+
+export default postcss([postcssOKLabFunction()]);
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 0000000..0e35e1d
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,9 @@
+export default {
+ overrides: [
+ {
+ files: "*.ts, *.tsx"
+ }
+ ],
+ singleQuote: false,
+ trailingComma: "none"
+};
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..074af3e
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/generated/code-snippets/ChildComponent.json b/public/generated/code-snippets/ChildComponent.json
new file mode 100644
index 0000000..11f75b7
--- /dev/null
+++ b/public/generated/code-snippets/ChildComponent.json
@@ -0,0 +1,3 @@
+{
+ "html": "import { AutoSizer , type AutoSizerChildProps } from \"react-virtualized-auto-sizer\" ;
\n
\nfunction ExampleComponent ( ) {
\n return (
\n < AutoSizer Child = { Child } />
\n )
\n}
\n
\n
\n
\nfunction Child ( { height = 600 , width = 600 } : AutoSizerChildProps ) {
\n return < div > { width } x { height } pixels </ div > ;
\n}
"
+}
\ No newline at end of file
diff --git a/public/generated/code-snippets/RenderProp.json b/public/generated/code-snippets/RenderProp.json
new file mode 100644
index 0000000..9897297
--- /dev/null
+++ b/public/generated/code-snippets/RenderProp.json
@@ -0,0 +1,3 @@
+{
+ "html": "import { AutoSizer } from \"react-virtualized-auto-sizer\" ;
\n
\nfunction ExampleComponent ( props : ExampleComponentProps ) {
\n const [ state , setState ] = useState ( ) ;
\n
\n return (
\n < AutoSizer Child = {
\n ( { height = 600 , width = 800 } ) => {
\n
\n
\n }
\n } />
\n )
\n}
"
+}
\ No newline at end of file
diff --git a/public/generated/js-docs/AutoSizer.json b/public/generated/js-docs/AutoSizer.json
new file mode 100644
index 0000000..6bbb305
--- /dev/null
+++ b/public/generated/js-docs/AutoSizer.json
@@ -0,0 +1,112 @@
+{
+ "description": [
+ {
+ "content": "Measures the available width and height of its parent HTMLElement and passes those values as width and height props to its children.
\n"
+ },
+ {
+ "content": "This component began as a fork of the javascript-detect-element-resize package.
\n",
+ "intent": "primary"
+ }
+ ],
+ "filePath": "lib/components/AutoSizer.tsx",
+ "name": "AutoSizer",
+ "props": {
+ "box": {
+ "description": [
+ {
+ "content": "Corresponds to the ResizeObserver box parameter.\nSets which box model the observer will observe changes to.
\n"
+ },
+ {
+ "content": "\nborder-box: Size of the box border area as defined in CSS. \ncontent-box: Size of the content area as defined in CSS. \ndevice-pixel-content-box: The size of the content area as defined in CSS, in device pixels, before applying any CSS transforms on the element or its ancestors. \n \n"
+ }
+ ],
+ "html": "box ? : \"border-box\" | \"content-box\" | \"device-pixel-content-box\" = \"content-box\"
",
+ "name": "box",
+ "required": false
+ },
+ "Child": {
+ "description": [
+ {
+ "content": "Child component to be passed the available width and height values as props.
\n"
+ },
+ {
+ "content": "Width and height are undefined during the during the initial render (including server-rendering).
\n",
+ "intent": "primary"
+ }
+ ],
+ "html": "Child : FunctionComponent < { height : number | undefined ; width : number | undefined ; } > | undefined
",
+ "name": "Child",
+ "required": true
+ },
+ "className": {
+ "description": [
+ {
+ "content": "Class name to be applied to the auto-sizer HTMLElement.
\n"
+ }
+ ],
+ "html": "className ? : string
",
+ "name": "className",
+ "required": false
+ },
+ "data-testid": {
+ "description": [
+ {
+ "content": "Test id attribute to interop with frameworks like Testing Library .
\n"
+ }
+ ],
+ "html": "data-testid ? : string
",
+ "name": "data-testid",
+ "required": false
+ },
+ "id": {
+ "description": [
+ {
+ "content": "Unique id attribute to attach to root DOM element.
\n"
+ }
+ ],
+ "html": "id ? : string | number
",
+ "name": "id",
+ "required": false
+ },
+ "nonce": {
+ "description": [
+ {
+ "content": "Nonce used for inline StyleSheet\nin browsers/environments that do not support the ResizeObserver API.
\n"
+ }
+ ],
+ "html": "nonce ? : string
",
+ "name": "nonce",
+ "required": false
+ },
+ "onResize": {
+ "description": [
+ {
+ "content": "Optional callback notified after a resize.\n"
+ }
+ ],
+ "html": "
onResize ? : ( ( size : { height : number ; width : number ; } ) => void )
",
+ "name": "onResize",
+ "required": false
+ },
+ "style": {
+ "description": [
+ {
+ "content": "Style properties to be applied to the auto-sizer HTMLElement.
\n"
+ }
+ ],
+ "html": "style ? : CSSProperties
",
+ "name": "style",
+ "required": false
+ },
+ "tagName": {
+ "description": [
+ {
+ "content": "Optional HTML tag name for root HTMLElement; defaults to "div".
\n"
+ }
+ ],
+ "html": "tagName ? : string = \"div\"
",
+ "name": "tagName",
+ "required": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/og.html b/public/og.html
new file mode 100644
index 0000000..7ed2fa7
--- /dev/null
+++ b/public/og.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ react-virtualized-auto-sizer
+ (re)sizing helper component
+
+
+
diff --git a/public/og.png b/public/og.png
new file mode 100644
index 0000000..3c66d85
Binary files /dev/null and b/public/og.png differ
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..14267e9
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Allow: /
\ No newline at end of file
diff --git a/public/svgs/checkbox-checked.svg b/public/svgs/checkbox-checked.svg
new file mode 100644
index 0000000..59a2e3f
--- /dev/null
+++ b/public/svgs/checkbox-checked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/checkbox-indeterminate.svg b/public/svgs/checkbox-indeterminate.svg
new file mode 100644
index 0000000..f11c023
--- /dev/null
+++ b/public/svgs/checkbox-indeterminate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/checkbox-unchecked.svg b/public/svgs/checkbox-unchecked.svg
new file mode 100644
index 0000000..c1d6a33
--- /dev/null
+++ b/public/svgs/checkbox-unchecked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/chevron.svg b/public/svgs/chevron.svg
new file mode 100644
index 0000000..952fe81
--- /dev/null
+++ b/public/svgs/chevron.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/github.svg b/public/svgs/github.svg
new file mode 100644
index 0000000..45e75bf
--- /dev/null
+++ b/public/svgs/github.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/public/svgs/globe.svg b/public/svgs/globe.svg
new file mode 100644
index 0000000..dedd9a1
--- /dev/null
+++ b/public/svgs/globe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/grab-dots.svg b/public/svgs/grab-dots.svg
new file mode 100644
index 0000000..8f2a342
--- /dev/null
+++ b/public/svgs/grab-dots.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/npm.svg b/public/svgs/npm.svg
new file mode 100644
index 0000000..0cb019b
--- /dev/null
+++ b/public/svgs/npm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/radio-checked.svg b/public/svgs/radio-checked.svg
new file mode 100644
index 0000000..013b1bc
--- /dev/null
+++ b/public/svgs/radio-checked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/radio-unchecked.svg b/public/svgs/radio-unchecked.svg
new file mode 100644
index 0000000..903679f
--- /dev/null
+++ b/public/svgs/radio-unchecked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/tags.svg b/public/svgs/tags.svg
new file mode 100644
index 0000000..6f0d794
--- /dev/null
+++ b/public/svgs/tags.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/scripts/compile-code-snippets.ts b/scripts/compile-code-snippets.ts
new file mode 100644
index 0000000..0471781
--- /dev/null
+++ b/scripts/compile-code-snippets.ts
@@ -0,0 +1,67 @@
+import { readFile, writeFile } from "node:fs/promises";
+import { basename, join } from "node:path";
+import { initialize } from "./utils/initialize.ts";
+import { syntaxHighlight } from "./utils/syntax-highlight.ts";
+import { trimExcludedText } from "./utils/code-snippets/trimExcludedText.ts";
+
+async function run() {
+ const { files, outputDir } = await initialize({
+ fileExtensions: [".html", ".ts", ".tsx"],
+ inputPath: ["src", "routes"],
+ outputDirName: "code-snippets"
+ });
+
+ const exampleFiles = files.filter((file) => file.includes(".example."));
+
+ for (const file of exampleFiles) {
+ const buffer = await readFile(file);
+
+ let rawText = buffer.toString();
+
+ {
+ // Remove special comments and directives before syntax highlighting
+ rawText = trimExcludedText(rawText);
+
+ rawText = rawText
+ .split("\n")
+ .filter(
+ (line) =>
+ !line.includes("prettier-ignore") &&
+ !line.includes("eslint-disable-next-line") &&
+ !line.includes("@ts-expect-error") &&
+ !line.includes("// hidden")
+ )
+ .join("\n");
+ }
+
+ let html;
+ if (file.endsWith(".html")) {
+ html = await syntaxHighlight(rawText, "HTML");
+ } else if (file.endsWith(".js") || file.endsWith(".jsx")) {
+ html = await syntaxHighlight(
+ rawText,
+ file.endsWith("jsx") ? "JSX" : "JS"
+ );
+ } else if (file.endsWith(".ts") || file.endsWith(".tsx")) {
+ html = await syntaxHighlight(
+ rawText,
+ file.endsWith("tsx") ? "TSX" : "TS"
+ );
+ } else {
+ throw Error(`Unsupported file type: ${file}`);
+ }
+
+ const fileName = basename(file);
+
+ const outputFile = join(
+ outputDir,
+ fileName.replace(/\.example\..+$/, ".json")
+ );
+
+ console.debug("Writing to", outputFile);
+
+ await writeFile(outputFile, JSON.stringify({ html }, null, 2));
+ }
+}
+
+run();
diff --git a/scripts/compile-docs.ts b/scripts/compile-docs.ts
new file mode 100644
index 0000000..757e7ec
--- /dev/null
+++ b/scripts/compile-docs.ts
@@ -0,0 +1,10 @@
+import { compileComponents } from "./utils/docs/compileComponents.ts";
+
+async function run() {
+ await compileComponents({
+ componentNames: ["AutoSizer.tsx"],
+ outputDirName: "js-docs"
+ });
+}
+
+run();
diff --git a/scripts/utils/code-snippets/trimExcludedText.ts b/scripts/utils/code-snippets/trimExcludedText.ts
new file mode 100644
index 0000000..7869932
--- /dev/null
+++ b/scripts/utils/code-snippets/trimExcludedText.ts
@@ -0,0 +1,13 @@
+export function trimExcludedText(rawText: string) {
+ {
+ const pieces = rawText.split("// ");
+ rawText = pieces[pieces.length - 1].trim();
+ }
+
+ {
+ const pieces = rawText.split("// ");
+ rawText = pieces[0].trim();
+ }
+
+ return rawText;
+}
diff --git a/scripts/utils/docs/compileComponent.ts b/scripts/utils/docs/compileComponent.ts
new file mode 100644
index 0000000..166cd9b
--- /dev/null
+++ b/scripts/utils/docs/compileComponent.ts
@@ -0,0 +1,116 @@
+import { writeFile } from "node:fs/promises";
+import { join, relative } from "node:path";
+import { cwd } from "node:process";
+import { type FileParser, type PropItem } from "react-docgen-typescript";
+import { assert } from "../../../lib/utils/assert.ts";
+import type { ComponentMetadata } from "../../../src/types.ts";
+import { getPropTypeText } from "./getPropTypeText.ts";
+import { parseDescription } from "./parseDescription.ts";
+import { syntaxHighlight } from "../syntax-highlight.ts";
+import { propsToTable } from "./propsToTable.ts";
+
+const TOKEN_TO_REPLACE = "TOKEN_TO_REPLACE";
+
+export async function compileComponent({
+ filePath,
+ outputDir,
+ parser
+}: {
+ filePath: string;
+ outputDir: string;
+ parser: FileParser;
+}) {
+ const parsed = parser.parse(filePath);
+ assert(
+ parsed.length === 1,
+ `Expected 1 parsed component but found ${parsed.length}`
+ );
+
+ const component = parsed[0];
+
+ // Convert to local paths
+ component.filePath = relative(cwd(), filePath);
+
+ // Filter inherited HTML attributes
+ for (const key in component.props) {
+ const prop = component.props[key];
+ if (
+ prop.declarations?.filter(
+ (declaration) => !declaration.fileName.includes("node_modules")
+ ).length === 0
+ ) {
+ delete component.props[key];
+ }
+ }
+
+ // Generate syntax highlighted HTML for prop types
+ {
+ const componentMetadata: ComponentMetadata = {
+ description: await parseDescription(component.description),
+ filePath: component.filePath,
+ name: component.displayName,
+ props: {}
+ };
+
+ for (const name in component.props) {
+ const prop = component.props[name];
+
+ let textToFormat = getPropTypeText(prop);
+
+ if (prop.defaultValue?.value) {
+ const formattedValue =
+ typeof prop.defaultValue.value === "string"
+ ? `"${prop.defaultValue.value}"`
+ : prop.defaultValue.value;
+
+ textToFormat = `${textToFormat} = ${formattedValue}`;
+ }
+
+ // Format with a placeholder token so we can replace it with a formatted string
+ textToFormat = `${TOKEN_TO_REPLACE}${prop.required ? "" : "?"}: ${textToFormat}`;
+
+ try {
+ let html = await syntaxHighlight(textToFormat, "TS");
+ html = html.replace(
+ TOKEN_TO_REPLACE,
+ `${name} `
+ );
+
+ componentMetadata.props[name] = {
+ description: await parseDescription(prop.description),
+ html,
+ name,
+ required: prop.required
+ };
+ } catch (error) {
+ console.error(error);
+ }
+ }
+
+ const outputFile = join(outputDir, `${component.displayName}.json`);
+
+ console.debug("Writing to", outputFile);
+
+ await writeFile(outputFile, JSON.stringify(componentMetadata, null, 2));
+ }
+
+ // Generate markdown for prop types
+ const requiredProps: PropItem[] = [];
+ const optionalProps: PropItem[] = [];
+
+ for (const propName in component.props) {
+ const prop = component.props[propName];
+ if (prop.required) {
+ requiredProps.push(prop);
+ } else {
+ optionalProps.push(prop);
+ }
+ }
+
+ return {
+ componentName: component.displayName,
+ description: component.description,
+ optionalPropsTable: await propsToTable(optionalProps),
+ requiredPropsTable: await propsToTable(requiredProps)
+ };
+}
diff --git a/scripts/utils/docs/compileComponents.ts b/scripts/utils/docs/compileComponents.ts
new file mode 100644
index 0000000..da09c42
--- /dev/null
+++ b/scripts/utils/docs/compileComponents.ts
@@ -0,0 +1,74 @@
+import { readFile, writeFile } from "node:fs/promises";
+import { join } from "node:path";
+import { cwd } from "node:process";
+import { withCustomConfig } from "react-docgen-typescript";
+import { initialize } from "../initialize.ts";
+import { compileComponent } from "./compileComponent.ts";
+import { insertPropsMarkdown } from "./insertPropsMarkdown.ts";
+
+export async function compileComponents({
+ componentNames,
+ outputDirName
+}: {
+ componentNames: string[];
+ outputDirName: string;
+}) {
+ const parser = withCustomConfig("./tsconfig.json", {
+ savePropValueAsString: true,
+ shouldExtractLiteralValuesFromEnum: true,
+ shouldExtractValuesFromUnion: true,
+ shouldRemoveUndefinedFromOptional: true
+ });
+
+ const { files, outputDir } = await initialize({
+ fileExtensions: [".ts", ".tsx"],
+ fileFilter: (file) =>
+ componentNames.some((componentName) => file.endsWith(componentName)),
+ inputPath: ["lib", "components"],
+ outputDirName
+ });
+
+ const markdownPath = join(cwd(), "README.md");
+
+ let markdown = await readFile(markdownPath, { encoding: "utf-8" });
+
+ await Promise.all(
+ files.map((filePath) =>
+ compileComponent({
+ filePath,
+ outputDir,
+ parser
+ }).then(
+ ({
+ componentName,
+ description,
+ optionalPropsTable,
+ requiredPropsTable
+ }) => {
+ markdown = insertPropsMarkdown({
+ componentMarkdown: description,
+ componentName,
+ markdown,
+ section: "description"
+ });
+
+ markdown = insertPropsMarkdown({
+ componentMarkdown: requiredPropsTable,
+ componentName,
+ markdown,
+ section: "required-props"
+ });
+
+ markdown = insertPropsMarkdown({
+ componentMarkdown: optionalPropsTable,
+ componentName,
+ markdown,
+ section: "optional-props"
+ });
+ }
+ )
+ )
+ );
+
+ await writeFile(markdownPath, markdown);
+}
diff --git a/scripts/utils/docs/compileImperativeHandle.ts b/scripts/utils/docs/compileImperativeHandle.ts
new file mode 100644
index 0000000..3e218e8
--- /dev/null
+++ b/scripts/utils/docs/compileImperativeHandle.ts
@@ -0,0 +1,48 @@
+import type { InterfaceNode } from "@ts-ast-parser/core";
+import assert from "node:assert";
+import { writeFile } from "node:fs/promises";
+import { join } from "path";
+import type { ImperativeHandleMetadata } from "../../../src/types";
+import { syntaxHighlight } from "../syntax-highlight.ts";
+import { parseDescription } from "./parseDescription.ts";
+
+export async function compileImperativeHandle({
+ filePath,
+ interfaceNode,
+ outputDir
+}: {
+ filePath: string;
+ interfaceNode: InterfaceNode;
+ outputDir: string;
+}) {
+ const name = interfaceNode.getName();
+
+ const json: ImperativeHandleMetadata = {
+ description: await parseDescription(
+ "" + interfaceNode.getJSDoc().getTag("description")?.text
+ ),
+ filePath,
+ methods: [],
+ name
+ };
+
+ const methods = interfaceNode.getMethods();
+ for (const method of methods) {
+ const jsDoc = method.getJSDoc();
+ assert(jsDoc);
+
+ json.methods.push({
+ description: await parseDescription(
+ "" + jsDoc.getTag("description")?.text
+ ),
+ html: await syntaxHighlight(method.getTSNode().getText(), "TS"),
+ name: method.getName()
+ });
+ }
+
+ const outputFile = join(outputDir, `${name}.json`);
+
+ console.debug("Writing to", outputFile);
+
+ await writeFile(outputFile, JSON.stringify(json, null, 2));
+}
diff --git a/scripts/utils/docs/compileImperativeHandles.ts b/scripts/utils/docs/compileImperativeHandles.ts
new file mode 100644
index 0000000..57fbdbe
--- /dev/null
+++ b/scripts/utils/docs/compileImperativeHandles.ts
@@ -0,0 +1,45 @@
+import { parseFromProject, type InterfaceNode } from "@ts-ast-parser/core";
+import tsConfig from "../../../tsconfig.json" with { type: "json" };
+import { compileImperativeHandle } from "./compileImperativeHandle.ts";
+import { join } from "node:path";
+import { cwd } from "node:process";
+
+export async function compileImperativeHandles({
+ names,
+ outputDirName
+}: {
+ names: string[];
+ outputDirName: string;
+}) {
+ const outputDir = join(cwd(), "public", "generated", outputDirName);
+
+ const result = await parseFromProject(tsConfig);
+ const reflectedModules = result.project?.getModules() ?? [];
+
+ const nodes: {
+ filePath: string;
+ node: InterfaceNode;
+ }[] = [];
+
+ names.forEach((name) => {
+ reflectedModules.forEach((reflectedModule) => {
+ const node = reflectedModule.getDeclarationByName(name);
+ if (node) {
+ nodes.push({
+ filePath: reflectedModule.getSourcePath(),
+ node: node as unknown as InterfaceNode
+ });
+ }
+ });
+ });
+
+ await Promise.all(
+ nodes.map(({ filePath, node }) =>
+ compileImperativeHandle({
+ filePath,
+ interfaceNode: node,
+ outputDir
+ })
+ )
+ );
+}
diff --git a/scripts/utils/docs/formatDescriptionText.ts b/scripts/utils/docs/formatDescriptionText.ts
new file mode 100644
index 0000000..9e047cf
--- /dev/null
+++ b/scripts/utils/docs/formatDescriptionText.ts
@@ -0,0 +1,11 @@
+import Markdown from "markdown-it";
+
+let processor: Markdown | undefined = undefined;
+
+export function formatDescriptionText(text: string) {
+ if (processor === undefined) {
+ processor = new Markdown();
+ }
+
+ return processor.render(text);
+}
diff --git a/scripts/utils/docs/getPropTypeText.ts b/scripts/utils/docs/getPropTypeText.ts
new file mode 100644
index 0000000..b79cc7a
--- /dev/null
+++ b/scripts/utils/docs/getPropTypeText.ts
@@ -0,0 +1,28 @@
+import type { PropItem } from "react-docgen-typescript";
+
+export function getPropTypeText(prop: PropItem) {
+ let textToFormat = prop.type.raw;
+ if (!textToFormat && prop.type.name.includes(":")) {
+ // Edge case where some prop types aren't registered as containing raw TS
+ textToFormat = prop.type.name;
+
+ // List/Grid and rowComponent/cellComponent are annotated with a return type of ReactElement instead of ReactNode
+ // As a result of this change the generated docs are significantly less readable, so tidy them up here
+ // See github.com/bvaughn/react-virtualized-auto-sizer/issues/875
+ textToFormat = textToFormat.replace(
+ "ReactElement>",
+ "ReactNode"
+ );
+ }
+
+ if (!textToFormat) {
+ textToFormat = `${prop.type.name}`;
+
+ const match = textToFormat.match(/ExcludeForbiddenKeys<([^>]+)>/);
+ if (match) {
+ textToFormat = match[1];
+ }
+ }
+
+ return textToFormat;
+}
diff --git a/scripts/utils/docs/insertPropsMarkdown.ts b/scripts/utils/docs/insertPropsMarkdown.ts
new file mode 100644
index 0000000..2cce2ad
--- /dev/null
+++ b/scripts/utils/docs/insertPropsMarkdown.ts
@@ -0,0 +1,29 @@
+export function insertPropsMarkdown({
+ componentMarkdown,
+ componentName,
+ markdown,
+ section
+}: {
+ componentMarkdown: string;
+ componentName: string;
+ markdown: string;
+ section: string;
+}) {
+ const flag = `${componentName}:${section}`;
+ const startToken = ``;
+ const stopToken = ``;
+
+ const startIndex = markdown.indexOf(startToken) + startToken.length;
+ const stopIndex = markdown.indexOf(stopToken);
+ if (startIndex < 0 || stopIndex < 0) {
+ throw Error("Parsing README failed");
+ }
+
+ return (
+ markdown.substring(0, startIndex) +
+ "\n" +
+ (componentMarkdown || "None") +
+ "\n" +
+ markdown.substring(stopIndex)
+ );
+}
diff --git a/scripts/utils/docs/parseDescription.ts b/scripts/utils/docs/parseDescription.ts
new file mode 100644
index 0000000..22a4300
--- /dev/null
+++ b/scripts/utils/docs/parseDescription.ts
@@ -0,0 +1,59 @@
+import type { Intent, Section } from "../../../src/types.ts";
+import { formatDescriptionText } from "./formatDescriptionText.ts";
+import { syntaxHighlight, type Language } from "../syntax-highlight.ts";
+
+export async function parseDescription(rawText: string) {
+ const sections: Section[] = [];
+
+ // Paper over differences between "@ts-ast-parser/core" and "react-docgen-typescript"
+ let text = rawText;
+ Object.keys(INTENT_FLAGS).forEach((flag) => {
+ text = text
+ .split(`\n${flag}`)
+ .join(`\n\n${flag}`)
+ .replaceAll("\n\n\n", "\n\n");
+ });
+
+ for (const chunk of text.split("\n\n")) {
+ let content = "";
+ let intent: Intent | undefined = undefined;
+
+ if (chunk.startsWith("```")) {
+ const match = chunk.match(/^```([a-z]+)/)!;
+ const language = match[1].toUpperCase() as Language;
+
+ content = await syntaxHighlight(
+ chunk.substring(language.length + 3, chunk.length - 3).trim(),
+ language
+ );
+ } else {
+ content = formatDescriptionText(chunk.trim());
+
+ for (const char in INTENT_FLAGS) {
+ if (content.startsWith(`${char} `)) {
+ intent = INTENT_FLAGS[char as keyof typeof INTENT_FLAGS] as Intent;
+ content = content.replace(`
${char} `, "
");
+ }
+ }
+ }
+
+ // Strip TSDoc comments
+ content = content.replace(/\n@param.+/, "");
+ content = content.replace(/\n@return.+/, "");
+
+ sections.push({
+ content,
+ intent
+ });
+ }
+
+ return sections;
+}
+
+const INTENT_FLAGS = {
+ "❌": "danger",
+ "NOTE:": "none",
+ ℹ️: "primary",
+ "✅": "success",
+ "⚠️": "warning"
+};
diff --git a/scripts/utils/docs/propsToTable.ts b/scripts/utils/docs/propsToTable.ts
new file mode 100644
index 0000000..7cd96ae
--- /dev/null
+++ b/scripts/utils/docs/propsToTable.ts
@@ -0,0 +1,48 @@
+import { marked } from "marked";
+import type { PropItem } from "react-docgen-typescript";
+import { getPropTypeText } from "./getPropTypeText.ts";
+
+const TABLE_TAG_START = `
+
+
+
+ Name
+ Description
+
+
+ `;
+
+const PROP_ROW = `
+
+ [[name]]
+ [[description]]
+ `;
+
+const TABLE_TAG_STOP = `
+
+
+`;
+
+export async function propsToTable(props: PropItem[]) {
+ const htmlStrings = [];
+
+ if (props.length > 0) {
+ htmlStrings.push(TABLE_TAG_START);
+
+ for (const prop of props) {
+ const type = getPropTypeText(prop);
+
+ const description = await marked(prop.description);
+
+ htmlStrings.push(
+ PROP_ROW.replace("[[name]]", prop.name)
+ .replace("[[type]]", type)
+ .replace("[[description]]", description)
+ );
+ }
+
+ htmlStrings.push(TABLE_TAG_STOP);
+ }
+
+ return htmlStrings.join("");
+}
diff --git a/scripts/utils/getFilesWithExtensions.ts b/scripts/utils/getFilesWithExtensions.ts
new file mode 100644
index 0000000..8e9dd33
--- /dev/null
+++ b/scripts/utils/getFilesWithExtensions.ts
@@ -0,0 +1,31 @@
+import { readdir } from "fs/promises";
+import { extname, join } from "node:path";
+
+export async function getFilesWithExtensions(
+ directory: string,
+ extensions: string[],
+ filter?: (path: string) => boolean
+) {
+ const files: string[] = [];
+
+ const entries = await readdir(directory, { withFileTypes: true });
+
+ for (const entry of entries) {
+ const fullPath = join(directory, entry.name);
+
+ if (entry.isDirectory()) {
+ files.push(
+ ...(await getFilesWithExtensions(fullPath, extensions, filter))
+ );
+ } else if (entry.isFile()) {
+ const fileExtension = extname(entry.name);
+ if (extensions.includes(fileExtension)) {
+ if (typeof filter !== "function" || filter(fullPath)) {
+ files.push(fullPath);
+ }
+ }
+ }
+ }
+
+ return files;
+}
diff --git a/scripts/utils/initialize.ts b/scripts/utils/initialize.ts
new file mode 100644
index 0000000..ffdfba6
--- /dev/null
+++ b/scripts/utils/initialize.ts
@@ -0,0 +1,34 @@
+import { mkdir } from "node:fs/promises";
+import { join } from "node:path";
+import { cwd } from "node:process";
+import { getFilesWithExtensions } from "./getFilesWithExtensions.ts";
+import { rmFilesWithExtensions } from "./rmFilesWithExtensions.ts";
+
+export async function initialize({
+ fileExtensions,
+ fileFilter,
+ inputPath,
+ outputDirName
+}: {
+ fileExtensions: string[];
+ fileFilter?: (path: string) => boolean;
+ inputPath: string[];
+ outputDirName: string;
+}) {
+ const inputDir = join(cwd(), ...inputPath);
+ const outputDir = join(cwd(), "public", "generated", outputDirName);
+ await mkdir(outputDir, { recursive: true });
+ await rmFilesWithExtensions(outputDir, [".json"]);
+
+ const files = await getFilesWithExtensions(
+ inputDir,
+ fileExtensions,
+ fileFilter
+ );
+
+ return {
+ files,
+ inputDir,
+ outputDir
+ };
+}
diff --git a/scripts/utils/rmFilesWithExtensions.ts b/scripts/utils/rmFilesWithExtensions.ts
new file mode 100644
index 0000000..29eb30b
--- /dev/null
+++ b/scripts/utils/rmFilesWithExtensions.ts
@@ -0,0 +1,13 @@
+import { rm } from "fs/promises";
+import { getFilesWithExtensions } from "./getFilesWithExtensions.ts";
+
+export async function rmFilesWithExtensions(
+ directory: string,
+ extensions: string[]
+) {
+ const files = await getFilesWithExtensions(directory, extensions);
+
+ for (const file of files) {
+ await rm(file);
+ }
+}
diff --git a/scripts/utils/syntax-highlight.ts b/scripts/utils/syntax-highlight.ts
new file mode 100644
index 0000000..abd8926
--- /dev/null
+++ b/scripts/utils/syntax-highlight.ts
@@ -0,0 +1,255 @@
+import { htmlLanguage } from "@codemirror/lang-html";
+import {
+ jsxLanguage,
+ tsxLanguage,
+ typescriptLanguage
+} from "@codemirror/lang-javascript";
+import { ensureSyntaxTree, LRLanguage } from "@codemirror/language";
+import { EditorState } from "@codemirror/state";
+import { classHighlighter, highlightTree } from "@lezer/highlight";
+import { type BuiltInParserName } from "prettier";
+
+type TokenType = string;
+type Token = {
+ columnIndex: number;
+ type: TokenType | null;
+ value: string;
+};
+
+export type Language = "HTML" | "JS" | "JSX" | "TS" | "TSX";
+
+type State = {
+ parsedTokens: Token[];
+ rawString: string;
+};
+
+export const DEFAULT_MAX_CHARACTERS = 500000;
+export const DEFAULT_MAX_TIME = 5000;
+
+export async function syntaxHighlight(code: string, language: Language) {
+ let extension: LRLanguage;
+ let prettierParser: BuiltInParserName;
+ switch (language) {
+ case "HTML": {
+ extension = htmlLanguage.configure({ dialect: "selfClosing" });
+ prettierParser = "html";
+ break;
+ }
+ case "JS":
+ case "JSX": {
+ extension = jsxLanguage;
+ prettierParser = "babel";
+ break;
+ }
+ case "TS": {
+ extension = typescriptLanguage;
+ prettierParser = "typescript";
+ break;
+ }
+ case "TSX": {
+ extension = tsxLanguage;
+ prettierParser = "typescript";
+ break;
+ }
+ }
+ if (!extension) {
+ console.error("Unsupported language %o", language);
+ }
+
+ const tokens = await parser(code, extension, prettierParser);
+
+ return tokens.map(parsedTokensToHtml).join("\n");
+}
+
+async function parser(
+ code: string,
+ languageExtension: LRLanguage,
+
+ // @ts-expect-error TS6133
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ prettierParser: BuiltInParserName
+) {
+ const parsedTokens: Token[][] = [];
+ const currentLineState: State = {
+ parsedTokens: [],
+ rawString: ""
+ };
+
+ // The logic below to trim code sections only works with "\n"
+ code = code.replace(/\r\n?|\n|\u2028|\u2029/g, "\n");
+ if (code.length > DEFAULT_MAX_CHARACTERS) {
+ let index = DEFAULT_MAX_CHARACTERS - 1;
+ while (index > 0 && code.charAt(index) !== "\n") {
+ index--;
+ }
+ if (index === 0) {
+ while (index < code.length && code.charAt(index) !== "\n") {
+ index++;
+ }
+ }
+ code = code.slice(0, index + 1);
+ }
+
+ // In the future I may want to (re)format code examples for different screen widths
+ // code = await format(code, {
+ // parser: prettierParser,
+ // plugins: ["prettier-plugin-tailwindcss"],
+ // printWidth: 100,
+ // proseWrap: "always",
+ // semi: true
+ // });
+
+ const state = EditorState.create({
+ doc: code,
+ extensions: [languageExtension]
+ });
+
+ const tree = ensureSyntaxTree(
+ state,
+ DEFAULT_MAX_CHARACTERS,
+ DEFAULT_MAX_TIME
+ );
+
+ if (tree === null) {
+ return [];
+ }
+
+ let characterIndex = 0;
+ let parsedCharacterIndex = 0;
+ highlightTree(
+ tree,
+ classHighlighter,
+ (from: number, to: number, className: string) => {
+ if (from > characterIndex) {
+ // No style applied to the token between position and from.
+ // This typically indicates white space or newline characters.
+ processSection(
+ currentLineState,
+ parsedTokens,
+ code.slice(characterIndex, from),
+ ""
+ );
+ }
+ processSection(
+ currentLineState,
+ parsedTokens,
+ code.slice(from, to),
+ className
+ );
+ characterIndex = to;
+ }
+ );
+
+ const maxPosition = code.length;
+
+ if (characterIndex < maxPosition) {
+ // No style applied on the trailing text.
+ // This typically indicates white space or newline characters.
+ processSection(
+ currentLineState,
+ parsedTokens,
+ code.slice(characterIndex, maxPosition),
+ ""
+ );
+ }
+ if (currentLineState.parsedTokens.length) {
+ parsedTokens.push(currentLineState.parsedTokens);
+ }
+
+ parsedCharacterIndex += characterIndex + 1;
+
+ // Anything that's left should de-opt to plain text.
+ if (parsedCharacterIndex < code.length) {
+ let nextIndex = code.indexOf("\n", parsedCharacterIndex);
+ let parsedLineTokens = [];
+ while (true) {
+ const line =
+ nextIndex >= 0
+ ? code.substring(parsedCharacterIndex, nextIndex)
+ : code.substring(parsedCharacterIndex);
+ parsedLineTokens.push({
+ columnIndex: 0,
+ type: null,
+ value: line
+ });
+ if (nextIndex >= 0) {
+ parsedTokens.push(parsedLineTokens);
+ parsedLineTokens = [];
+ } else if (nextIndex === -1) {
+ break;
+ }
+ parsedCharacterIndex = nextIndex + 1;
+ nextIndex = code.indexOf("\n", parsedCharacterIndex);
+ }
+ if (parsedLineTokens.length) {
+ parsedTokens.push(parsedLineTokens);
+ }
+ }
+
+ return parsedTokens;
+}
+
+function processSection(
+ currentLineState: State,
+ parsedTokens: Token[][],
+ section: string,
+ className: string
+) {
+ // Remove "tok-" prefix;
+ const tokenType =
+ className === null || className === void 0
+ ? null
+ : className.substring(4) || null;
+
+ let index = 0;
+ let nextIndex = section.indexOf("\n");
+ while (true) {
+ const substring =
+ nextIndex >= 0
+ ? section.substring(index, nextIndex)
+ : section.substring(index);
+ const token: Token = {
+ columnIndex: currentLineState.rawString.length,
+ type: tokenType,
+ value: substring
+ };
+ currentLineState.parsedTokens.push(token);
+ currentLineState.rawString += substring;
+ if (nextIndex === -1) {
+ break;
+ }
+ if (nextIndex >= 0) {
+ parsedTokens.push(currentLineState.parsedTokens);
+ currentLineState.parsedTokens = [];
+ currentLineState.rawString = "";
+ }
+ index = nextIndex + 1;
+ nextIndex = section.indexOf("\n", index);
+ }
+}
+
+function parsedTokensToHtml(tokens: Token[]) {
+ const htmlStrings = tokens.map((token) => {
+ const className = token.type ? `tok-${token.type}` : "";
+ const escapedValue = escapeHtmlEntities(token.value);
+
+ return `${escapedValue} `;
+ });
+
+ // Edge case to avoid empty line
+ let htmlString = htmlStrings.join("");
+ if (tokens.length <= 1) {
+ if (!tokens[0].value) {
+ htmlString = " ";
+ }
+ }
+
+ return `${htmlString}
`;
+}
+
+function escapeHtmlEntities(rawString: string) {
+ return rawString.replace(
+ /[\u00A0-\u9999<>&]/g,
+ (substring) => "" + substring.charCodeAt(0) + ";"
+ );
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..2394e8c
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,117 @@
+import { Bars4Icon, XMarkIcon } from "@heroicons/react/20/solid";
+import { BrowserRouter, Route, Routes } from "react-router-dom";
+import GitHubIcon from "../public/svgs/github.svg?react";
+import NpmHubIcon from "../public/svgs/npm.svg?react";
+import { Box } from "./components/Box";
+import { ErrorBoundary } from "./components/ErrorBoundary";
+import { ExternalLink } from "./components/ExternalLink";
+import { Link } from "./components/Link";
+import { RouteChangeHandler } from "./components/RouteChangeHandler";
+import { useNavStore } from "./hooks/useNavStore";
+import { Nav } from "./nav/Nav";
+import { routes } from "./routes";
+import { cn } from "./utils/cn";
+
+export default function App() {
+ const { toggle, visible } = useNavStore();
+
+ return (
+
+
+
+
+
+
+
+
+ (re)sizing helper component
+
+
+
+
+
+
+
+
+
+
+ {visible ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+
+ {Object.entries(routes).map(([path, Component]) => (
+
+
+
+ }
+ key={path}
+ path={path}
+ />
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/src/AutoSizer.ssr.test.tsx b/src/AutoSizer.ssr.test.tsx
deleted file mode 100644
index 5da0c91..0000000
--- a/src/AutoSizer.ssr.test.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * @jest-environment node
- */
-
-import { renderToString } from "react-dom/server";
-import { AutoSizer } from "./AutoSizer";
-import { Size } from "./types";
-
-test("should render content with default widths and heights initially", () => {
- const rendered = renderToString(
-
- {({ height, width }: Size) => (
- {`height:${height};width:${width}`}
- )}
-
- );
- expect(rendered).toContain("height:100");
- expect(rendered).toContain("width:200");
-});
diff --git a/src/AutoSizer.test.tsx b/src/AutoSizer.test.tsx
deleted file mode 100644
index e4e3df5..0000000
--- a/src/AutoSizer.test.tsx
+++ /dev/null
@@ -1,464 +0,0 @@
-/**
- * @jest-environment jsdom
- */
-
-import { CSSProperties } from "react";
-import { createRoot } from "react-dom/client";
-import { act } from "react-dom/test-utils";
-import { AutoSizer } from "./AutoSizer";
-import {
- HeightOnlyProps,
- Props,
- Size,
- WidthOnlyProps,
- isHeightOnlyProps,
- isWidthOnlyProps,
-} from "./types";
-
-// AutoSizer uses measurements APIs that JSDOm doesn't support.
-function mockOffsetSize(width: number, height: number) {
- Object.defineProperty(HTMLElement.prototype, "getBoundingClientRect", {
- configurable: true,
- value: () => ({ height, width }),
- });
- Object.defineProperty(HTMLElement.prototype, "offsetHeight", {
- configurable: true,
- value: height,
- });
- Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
- configurable: true,
- value: width,
- });
-}
-
-function DefaultChildComponent({
- bar,
- foo,
- height,
- width,
-}: {
- bar: any;
- foo: any;
- height?: number;
- width?: number;
-}) {
- return (
- {`width:${width}, height:${height}, foo:${foo}, bar:${bar}`}
- );
-}
-
-async function simulateResize({
- element,
- height,
- width,
-}: {
- element: HTMLElement;
- height: number;
- width: number;
-}) {
- mockOffsetSize(width, height);
-
- await act(async () => {
- // Trigger detectElementResize library by faking a scroll event
- // TestUtils Simulate doesn't work here in JSDom so we manually dispatch
- const trigger = element.querySelector(".contract-trigger");
- trigger?.dispatchEvent(new Event("scroll"));
-
- // Allow requestAnimationFrame to be invoked before continuing
- await new Promise((resolve) => setTimeout(resolve, 100));
- });
-}
-
-describe("AutoSizer", () => {
- let container: HTMLDivElement;
-
- beforeEach(() => {
- // @ts-ignore
- global.IS_REACT_ACT_ENVIRONMENT = true;
-
- jest.resetAllMocks();
- });
-
- function renderHelper(
- {
- bar = 123,
- ChildComponent = DefaultChildComponent,
- excludeWrapperStyling = false,
- foo = 456,
- height = 100,
- paddingBottom = 0,
- paddingLeft = 0,
- paddingRight = 0,
- paddingTop = 0,
- width = 200,
- } = {},
- props: Omit = {}
- ) {
- const wrapperStyle: CSSProperties = {
- boxSizing: "border-box",
- height,
- paddingBottom,
- paddingLeft,
- paddingRight,
- paddingTop,
- width,
- };
-
- const {
- disableHeight = false,
- disableWidth = false,
- doNotBailOutOnEmptyChildren,
- ...rest
- } = props;
-
- mockOffsetSize(width, height);
-
- container = document.createElement("div");
-
- const root = createRoot(container);
- act(() => {
- root.render(
-
-
- {({ height, width }: Size) => (
-
- )}
-
-
- );
- });
- }
-
- it("should relay properties to ChildComponent or React child", () => {
- renderHelper();
-
- expect(container.textContent).toContain("foo:456");
- expect(container.textContent).toContain("bar:123");
- });
-
- it("should set the correct initial width and height of ChildComponent or React child", () => {
- renderHelper();
-
- expect(container.textContent).toContain("height:100");
- expect(container.textContent).toContain("width:200");
- });
-
- it("should not render children for elements that occupy no space in the DOM", () => {
- renderHelper({
- excludeWrapperStyling: true,
- height: 0,
- width: 0,
- });
- expect(container.textContent).toEqual("");
-
- renderHelper({
- excludeWrapperStyling: true,
- height: 100,
- width: 0,
- });
- expect(container.textContent).toEqual("");
-
- renderHelper({
- excludeWrapperStyling: true,
- height: 0,
- width: 100,
- });
- expect(container.textContent).toEqual("");
- });
-
- it("should render children for elements that occupy no space in the DOM if requested", () => {
- renderHelper(
- {
- excludeWrapperStyling: true,
- height: 0,
- width: 0,
- },
- { doNotBailOutOnEmptyChildren: true }
- );
- expect(container.textContent).toBe("width:0, height:0, foo:456, bar:123");
-
- renderHelper(
- {
- excludeWrapperStyling: true,
- height: 100,
- width: 0,
- },
- { doNotBailOutOnEmptyChildren: true }
- );
- expect(container.textContent).toBe("width:0, height:100, foo:456, bar:123");
-
- renderHelper(
- {
- excludeWrapperStyling: true,
- height: 0,
- width: 100,
- },
- { doNotBailOutOnEmptyChildren: true }
- );
- expect(container.textContent).toBe("width:100, height:0, foo:456, bar:123");
- });
-
- it("should account for padding when calculating the available width and height", () => {
- renderHelper({
- paddingBottom: 10,
- paddingLeft: 4,
- paddingRight: 4,
- paddingTop: 15,
- });
-
- expect(container.textContent).toContain("height:75");
- expect(container.textContent).toContain("width:192");
- });
-
- it("should account for non-integer padding values when calculating the available width and height", () => {
- renderHelper({
- paddingBottom: 10.5,
- paddingLeft: 4.2,
- paddingRight: 4.1,
- paddingTop: 15.4,
- });
-
- expect(container.textContent).toContain("height:74.1");
- expect(container.textContent).toContain("width:191.7");
- });
-
- it("should not update :width if :disableWidth is true", () => {
- renderHelper({}, { disableWidth: true } as HeightOnlyProps);
-
- expect(container.textContent).toContain("height:100");
- expect(container.textContent).toContain("width:undefined");
- });
-
- it("should not update :height if :disableHeight is true", () => {
- renderHelper({}, { disableHeight: true } as WidthOnlyProps);
-
- expect(container.textContent).toContain("height:undefined");
- expect(container.textContent).toContain("width:200");
- });
-
- it("should update :height after a resize event", async () => {
- renderHelper({
- height: 100,
- width: 200,
- });
-
- expect(container.textContent).toContain("height:100");
- expect(container.textContent).toContain("width:200");
-
- await simulateResize({ element: container, height: 400, width: 300 });
-
- expect(container.textContent).toContain("height:400");
- expect(container.textContent).toContain("width:300");
- });
-
- describe("onResize and (re)render", () => {
- it("should trigger when size changes", async () => {
- const onResize = jest.fn();
- const ChildComponent = jest
- .fn()
- .mockImplementation(DefaultChildComponent);
-
- renderHelper(
- {
- ChildComponent,
- height: 100,
- width: 200,
- },
- {
- onResize,
- }
- );
-
- ChildComponent.mockClear(); // TODO Improve initial check in version 10; see AutoSizer render()
-
- expect(onResize).toHaveBeenCalledTimes(1);
-
- await simulateResize({ element: container, height: 400, width: 300 });
-
- expect(ChildComponent).toHaveBeenCalledTimes(1);
- expect(onResize).toHaveBeenCalledTimes(2);
- });
-
- it("should only trigger when height changes for disableWidth == true", async () => {
- const onResize = jest.fn();
-
- const ChildComponent = jest
- .fn()
- .mockImplementation(DefaultChildComponent);
-
- renderHelper(
- {
- ChildComponent,
- height: 100,
- width: 200,
- },
- {
- disableWidth: true,
- onResize,
- } as Omit
- );
-
- ChildComponent.mockClear(); // TODO Improve initial check in version 10; see AutoSizer render()
-
- expect(onResize).toHaveBeenCalledTimes(1);
-
- await simulateResize({ element: container, height: 100, width: 300 });
-
- expect(ChildComponent).toHaveBeenCalledTimes(0);
- expect(onResize).toHaveBeenCalledTimes(1);
-
- await simulateResize({ element: container, height: 200, width: 300 });
-
- expect(ChildComponent).toHaveBeenCalledTimes(1);
- expect(onResize).toHaveBeenCalledTimes(2);
- });
-
- it("should only trigger when width changes for disableHeight == true", async () => {
- const onResize = jest.fn();
- const ChildComponent = jest
- .fn()
- .mockImplementation(DefaultChildComponent);
-
- renderHelper(
- {
- ChildComponent,
- height: 100,
- width: 200,
- },
- {
- disableHeight: true,
- onResize,
- } as Omit
- );
-
- ChildComponent.mockClear(); // TODO Improve initial check in version 10; see AutoSizer render()
-
- expect(onResize).toHaveBeenCalledTimes(1);
-
- await simulateResize({ element: container, height: 200, width: 200 });
-
- expect(ChildComponent).toHaveBeenCalledTimes(0);
- expect(onResize).toHaveBeenCalledTimes(1);
-
- await simulateResize({ element: container, height: 200, width: 300 });
-
- expect(ChildComponent).toHaveBeenCalledTimes(1);
- expect(onResize).toHaveBeenCalledTimes(2);
- });
-
- it("should warn if deprecated scaledHeight accessor is used", async () => {
- const consoleWarnSpy = jest
- .spyOn(console, "warn")
- .mockImplementation(() => {});
-
- // Destructure syntax should warn too
- const onResize = jest.fn(({ height, scaledHeight }) => {
- expect(consoleWarnSpy).toHaveBeenCalledTimes(1);
- expect(consoleWarnSpy).toHaveBeenCalledWith(
- "scaledWidth and scaledHeight parameters have been deprecated; use width and height instead"
- );
-
- expect(height).toBe(100.5);
- expect(scaledHeight).toBe(100.5);
- });
-
- const ChildComponent = jest
- .fn()
- .mockImplementation(DefaultChildComponent);
-
- renderHelper(
- {
- ChildComponent,
- height: 100.5,
- width: 200.5,
- },
- {
- disableHeight: true,
- onResize,
- }
- );
-
- expect(onResize).toHaveBeenCalledTimes(1);
- });
-
- it("should warn if deprecated scaledWidth accessor is used", async () => {
- const consoleWarnSpy = jest
- .spyOn(console, "warn")
- .mockImplementation(() => {});
-
- const onResize = jest.fn((params) => {
- expect(params.width).toBe(200.5);
- expect(consoleWarnSpy).not.toHaveBeenCalled();
-
- // Should be called when first accessed
- expect(params.scaledWidth).toBe(200.5);
- expect(consoleWarnSpy).toHaveBeenCalledTimes(1);
- expect(consoleWarnSpy).toHaveBeenCalledWith(
- "scaledWidth and scaledHeight parameters have been deprecated; use width and height instead"
- );
-
- // Should not be called again
- expect(params.scaledWidth).toBe(200.5);
- expect(consoleWarnSpy).toHaveBeenCalledTimes(1);
- });
-
- const ChildComponent = jest
- .fn()
- .mockImplementation(DefaultChildComponent);
-
- renderHelper(
- {
- ChildComponent,
- height: 100.5,
- width: 200.5,
- },
- {
- disableHeight: true,
- onResize,
- }
- );
-
- expect(onResize).toHaveBeenCalledTimes(1);
- });
- });
-
- describe("HTML attributes", () => {
- it("should pass along :className attribute if specified", () => {
- renderHelper({}, { className: "foo", id: "auto-sizer" });
-
- const element = container.querySelector("#auto-sizer") as HTMLDivElement;
- expect(element.className).toContain("foo");
- });
-
- it("should pass along custom :style values if specified", () => {
- renderHelper({}, { id: "auto-sizer", style: { backgroundColor: "red" } });
-
- const element = container.querySelector("#auto-sizer") as HTMLDivElement;
- expect(element.style.backgroundColor).toEqual("red");
- });
-
- it("should support arbitrary HTML attributes like role", () => {
- renderHelper({}, { id: "auto-sizer", role: "none" });
-
- const element = container.querySelector("#auto-sizer") as HTMLDivElement;
- expect(element.getAttribute("role")).toEqual("none");
- });
- });
-
- it("should support a different tagName", () => {
- renderHelper({}, { id: "auto-sizer", tagName: "span" });
-
- const element = container.querySelector("#auto-sizer") as HTMLDivElement;
- expect(element.tagName).toEqual("SPAN");
- });
-});
diff --git a/src/AutoSizer.ts b/src/AutoSizer.ts
deleted file mode 100644
index e2d4bff..0000000
--- a/src/AutoSizer.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-import { Component, createElement, CSSProperties, ReactNode } from "react";
-
-import {
- createDetectElementResize,
- DetectElementResize,
-} from "./vendor/detectElementResize";
-import { HeightAndWidthProps, Props, Size } from "./types";
-
-type State = {
- height: number;
- width: number;
-};
-
-export class AutoSizer extends Component {
- state = {
- height: (this.props as HeightAndWidthProps).defaultHeight || 0,
- width: (this.props as HeightAndWidthProps).defaultWidth || 0,
- };
-
- _autoSizer: HTMLElement | null = null;
- _detectElementResize: DetectElementResize | null = null;
- _didLogDeprecationWarning = false;
- _parentNode: HTMLElement | null = null;
- _resizeObserver: ResizeObserver | null = null;
- _timeoutId: number | null = null;
-
- componentDidMount() {
- const { nonce } = this.props;
- const parentNode = this._autoSizer ? this._autoSizer.parentNode : null;
-
- if (
- parentNode != null &&
- parentNode.ownerDocument &&
- parentNode.ownerDocument.defaultView &&
- parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement
- ) {
- // Delay access of parentNode until mount.
- // This handles edge-cases where the component has already been unmounted before its ref has been set,
- // As well as libraries like react-lite which have a slightly different lifecycle.
- this._parentNode = parentNode;
-
- // Use ResizeObserver from the same context where parentNode (which we will observe) was defined
- // Using just global can result into onResize events not being emitted in cases with multiple realms
- const ResizeObserverInstance =
- parentNode.ownerDocument.defaultView.ResizeObserver;
-
- if (ResizeObserverInstance != null) {
- this._resizeObserver = new ResizeObserverInstance(() => {
- // Guard against "ResizeObserver loop limit exceeded" error;
- // could be triggered if the state update causes the ResizeObserver handler to run long.
- // See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55
- this._timeoutId = setTimeout(this._onResize, 0);
- });
- this._resizeObserver.observe(parentNode);
- } else {
- // Defer requiring resize handler in order to support server-side rendering.
- // See issue #41
- this._detectElementResize = createDetectElementResize(nonce);
- this._detectElementResize.addResizeListener(parentNode, this._onResize);
- }
-
- this._onResize();
- }
- }
-
- componentWillUnmount() {
- if (this._parentNode) {
- if (this._detectElementResize) {
- this._detectElementResize.removeResizeListener(
- this._parentNode,
- this._onResize
- );
- }
-
- if (this._timeoutId !== null) {
- clearTimeout(this._timeoutId);
- }
-
- if (this._resizeObserver) {
- this._resizeObserver.disconnect();
- }
- }
- }
-
- render(): ReactNode {
- const {
- children,
- defaultHeight,
- defaultWidth,
- disableHeight = false,
- disableWidth = false,
- doNotBailOutOnEmptyChildren = false,
- nonce,
- onResize,
- style = {},
- tagName = "div",
- ...rest
- } = this.props as HeightAndWidthProps;
-
- const { height, width } = this.state;
-
- // Outer div should not force width/height since that may prevent containers from shrinking.
- // Inner component should overflow and use calculated width/height.
- // See issue #68 for more information.
- const outerStyle: CSSProperties = { overflow: "visible" };
- const childParams: Partial = {};
-
- // Avoid rendering children before the initial measurements have been collected.
- // At best this would just be wasting cycles.
- let bailoutOnChildren = false;
-
- if (!disableHeight) {
- if (height === 0) {
- bailoutOnChildren = true;
- }
- outerStyle.height = 0;
- childParams.height = height;
-
- // TODO Remove this in the next major release
- childParams.scaledHeight = height;
- }
-
- if (!disableWidth) {
- if (width === 0) {
- bailoutOnChildren = true;
- }
- outerStyle.width = 0;
- childParams.width = width;
-
- // TODO Remove this in the next major release
- childParams.scaledWidth = width;
- }
-
- if (doNotBailOutOnEmptyChildren) {
- bailoutOnChildren = false;
- }
-
- return createElement(
- tagName,
- {
- ref: this._setRef,
- style: {
- ...outerStyle,
- ...style,
- },
- ...rest,
- },
- !bailoutOnChildren && children(childParams as Size)
- );
- }
-
- _onResize = () => {
- this._timeoutId = null;
-
- const { disableHeight, disableWidth, onResize } = this
- .props as HeightAndWidthProps;
-
- if (this._parentNode) {
- // Guard against AutoSizer component being removed from the DOM immediately after being added.
- // This can result in invalid style values which can result in NaN values if we don't handle them.
- // See issue #150 for more context.
-
- const style = window.getComputedStyle(this._parentNode) || {};
- const paddingLeft = parseFloat(style.paddingLeft || "0");
- const paddingRight = parseFloat(style.paddingRight || "0");
- const paddingTop = parseFloat(style.paddingTop || "0");
- const paddingBottom = parseFloat(style.paddingBottom || "0");
-
- const rect = this._parentNode.getBoundingClientRect();
- const height = rect.height - paddingTop - paddingBottom;
- const width = rect.width - paddingLeft - paddingRight;
-
- if (
- (!disableHeight && this.state.height !== height) ||
- (!disableWidth && this.state.width !== width)
- ) {
- this.setState({
- height,
- width,
- });
-
- const maybeLogDeprecationWarning = () => {
- if (!this._didLogDeprecationWarning) {
- this._didLogDeprecationWarning = true;
-
- console.warn(
- "scaledWidth and scaledHeight parameters have been deprecated; use width and height instead"
- );
- }
- };
-
- if (typeof onResize === "function") {
- onResize({
- height,
- width,
-
- // TODO Remove these params in the next major release
- get scaledHeight() {
- maybeLogDeprecationWarning();
- return height;
- },
- get scaledWidth() {
- maybeLogDeprecationWarning();
- return width;
- },
- });
- }
- }
- }
- };
-
- _setRef = (autoSizer: HTMLElement | null) => {
- this._autoSizer = autoSizer;
- };
-}
diff --git a/src/components/Block.tsx b/src/components/Block.tsx
new file mode 100644
index 0000000..679a0e5
--- /dev/null
+++ b/src/components/Block.tsx
@@ -0,0 +1,19 @@
+import type { HTMLAttributes, PropsWithChildren } from "react";
+import { ErrorBoundary } from "./ErrorBoundary";
+
+export function Block({
+ children,
+ className,
+ ...rest
+}: PropsWithChildren & { className?: string }>) {
+ return (
+
+
+ {children}
+
+
+ );
+}
diff --git a/src/components/Box.tsx b/src/components/Box.tsx
new file mode 100644
index 0000000..936faa5
--- /dev/null
+++ b/src/components/Box.tsx
@@ -0,0 +1,86 @@
+import type { CSSProperties, HTMLAttributes } from "react";
+import { cn } from "../utils/cn";
+
+export function Box({
+ align,
+ children,
+ className,
+ direction,
+ gap = 0,
+ grow,
+ justify,
+ shrink,
+ style,
+ wrap,
+ ...rest
+}: HTMLAttributes & {
+ align?: "center" | "end" | "start" | "stretch" | undefined;
+ className?: string | undefined;
+ direction: "column" | "row";
+ gap?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | undefined;
+ grow?: 0 | 1 | undefined;
+ justify?:
+ | "around"
+ | "between"
+ | "center"
+ | "end"
+ | "start"
+ | "stretch"
+ | undefined;
+ shrink?: 0 | 1 | undefined;
+ style?: CSSProperties | undefined;
+ wrap?: boolean | undefined;
+}) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
new file mode 100644
index 0000000..e3ef221
--- /dev/null
+++ b/src/components/Button.tsx
@@ -0,0 +1,62 @@
+import { Button as HeadlessButton } from "@headlessui/react";
+import type { MouseEvent, PropsWithChildren } from "react";
+import type { Intent } from "../types";
+import { cn } from "../utils/cn";
+
+export function Button({
+ children,
+ className,
+ disabled = false,
+ intent = "none",
+ ...rest
+}: PropsWithChildren<{
+ className?: string | undefined;
+ disabled?: boolean | undefined;
+ intent?: Intent | undefined;
+ onClick?: ((event: MouseEvent) => void) | undefined;
+}>) {
+ return (
+
+ {children}
+
+ );
+}
+
+function getClassNames(intent: Intent, disabled: boolean) {
+ switch (intent) {
+ case "danger": {
+ return cn("bg-red-400 text-red-800 focus:text-black", {
+ "hover:bg-red-500 hover:text-red-950 focus:text-black": !disabled
+ });
+ }
+ case "none": {
+ return cn("bg-emerald-400 text-emerald-800 focus:text-black", {
+ "hover:bg-emerald-500 hover:text-emerald-950 focus:text-black":
+ !disabled
+ });
+ }
+ case "success":
+ case "primary": {
+ return cn("bg-sky-400 text-sky-800 focus:text-black", {
+ "hover:bg-sky-500 hover:text-sky-950 focus:text-black": !disabled
+ });
+ }
+ case "warning": {
+ return cn("bg-amber-400 text-amber-800 focus:text-black", {
+ "hover:bg-amber-500 hover:text-amber-950 focus:text-black": !disabled
+ });
+ }
+ }
+}
diff --git a/src/components/Callout.tsx b/src/components/Callout.tsx
new file mode 100644
index 0000000..1e3bc98
--- /dev/null
+++ b/src/components/Callout.tsx
@@ -0,0 +1,90 @@
+import {
+ CheckCircleIcon,
+ ExclamationTriangleIcon,
+ InformationCircleIcon
+} from "@heroicons/react/20/solid";
+import type { HTMLAttributes, PropsWithChildren } from "react";
+import type { Intent } from "../types";
+
+export function Callout({
+ children,
+ className,
+ html = false,
+ inline = false,
+ intent = "none",
+ minimal,
+ ...rest
+}: PropsWithChildren<
+ HTMLAttributes & {
+ className?: string | undefined;
+ html?: boolean;
+ inline?: boolean;
+ intent?: Intent;
+ minimal?: boolean;
+ }
+>) {
+ let Icon = ExclamationTriangleIcon;
+ switch (intent) {
+ case "none":
+ case "primary": {
+ Icon = InformationCircleIcon;
+ break;
+ }
+ case "success": {
+ Icon = CheckCircleIcon;
+ break;
+ }
+ }
+
+ return (
+
+
+
+ {html ? (
+
+ ) : (
+
{children}
+ )}
+
+
+ );
+}
+
+function getClassNames(intent: Intent, minimal: boolean) {
+ switch (intent) {
+ case "danger": {
+ if (minimal) {
+ return "bg-red-950 text-red-300 [&_svg]:text-red-500";
+ }
+ return "bg-black/10 bg-border border-2 border-red-500 text-white [&_svg]:text-red-500 [&_a]:text-red-400!";
+ }
+ case "none": {
+ if (minimal) {
+ return "bg-white/10 text-slate-300 [&_svg]:text-slate-400";
+ }
+ return "bg-black/10 bg-border border-2 border-white/40 text-white [&_svg]:text-white/60";
+ }
+ case "primary": {
+ if (minimal) {
+ return "bg-sky-950 text-sky-300 [&_svg]:text-sky-400";
+ }
+ return "bg-black/10 bg-border border-2 border-sky-400 text-white [&_svg]:text-sky-400";
+ }
+ case "success": {
+ if (minimal) {
+ return "bg-emerald-950 text-emerald-300 [&_svg]:text-emerald-400";
+ }
+ return "bg-black/10 bg-border border-2 border-emerald-400 text-white [&_svg]:text-emerald-400";
+ }
+ case "warning": {
+ if (minimal) {
+ return "bg-amber-950/65 text-amber-200 [&_svg]:text-amber-300";
+ }
+ return "bg-black/10 bg-border border-2 border-amber-400 text-white [&_svg]:text-amber-400 [&_a]:text-amber-400!";
+ }
+ }
+}
diff --git a/src/components/Checkbox.tsx b/src/components/Checkbox.tsx
new file mode 100644
index 0000000..93375c9
--- /dev/null
+++ b/src/components/Checkbox.tsx
@@ -0,0 +1,57 @@
+import {
+ type FunctionComponent,
+ type HTMLAttributes,
+ type PropsWithChildren,
+ type SVGProps
+} from "react";
+import CheckedIcon from "../../public/svgs/checkbox-checked.svg?react";
+import IndeterminateIcon from "../../public/svgs/checkbox-indeterminate.svg?react";
+import UncheckedIcon from "../../public/svgs/checkbox-unchecked.svg?react";
+
+export function Checkbox({
+ checked,
+ children,
+ className,
+ indeterminate,
+ onChange,
+ ...rest
+}: PropsWithChildren<
+ Omit, "defaultChecked" | "onChange"> & {
+ checked: boolean;
+ className?: string | undefined;
+ indeterminate?: boolean;
+ onChange: (value: boolean) => void;
+ }
+>) {
+ let IconElement: FunctionComponent>;
+ let iconClassName: string;
+ if (indeterminate) {
+ IconElement = IndeterminateIcon;
+ iconClassName = "fill-white";
+ } else if (checked) {
+ IconElement = CheckedIcon;
+ iconClassName = "fill-blue-600";
+ } else {
+ IconElement = UncheckedIcon;
+ iconClassName = "fill-slate-600";
+ }
+
+ return (
+
+ {
+ onChange(event.currentTarget.checked);
+ }}
+ type="checkbox"
+ />
+
+ {children && <> {children}>}
+
+ );
+}
diff --git a/src/components/ContinueLink.tsx b/src/components/ContinueLink.tsx
new file mode 100644
index 0000000..cc167c5
--- /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 (
+
+ Continue to {title}…
+
+ );
+}
diff --git a/src/components/Divider.tsx b/src/components/Divider.tsx
new file mode 100644
index 0000000..c0aae74
--- /dev/null
+++ b/src/components/Divider.tsx
@@ -0,0 +1,3 @@
+export function Divider() {
+ return ;
+}
diff --git a/src/components/DocsSection.tsx b/src/components/DocsSection.tsx
new file mode 100644
index 0000000..c6e3ca6
--- /dev/null
+++ b/src/components/DocsSection.tsx
@@ -0,0 +1,34 @@
+import type { Section } from "../types";
+import { Box } from "./Box";
+import { Callout } from "./Callout";
+
+export function DocsSection({
+ className,
+ sections
+}: {
+ className?: string;
+ sections: Section[];
+}) {
+ return (
+
+ {sections.map(({ content, intent }, index) => {
+ if (intent) {
+ return (
+
+ {content}
+
+ );
+ }
+
+ return (
+
+ );
+ })}
+
+ );
+}
diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx
new file mode 100644
index 0000000..d2200c8
--- /dev/null
+++ b/src/components/ErrorBoundary.tsx
@@ -0,0 +1,32 @@
+import type { PropsWithChildren } from "react";
+import {
+ ErrorBoundary as ErrorBoundaryExternal,
+ type FallbackProps
+} from "react-error-boundary";
+import { Callout } from "./Callout";
+import { Box } from "./Box";
+import { Button } from "./Button";
+
+export function ErrorBoundary({ children }: PropsWithChildren) {
+ return (
+
+ {children}
+
+ );
+}
+
+function FallbackComponent({ error, resetErrorBoundary }: FallbackProps) {
+ return (
+
+
+ Something went wrong!
+
+ {error.message}
+
+
+ Retry
+
+
+
+ );
+}
diff --git a/src/components/ExternalLink.tsx b/src/components/ExternalLink.tsx
new file mode 100644
index 0000000..dbec8a3
--- /dev/null
+++ b/src/components/ExternalLink.tsx
@@ -0,0 +1,21 @@
+import type { AnchorHTMLAttributes } from "react";
+
+export function ExternalLink({
+ children,
+ className,
+ href,
+ target = "_blank",
+ ...rest
+}: AnchorHTMLAttributes) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
new file mode 100644
index 0000000..c358d13
--- /dev/null
+++ b/src/components/Header.tsx
@@ -0,0 +1,33 @@
+import { ChevronRightIcon } from "@heroicons/react/20/solid";
+import { Box } from "./Box";
+import { useEffect } from "react";
+
+export function Header({
+ section,
+ title
+}: {
+ section?: string;
+ title: string;
+}) {
+ useEffect(() => {
+ const originalTitle = document.title;
+
+ document.title = `react-virtualized-auto-sizer: ${section ? `${section}: ${title}` : title}`;
+
+ return () => {
+ document.title = originalTitle;
+ };
+ });
+
+ return (
+
+ {section && (
+ <>
+ {section}
+
+ >
+ )}
+ {title}
+
+ );
+}
diff --git a/src/components/Input.tsx b/src/components/Input.tsx
new file mode 100644
index 0000000..2102c6a
--- /dev/null
+++ b/src/components/Input.tsx
@@ -0,0 +1,29 @@
+import type { InputHTMLAttributes, PropsWithChildren } from "react";
+
+export function Input({
+ children,
+ className,
+ onChange,
+ value,
+ ...rest
+}: PropsWithChildren<
+ Omit, "onChange"> & {
+ className?: string | undefined;
+ onChange: (value: Type) => void;
+ value: Type;
+ }
+>) {
+ return (
+ {
+ onChange(event.currentTarget.value as Type);
+ }}
+ value={value}
+ {...rest}
+ >
+ {children}
+
+ );
+}
diff --git a/src/components/Link.tsx b/src/components/Link.tsx
new file mode 100644
index 0000000..cb4f650
--- /dev/null
+++ b/src/components/Link.tsx
@@ -0,0 +1,12 @@
+import type { HTMLAttributes } from "react";
+import type { Path } from "../routes";
+import { TransitionLink } from "./TransitionLink";
+
+export function Link({
+ to,
+ ...rest
+}: HTMLAttributes & {
+ to: Path;
+}) {
+ return ;
+}
diff --git a/src/components/LoadingSpinner.tsx b/src/components/LoadingSpinner.tsx
new file mode 100644
index 0000000..6f61bd2
--- /dev/null
+++ b/src/components/LoadingSpinner.tsx
@@ -0,0 +1,11 @@
+import { ArrowPathIcon } from "@heroicons/react/20/solid";
+import { Box } from "./Box";
+
+export function LoadingSpinner() {
+ return (
+
+
+ Loading...
+
+ );
+}
diff --git a/src/components/Radio.tsx b/src/components/Radio.tsx
new file mode 100644
index 0000000..cd25653
--- /dev/null
+++ b/src/components/Radio.tsx
@@ -0,0 +1,56 @@
+import {
+ type FunctionComponent,
+ type HTMLAttributes,
+ type PropsWithChildren,
+ type SVGProps
+} from "react";
+import CheckedIcon from "../../public/svgs/radio-checked.svg?react";
+import UncheckedIcon from "../../public/svgs/radio-unchecked.svg?react";
+
+export function Radio({
+ checked,
+ children,
+ className,
+ name,
+ onChange,
+ value,
+ ...rest
+}: PropsWithChildren<
+ Omit, "defaultChecked" | "onChange"> & {
+ checked: boolean;
+ name: string;
+ onChange: (value: Value) => void;
+ value: Value;
+ }
+>) {
+ let IconElement: FunctionComponent>;
+ let iconClassName: string;
+ if (checked) {
+ IconElement = CheckedIcon;
+ iconClassName = "fill-blue-600";
+ } else {
+ IconElement = UncheckedIcon;
+ iconClassName = "fill-slate-600";
+ }
+
+ return (
+
+ {
+ onChange(value);
+ }}
+ type="radio"
+ value={value}
+ />
+
+ {children && <> {children}>}
+
+ );
+}
diff --git a/src/components/RouteChangeHandler.tsx b/src/components/RouteChangeHandler.tsx
new file mode 100644
index 0000000..ccf7228
--- /dev/null
+++ b/src/components/RouteChangeHandler.tsx
@@ -0,0 +1,26 @@
+import { useLayoutEffect } from "react";
+import { useLocation } from "react-router-dom";
+import { useNavStore } from "../hooks/useNavStore";
+
+export function RouteChangeHandler() {
+ const { hide } = useNavStore();
+
+ const { pathname } = useLocation();
+
+ useLayoutEffect(() => {
+ hide();
+
+ const main = document.body.querySelector("[data-main-scrollable]");
+ if (main) {
+ const timeout = setTimeout(() => {
+ main.scrollTo(0, 0);
+ }, 1);
+
+ return () => {
+ clearTimeout(timeout);
+ };
+ }
+ }, [hide, pathname]);
+
+ return null;
+}
diff --git a/src/components/Select.tsx b/src/components/Select.tsx
new file mode 100644
index 0000000..d115f0b
--- /dev/null
+++ b/src/components/Select.tsx
@@ -0,0 +1,80 @@
+import {
+ Listbox,
+ ListboxButton,
+ ListboxOption,
+ ListboxOptions,
+ Transition
+} from "@headlessui/react";
+import { ChevronUpDownIcon } from "@heroicons/react/20/solid";
+import { Fragment } from "react";
+import { cn } from "../utils/cn";
+
+export type Option = {
+ label: string;
+ value: Value;
+};
+
+export function Select({
+ className,
+ defaultValue,
+ onChange,
+ options,
+ placeholder = "",
+ value
+}: {
+ className?: string;
+ defaultValue?: Option | undefined;
+ onChange: (value: Option) => void;
+ options: Option[];
+ placeholder?: string;
+ value: Option | undefined;
+}) {
+ return (
+
+
+
+ {value?.label ? (
+ {value.label}
+ ) : (
+ {placeholder}
+ )}
+
+
+
+
+
+
+ {options.map((option, index) => (
+
+ {option.label}
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/src/components/TransitionLink.tsx b/src/components/TransitionLink.tsx
new file mode 100644
index 0000000..75daaec
--- /dev/null
+++ b/src/components/TransitionLink.tsx
@@ -0,0 +1,41 @@
+import { useTransition, type HTMLAttributes, type ReactNode } from "react";
+import { useMatch, useNavigate } from "react-router-dom";
+import type { Path } from "../routes";
+
+type RenderFunction = (params: {
+ isActive: boolean;
+ isPending: boolean;
+}) => ReactNode;
+
+export function TransitionLink({
+ children,
+ onClick,
+ to,
+ ...rest
+}: Omit, "children"> & {
+ children?: ReactNode | RenderFunction;
+ to: Path;
+}) {
+ const isActive = !!useMatch(to);
+ const [isPending, startTransition] = useTransition();
+ const navigate = useNavigate();
+
+ return (
+ {
+ onClick?.(event);
+
+ startTransition(() => {
+ navigate(to);
+ });
+ }}
+ {...rest}
+ />
+ );
+}
diff --git a/src/components/code/Code.tsx b/src/components/code/Code.tsx
new file mode 100644
index 0000000..8dfe734
--- /dev/null
+++ b/src/components/code/Code.tsx
@@ -0,0 +1,23 @@
+import { cn } from "../../utils/cn";
+import "./code-mirror.css";
+
+export function Code({
+ className = "",
+ html
+}: {
+ className?: string;
+ html: string;
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/src/components/code/code-mirror.css b/src/components/code/code-mirror.css
new file mode 100644
index 0000000..2a44b5b
--- /dev/null
+++ b/src/components/code/code-mirror.css
@@ -0,0 +1,36 @@
+.tok-comment {
+ color: var(--color-slate-500);
+}
+.tok-definition {
+}
+.tok-local {
+}
+.tok-keyword {
+ color: var(--color-pink-400);
+}
+.tok-meta {
+}
+.tok-number {
+}
+.tok-operator {
+ color: var(--color-slate-400);
+}
+.tok-propertyName {
+ color: var(--color-sky-300);
+}
+.tok-punctuation {
+ color: var(--color-slate-400);
+}
+.tok-string {
+ color: var(--color-teal-300);
+}
+.tok-string2 {
+ color: var(--color-sky-300);
+}
+.tok-typeName {
+ color: var(--color-pink-400);
+}
+.tok-variableName:not(.tok-definition) {
+}
+.tok-variableName2 {
+}
diff --git a/src/components/code/types.ts b/src/components/code/types.ts
new file mode 100644
index 0000000..37c8821
--- /dev/null
+++ b/src/components/code/types.ts
@@ -0,0 +1 @@
+export type Language = "JSX" | "TypeScript" | "TSX";
diff --git a/src/components/handles/ImperativeHandle.tsx b/src/components/handles/ImperativeHandle.tsx
new file mode 100644
index 0000000..463ca7d
--- /dev/null
+++ b/src/components/handles/ImperativeHandle.tsx
@@ -0,0 +1,38 @@
+import { ArrowTopRightOnSquareIcon } from "@heroicons/react/20/solid";
+import { repository } from "../../../package.json";
+import type { ImperativeHandleMetadata } from "../../types";
+import { Box } from "../Box";
+import { DocsSection } from "../DocsSection";
+import { ExternalLink } from "../ExternalLink";
+import { Header } from "../Header";
+import { ImperativeHandleMethod } from "./ImperativeHandleMethod";
+
+export function ImperativeHandle({
+ json,
+ section
+}: {
+ json: ImperativeHandleMetadata;
+ section: string;
+}) {
+ return (
+
+
+
+
+
+
+
+
+
+
+ {json.methods.map((method, index) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/handles/ImperativeHandleMethod.tsx b/src/components/handles/ImperativeHandleMethod.tsx
new file mode 100644
index 0000000..a552bb5
--- /dev/null
+++ b/src/components/handles/ImperativeHandleMethod.tsx
@@ -0,0 +1,19 @@
+import type { ImperativeHandleMethodMetadata } from "../../types";
+import { Code } from "../code/Code";
+import { DocsSection } from "../DocsSection";
+
+export function ImperativeHandleMethod({
+ method
+}: {
+ method: ImperativeHandleMethodMetadata;
+}) {
+ return (
+ <>
+ {method.name}
+
+
+
+
+ >
+ );
+}
diff --git a/src/components/props/ComponentProp.tsx b/src/components/props/ComponentProp.tsx
new file mode 100644
index 0000000..1a0dc49
--- /dev/null
+++ b/src/components/props/ComponentProp.tsx
@@ -0,0 +1,19 @@
+import type { ComponentPropMetadata } from "../../types";
+import { Code } from "../code/Code";
+import { DocsSection } from "../DocsSection";
+
+export function ComponentProp({ prop }: { prop: ComponentPropMetadata }) {
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/components/props/ComponentProps.tsx b/src/components/props/ComponentProps.tsx
new file mode 100644
index 0000000..c26ba9f
--- /dev/null
+++ b/src/components/props/ComponentProps.tsx
@@ -0,0 +1,40 @@
+import { ArrowTopRightOnSquareIcon } from "@heroicons/react/20/solid";
+import { useMemo } from "react";
+import { repository } from "../../../package.json";
+import type { ComponentMetadata } from "../../types";
+import { processPropsJSON } from "../../utils/processPropsJSON";
+import { Box } from "../Box";
+import { DocsSection } from "../DocsSection";
+import { ExternalLink } from "../ExternalLink";
+import { Header } from "../Header";
+import { ComponentPropsSection } from "./ComponentPropsSection";
+
+export function ComponentProps({
+ json,
+ section
+}: {
+ json: ComponentMetadata;
+ section: string;
+}) {
+ const { optionalProps, requiredProps } = useMemo(
+ () => processPropsJSON(json),
+ [json]
+ );
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/props/ComponentPropsSection.tsx b/src/components/props/ComponentPropsSection.tsx
new file mode 100644
index 0000000..5fb6256
--- /dev/null
+++ b/src/components/props/ComponentPropsSection.tsx
@@ -0,0 +1,26 @@
+import type { ComponentPropMetadata } from "../../types";
+import { Box } from "../Box";
+import { ComponentProp } from "./ComponentProp";
+
+export function ComponentPropsSection({
+ header,
+ props
+}: {
+ header: string;
+ props: ComponentPropMetadata[];
+}) {
+ if (props.length === 0) {
+ return null;
+ }
+
+ return (
+
+ {header}
+
+ {props.map((prop) => (
+
+ ))}
+
+
+ );
+}
diff --git a/src/hooks/useLocalStorage.ts b/src/hooks/useLocalStorage.ts
new file mode 100644
index 0000000..06f1a70
--- /dev/null
+++ b/src/hooks/useLocalStorage.ts
@@ -0,0 +1,61 @@
+import { useLayoutEffect, useRef, useState } from "react";
+
+export function useLocalStorage(
+ key: string,
+ defaultValue: Type
+): [value: Type, setValue: (newValue: Type) => void] {
+ const [value, setValue] = useState(() => {
+ const storedValue = localStorage.getItem(key);
+ if (storedValue != null) {
+ return JSON.parse(storedValue) as Type;
+ } else {
+ return defaultValue;
+ }
+ });
+
+ const committedValuesRef = useRef<{
+ prevValue: string | null;
+ value: string;
+ }>({
+ prevValue: null,
+ value: JSON.stringify(value)
+ });
+ useLayoutEffect(() => {
+ committedValuesRef.current.prevValue = committedValuesRef.current.value;
+ committedValuesRef.current.value = JSON.stringify(value);
+ });
+
+ // Sync changes from local storage
+ useLayoutEffect(() => {
+ const onStorage = (event: StorageEvent) => {
+ if (
+ key === event.key &&
+ event.newValue &&
+ event.newValue !== JSON.stringify(value)
+ ) {
+ setValue(JSON.parse(event.newValue));
+ }
+ };
+
+ window.addEventListener("storage", onStorage);
+
+ return () => {
+ window.removeEventListener("storage", onStorage);
+ };
+ }, [key, value]);
+
+ // Sync changes to local storage
+ useLayoutEffect(() => {
+ window.dispatchEvent(
+ new StorageEvent("storage", {
+ key,
+ newValue: committedValuesRef.current.value || "",
+ oldValue: committedValuesRef.current.prevValue || ""
+ })
+ );
+
+ localStorage.setItem(key, committedValuesRef.current.value);
+ }, [key, value]);
+
+ return [value, setValue];
+}
diff --git a/src/hooks/useNavStore.tsx b/src/hooks/useNavStore.tsx
new file mode 100644
index 0000000..2594830
--- /dev/null
+++ b/src/hooks/useNavStore.tsx
@@ -0,0 +1,15 @@
+import { create } from "zustand";
+
+export const useNavStore = create<{
+ visible: boolean;
+
+ hide: () => void;
+ show: () => void;
+ toggle: () => void;
+}>((set) => ({
+ visible: false,
+
+ hide: () => set({ visible: false }),
+ show: () => set({ visible: true }),
+ toggle: () => set((state) => ({ visible: !state.visible }))
+}));
diff --git a/src/index.ts b/src/index.ts
deleted file mode 100644
index f27b824..0000000
--- a/src/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { AutoSizer } from "./AutoSizer";
-
-export default AutoSizer;
-
-export * from "./types";
diff --git a/src/nav/MobileNav.tsx b/src/nav/MobileNav.tsx
new file mode 100644
index 0000000..4c90452
--- /dev/null
+++ b/src/nav/MobileNav.tsx
@@ -0,0 +1,27 @@
+import { useLayoutEffect } from "react";
+import { useLocation } from "react-router-dom";
+import { useNavStore } from "../hooks/useNavStore";
+import { cn } from "../utils/cn";
+
+export function Nav() {
+ const { hide, visible } = useNavStore();
+
+ const { pathname } = useLocation();
+ useLayoutEffect(() => {
+ hide();
+ }, [hide, pathname]);
+
+ return (
+
+ MOBILE NAV
+
+ );
+}
diff --git a/src/nav/Nav.tsx b/src/nav/Nav.tsx
new file mode 100644
index 0000000..892cb71
--- /dev/null
+++ b/src/nav/Nav.tsx
@@ -0,0 +1,20 @@
+import { NavLink } from "./NavLink";
+import { NavSection } from "./NavSection";
+
+export function Nav() {
+ return (
+
+
+ Getting started
+
+ Basic usage
+ Render prop
+
+
+ AutoSizer component
+
+ Support
+
+
+ );
+}
diff --git a/src/nav/NavButton.tsx b/src/nav/NavButton.tsx
new file mode 100644
index 0000000..e796921
--- /dev/null
+++ b/src/nav/NavButton.tsx
@@ -0,0 +1,24 @@
+import type { PropsWithChildren } from "react";
+import { Box } from "../components/Box";
+import { cn } from "../utils/cn";
+
+export function NavButton({
+ children,
+ className,
+ disabled
+}: PropsWithChildren<{ className?: string; disabled?: boolean }>) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/nav/NavLink.tsx b/src/nav/NavLink.tsx
new file mode 100644
index 0000000..d17584b
--- /dev/null
+++ b/src/nav/NavLink.tsx
@@ -0,0 +1,36 @@
+import { type PropsWithChildren } from "react";
+import { Box } from "../components/Box";
+import { TransitionLink } from "../components/TransitionLink";
+import { type Path } from "../routes";
+import { cn } from "../utils/cn";
+import { NavButton } from "./NavButton";
+
+export function NavLink({
+ children,
+ className,
+ path
+}: PropsWithChildren<{
+ className?: string;
+ path: Path;
+}>) {
+ return (
+
+ {({ isActive, isPending }) => (
+
+
+ {children}
+
+
+ )}
+
+ );
+}
diff --git a/src/nav/NavRoute.tsx b/src/nav/NavRoute.tsx
new file mode 100644
index 0000000..a38ed27
--- /dev/null
+++ b/src/nav/NavRoute.tsx
@@ -0,0 +1,13 @@
+import type { ReactNode } from "react";
+import { Route } from "react-router-dom";
+
+export function NavRoute({
+ route
+}: {
+ route: {
+ component: ReactNode;
+ path: string;
+ };
+}) {
+ return ;
+}
diff --git a/src/nav/NavSection.tsx b/src/nav/NavSection.tsx
new file mode 100644
index 0000000..1622536
--- /dev/null
+++ b/src/nav/NavSection.tsx
@@ -0,0 +1,28 @@
+import {
+ Disclosure,
+ DisclosureButton,
+ DisclosurePanel
+} from "@headlessui/react";
+import { ChevronRightIcon } from "@heroicons/react/20/solid";
+import type { PropsWithChildren, ReactNode } from "react";
+import { NavButton } from "./NavButton";
+
+export function NavSection({
+ children,
+ label
+}: PropsWithChildren<{ label: ReactNode }>) {
+ return (
+
+
+
+
+ {label}
+
+
+
+
+
+ {children}
+
+ );
+}
diff --git a/src/routes.ts b/src/routes.ts
new file mode 100644
index 0000000..18400b7
--- /dev/null
+++ b/src/routes.ts
@@ -0,0 +1,15 @@
+import { lazy, type ComponentType, type LazyExoticComponent } from "react";
+
+export type Route = LazyExoticComponent>;
+
+export const routes = {
+ "*": lazy(() => import("./routes/PageNotFound")),
+ "/": lazy(() => import("./routes/GettingStartedRoute")),
+ "/examples/basic-usage": lazy(() => import("./routes/BasicUsageRoute")),
+ "/examples/render-prop": lazy(() => import("./routes/RenderPropRoute")),
+ "/props/auto-sizer": lazy(() => import("./routes/AutoSizerPropsRoute")),
+ "/support": lazy(() => import("./routes/SupportRoute"))
+} satisfies Record;
+
+export type Routes = Record;
+export type Path = keyof Routes;
diff --git a/src/routes/AutoSizerPropsRoute.tsx b/src/routes/AutoSizerPropsRoute.tsx
new file mode 100644
index 0000000..d4384d1
--- /dev/null
+++ b/src/routes/AutoSizerPropsRoute.tsx
@@ -0,0 +1,12 @@
+import json from "../../public/generated/js-docs/AutoSizer.json";
+import { Box } from "../components/Box";
+import { ComponentProps } from "../components/props/ComponentProps";
+import type { ComponentMetadata } from "../types";
+
+export default function AutoSizerPropsRoute() {
+ return (
+
+
+
+ );
+}
diff --git a/src/routes/BasicUsageRoute.tsx b/src/routes/BasicUsageRoute.tsx
new file mode 100644
index 0000000..55f92a9
--- /dev/null
+++ b/src/routes/BasicUsageRoute.tsx
@@ -0,0 +1,18 @@
+import { html } from "../../public/generated/code-snippets/ChildComponent.json";
+import { Box } from "../components/Box";
+import { Code } from "../components/code/Code";
+import { Header } from "../components/Header";
+
+export default function BasicUsageRoute() {
+ return (
+
+
+
+ AutoSizer measures the available width and height of its
+ parent HTMLElement and passes them as props to a{" "}
+ Child component.
+
+
+
+ );
+}
diff --git a/src/routes/GettingStartedRoute.tsx b/src/routes/GettingStartedRoute.tsx
new file mode 100644
index 0000000..2b25eab
--- /dev/null
+++ b/src/routes/GettingStartedRoute.tsx
@@ -0,0 +1,57 @@
+import { Box } from "../components/Box";
+import { Callout } from "../components/Callout";
+import { ExternalLink } from "../components/ExternalLink";
+import { Header } from "../components/Header";
+import { Link } from "../components/Link";
+
+export default function GettingStartedRoute() {
+ return (
+
+
+
+ This package measures the available width and height of an{" "}
+ HTMLElement and passes those values as props to a{" "}
+ Child component. Refer to the{" "}
+ examples or{" "}
+ props pages for more information.
+
+
+ This package began as a fork of the AutoSizer component
+ from{" "}
+
+ react-virtualized
+
+ , and was intended for use with earlier versions of{" "}
+
+ react-window
+
+ . More recent versions of react-window use{" "}
+ ResizeObserver natively and do not require this package.
+
+ Installation
+ Begin by installing the library from NPM:
+
+ npm install{" "}
+ react-virtualized-auto-sizer
+
+
+ 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 0000000..7c1addc
--- /dev/null
+++ b/src/routes/PageNotFound.tsx
@@ -0,0 +1,19 @@
+import { Box } from "../components/Box";
+import { Callout } from "../components/Callout";
+import { ExternalLink } from "../components/ExternalLink";
+import { Header } from "../components/Header";
+
+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 0000000..5e0f231
--- /dev/null
+++ b/src/routes/RenderPropRoute.tsx
@@ -0,0 +1,26 @@
+import { html } from "../../public/generated/code-snippets/RenderProp.json";
+import { Box } from "../components/Box";
+import { Callout } from "../components/Callout";
+import { ExternalLink } from "../components/ExternalLink";
+import { Header } from "../components/Header";
+import { Code } from "../components/code/Code";
+
+export default function RenderPropRoute() {
+ return (
+
+
+
+ The Child component can also be a{" "}
+
+ render prop
+
+ .
+
+
+
+ Render props provide the added benefit of being able to reference other
+ values that are in scope.
+
+
+ );
+}
diff --git a/src/routes/SupportRoute.tsx b/src/routes/SupportRoute.tsx
new file mode 100644
index 0000000..c64e9dc
--- /dev/null
+++ b/src/routes/SupportRoute.tsx
@@ -0,0 +1,34 @@
+import { Box } from "../components/Box";
+import { ExternalLink } from "../components/ExternalLink";
+import { Header } from "../components/Header";
+
+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/ChildComponent.example.tsx b/src/routes/examples/ChildComponent.example.tsx
new file mode 100644
index 0000000..9ef75f7
--- /dev/null
+++ b/src/routes/examples/ChildComponent.example.tsx
@@ -0,0 +1,17 @@
+import { AutoSizer, type AutoSizerChildProps } from "react-virtualized-auto-sizer";
+
+function ExampleComponent() {
+ return (
+
+ )
+}
+
+// Height and width will be undefined for the initial render (or when server rendering)
+// You can either set default values (as shown below) or render some sort of placeholder
+function Child({ height = 600, width = 600 }: AutoSizerChildProps) {
+ return {width} x {height} pixels
;
+}
+
+//
+
+export { Child, ExampleComponent };
diff --git a/src/routes/examples/RenderProp.example.tsx b/src/routes/examples/RenderProp.example.tsx
new file mode 100644
index 0000000..b4a5e06
--- /dev/null
+++ b/src/routes/examples/RenderProp.example.tsx
@@ -0,0 +1,26 @@
+import { useState } from "react";
+
+//
+
+import { AutoSizer } from "react-virtualized-auto-sizer";
+
+function ExampleComponent(props: ExampleComponentProps) {
+ const [state, setState] = useState();
+
+ return (
+ {
+ // Render prop can access width and height params,
+ // as well as the parent component props and state
+ setState; // hidden
+ return `${props}${state}${height}${width}`; // hidden
+ }
+ } />
+ )
+}
+
+//
+
+type ExampleComponentProps = {};
+
+export { ExampleComponent };
diff --git a/src/types.ts b/src/types.ts
index 4d33e72..e5211dc 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,58 +1,35 @@
-import { HTMLAttributes, ReactNode } from "react";
+export type Intent = "danger" | "none" | "primary" | "success" | "warning";
-export type HorizontalSize = {
- width: number;
- scaledWidth: number;
+export type Section = {
+ content: string;
+ intent?: Intent | undefined;
};
-export type VerticalSize = {
- height: number;
- scaledHeight: number;
-};
-export type Size = HorizontalSize & VerticalSize;
-
-type BaseProps = {
- doNotBailOutOnEmptyChildren?: boolean;
- nonce?: string;
- tagName?: string;
-} & Omit, "children" | "onResize">;
-export type HeightOnlyProps = BaseProps & {
- children: (size: VerticalSize) => ReactNode;
- defaultHeight?: number;
- disableHeight?: false;
- disableWidth: true;
- onResize?: (size: VerticalSize) => void;
+export type ComponentPropMetadata = {
+ description: Section[];
+ html: string;
+ name: string;
+ required: boolean;
};
-export type WidthOnlyProps = BaseProps & {
- children: (size: HorizontalSize) => ReactNode;
- defaultWidth?: number;
- disableHeight: true;
- disableWidth?: false;
- onResize?: (size: HorizontalSize) => void;
+export type ComponentMetadata = {
+ description: Section[];
+ filePath: string;
+ name: string;
+ props: {
+ [name: string]: ComponentPropMetadata;
+ };
};
-export type HeightAndWidthProps = BaseProps & {
- children: (size: Size) => ReactNode;
- defaultHeight?: number;
- defaultWidth?: number;
- disableHeight?: false;
- disableWidth?: false;
- onResize?: (size: Size) => void;
+export type ImperativeHandleMethodMetadata = {
+ description: Section[];
+ html: string;
+ name: string;
};
-export type Props = HeightOnlyProps | WidthOnlyProps | HeightAndWidthProps;
-
-export function isHeightAndWidthProps(
- props: any
-): props is HeightAndWidthProps {
- return props && props.disableHeight !== true && props.disableWidth !== true;
-}
-
-export function isHeightOnlyProps(props: any): props is HeightOnlyProps {
- return props && props.disableHeight !== true && props.disableWidth === true;
-}
-
-export function isWidthOnlyProps(props: any): props is WidthOnlyProps {
- return props && props.disableHeight === true && props.disableWidth !== true;
-}
+export type ImperativeHandleMetadata = {
+ description: Section[];
+ filePath: string;
+ name: string;
+ methods: ImperativeHandleMethodMetadata[];
+};
diff --git a/src/utils/cn.ts b/src/utils/cn.ts
new file mode 100644
index 0000000..365058c
--- /dev/null
+++ b/src/utils/cn.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/src/utils/processPropsJSON.ts b/src/utils/processPropsJSON.ts
new file mode 100644
index 0000000..a534295
--- /dev/null
+++ b/src/utils/processPropsJSON.ts
@@ -0,0 +1,19 @@
+import type { ComponentMetadata, ComponentPropMetadata } from "../types";
+
+export function processPropsJSON(json: ComponentMetadata) {
+ const optionalProps: ComponentPropMetadata[] = [];
+ const requiredProps: ComponentPropMetadata[] = [];
+
+ Object.values(json.props).forEach((prop) => {
+ if (prop.required) {
+ requiredProps.push(prop);
+ } else {
+ optionalProps.push(prop);
+ }
+ });
+
+ optionalProps.sort((a, b) => a.name.localeCompare(b.name));
+ requiredProps.sort((a, b) => a.name.localeCompare(b.name));
+
+ return { optionalProps, requiredProps };
+}
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..b1f45c7
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/tsconfig.json b/tsconfig.json
index a6d2afc..ef6ae25 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,16 +1,43 @@
{
"compilerOptions": {
- "lib": ["DOM", "ES2015"],
- "module": "es2020",
- "moduleResolution": "node",
- "noImplicitAny": true,
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2022",
+ "useDefineForClassFields": true,
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
"jsx": "react-jsx",
- "resolveJsonModule": true,
+
"strict": true,
- "target": "es2018",
- "typeRoots": ["node_modules/@types"],
- "types": ["jest"]
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true,
+ "exactOptionalPropertyTypes": true,
+
+ "paths": {
+ "react-virtualized-auto-sizer": ["./lib"]
+ },
+ "types": [
+ "csstype",
+ "@testing-library/jest-dom",
+ "@testing-library/jest-dom/vitest"
+ ]
},
- "exclude": ["node_modules"],
- "include": ["src"]
+ "include": [
+ "vitest.d.ts",
+ "lib",
+ "integrations",
+ "scripts",
+ "src",
+ "index.tsx"
+ ],
+ "exclude": []
}
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 0000000..1323cda
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,8 @@
+{
+ "rewrites": [
+ {
+ "source": "/(.*)",
+ "destination": "/index.html"
+ }
+ ]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..a5f647d
--- /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-virtualized-auto-sizer",
+ fileName: "react-virtualized-auto-sizer",
+ 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-virtualized-auto-sizer": 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
new file mode 100644
index 0000000..3ecaed2
--- /dev/null
+++ b/vitest.config.ts
@@ -0,0 +1,21 @@
+import { defineConfig, mergeConfig } from "vitest/config";
+import viteConfig from "./vite.config";
+
+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 0000000..4a8c614
--- /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 0000000..82461c9
--- /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();
+});