From 9ab2f5e23d342f9083ee7a88a492894ce6e563ed Mon Sep 17 00:00:00 2001 From: Kervy Cantos Date: Fri, 1 Aug 2025 00:12:06 +0800 Subject: [PATCH 1/2] feat: basic auth and client CRUD --- .gitignore | 31 +- _mocks_/fileMock.js | 1 + _tests_/e2e/Dashboard.cy.ts | 56 + _tests_/e2e/HomePage.cy.ts | 27 + _tests_/e2e/auth/ForgotPassword.cy.ts | 50 + _tests_/e2e/auth/Login.cy.ts | 56 + _tests_/e2e/auth/Register.cy.ts | 65 + _tests_/e2e/support.ts | 18 + _tests_/unit/App.test.tsx | 24 + _tests_/unit/forms/ClientForm.test.tsx | 138 + _tests_/unit/forms/ForgotPassword.test.tsx | 72 + _tests_/unit/forms/Login.test.tsx | 119 + _tests_/unit/forms/NewPassword.test.tsx | 61 + _tests_/unit/forms/Register.test.tsx | 61 + _tests_/unit/hooks/useCurrencySymbol.test.tsx | 19 + .../unit/modals/ConfirmDeleteModa.test.tsx | 68 + _tests_/unit/modals/NewPasswordModal.test.tsx | 32 + _tests_/unit/modals/ViewClientModal.test.tsx | 96 + _tests_/unit/pages/DashBoard.test.tsx | 79 + _tests_/unit/pages/HomePage.test.tsx | 27 + _tests_/unit/schemas/addClientSchema.test.tsx | 62 + _tests_/unit/schemas/authSchema.test.tsx | 146 + _tests_/unit/shared/BackgroundImage.test.tsx | 34 + _tests_/unit/shared/Button.test.tsx | 50 + _tests_/unit/shared/Modal.test.tsx | 35 + _tests_/unit/shared/NavBar.test.tsx | 44 + _tests_/unit/shared/PaginatedTable.test.tsx | 102 + _tests_/unit/shared/ProtectedRoute.test.tsx | 49 + _tests_/unit/shared/Sidebar.test.tsx | 25 + _tests_/unit/stores/AuthStore.test.tsx | 62 + _tests_/unit/stores/ClientStore.test.tsx | 135 + _tests_/unit/stores/ModalStore.test.tsx | 66 + clients.json | 35 +- cypress.config.js | 15 + devNotes.md | 53 +- eslint.config.js | 23 + index.html | 13 + jest.config.ts | 31 + package-lock.json | 13080 ++++++++++++++++ package.json | 59 +- public/virtusize.svg | 5 + public/vite.svg | 1 + setup-test.ts | 2 + src/App.tsx | 19 + src/assets/fallback.jpg | Bin 0 -> 2788 bytes src/assets/homeBg.webp | Bin 0 -> 105264 bytes src/assets/react.svg | 1 + src/components/auth/AuthCard.tsx | 53 + .../auth/forms/ForgotPasswordForm.tsx | 103 + src/components/auth/forms/LoginForm.tsx | 90 + src/components/auth/forms/NewPasswordForm.tsx | 63 + src/components/auth/forms/RegisterForm.tsx | 97 + src/components/auth/forms/index.ts | 4 + .../auth/modals/NewPasswordModal.tsx | 22 + src/components/auth/types.ts | 15 + src/components/clients/forms/ClientForm.tsx | 231 + .../clients/modals/ConfirmDeleteModal.tsx | 49 + .../clients/modals/ViewClientModal.tsx | 71 + src/components/shared/BackgroundImage.tsx | 36 + src/components/shared/Button.tsx | 61 + src/components/shared/Modal.tsx | 28 + src/components/shared/NavBar.tsx | 27 + src/components/shared/ProtectedRoute.tsx | 28 + src/components/shared/SideBar.tsx | 20 + src/components/shared/Table.tsx | 79 + src/index.css | 1 + src/lib/constants.ts | 22 + src/lib/hooks/useCurrencySymbol.ts | 18 + src/lib/utils.ts | 13 + src/main.tsx | 10 + src/pages/Dashboard.tsx | 97 + src/pages/HomePage.tsx | 38 + src/pages/NotFound.tsx | 18 + src/providers/ModalProvider.tsx | 83 + src/routes/AppRoutes.tsx | 27 + src/schemas/authSchema.ts | 41 + src/schemas/clientSchema.ts | 29 + src/stores/types.ts | 39 + src/stores/useAuthStore.ts | 25 + src/stores/useClientStore.ts | 76 + src/stores/useModalStore.ts | 15 + src/vite-env.d.ts | 1 + tsconfig.app.json | 26 + tsconfig.json | 12 + tsconfig.node.json | 24 + vite.config.ts | 16 + 86 files changed, 16922 insertions(+), 33 deletions(-) create mode 100644 _mocks_/fileMock.js create mode 100644 _tests_/e2e/Dashboard.cy.ts create mode 100644 _tests_/e2e/HomePage.cy.ts create mode 100644 _tests_/e2e/auth/ForgotPassword.cy.ts create mode 100644 _tests_/e2e/auth/Login.cy.ts create mode 100644 _tests_/e2e/auth/Register.cy.ts create mode 100644 _tests_/e2e/support.ts create mode 100644 _tests_/unit/App.test.tsx create mode 100644 _tests_/unit/forms/ClientForm.test.tsx create mode 100644 _tests_/unit/forms/ForgotPassword.test.tsx create mode 100644 _tests_/unit/forms/Login.test.tsx create mode 100644 _tests_/unit/forms/NewPassword.test.tsx create mode 100644 _tests_/unit/forms/Register.test.tsx create mode 100644 _tests_/unit/hooks/useCurrencySymbol.test.tsx create mode 100644 _tests_/unit/modals/ConfirmDeleteModa.test.tsx create mode 100644 _tests_/unit/modals/NewPasswordModal.test.tsx create mode 100644 _tests_/unit/modals/ViewClientModal.test.tsx create mode 100644 _tests_/unit/pages/DashBoard.test.tsx create mode 100644 _tests_/unit/pages/HomePage.test.tsx create mode 100644 _tests_/unit/schemas/addClientSchema.test.tsx create mode 100644 _tests_/unit/schemas/authSchema.test.tsx create mode 100644 _tests_/unit/shared/BackgroundImage.test.tsx create mode 100644 _tests_/unit/shared/Button.test.tsx create mode 100644 _tests_/unit/shared/Modal.test.tsx create mode 100644 _tests_/unit/shared/NavBar.test.tsx create mode 100644 _tests_/unit/shared/PaginatedTable.test.tsx create mode 100644 _tests_/unit/shared/ProtectedRoute.test.tsx create mode 100644 _tests_/unit/shared/Sidebar.test.tsx create mode 100644 _tests_/unit/stores/AuthStore.test.tsx create mode 100644 _tests_/unit/stores/ClientStore.test.tsx create mode 100644 _tests_/unit/stores/ModalStore.test.tsx create mode 100644 cypress.config.js create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 jest.config.ts create mode 100644 package-lock.json create mode 100644 public/virtusize.svg create mode 100644 public/vite.svg create mode 100644 setup-test.ts create mode 100644 src/App.tsx create mode 100644 src/assets/fallback.jpg create mode 100644 src/assets/homeBg.webp create mode 100644 src/assets/react.svg create mode 100644 src/components/auth/AuthCard.tsx create mode 100644 src/components/auth/forms/ForgotPasswordForm.tsx create mode 100644 src/components/auth/forms/LoginForm.tsx create mode 100644 src/components/auth/forms/NewPasswordForm.tsx create mode 100644 src/components/auth/forms/RegisterForm.tsx create mode 100644 src/components/auth/forms/index.ts create mode 100644 src/components/auth/modals/NewPasswordModal.tsx create mode 100644 src/components/auth/types.ts create mode 100644 src/components/clients/forms/ClientForm.tsx create mode 100644 src/components/clients/modals/ConfirmDeleteModal.tsx create mode 100644 src/components/clients/modals/ViewClientModal.tsx create mode 100644 src/components/shared/BackgroundImage.tsx create mode 100644 src/components/shared/Button.tsx create mode 100644 src/components/shared/Modal.tsx create mode 100644 src/components/shared/NavBar.tsx create mode 100644 src/components/shared/ProtectedRoute.tsx create mode 100644 src/components/shared/SideBar.tsx create mode 100644 src/components/shared/Table.tsx create mode 100644 src/index.css create mode 100644 src/lib/constants.ts create mode 100644 src/lib/hooks/useCurrencySymbol.ts create mode 100644 src/lib/utils.ts create mode 100644 src/main.tsx create mode 100644 src/pages/Dashboard.tsx create mode 100644 src/pages/HomePage.tsx create mode 100644 src/pages/NotFound.tsx create mode 100644 src/providers/ModalProvider.tsx create mode 100644 src/routes/AppRoutes.tsx create mode 100644 src/schemas/authSchema.ts create mode 100644 src/schemas/clientSchema.ts create mode 100644 src/stores/types.ts create mode 100644 src/stores/useAuthStore.ts create mode 100644 src/stores/useClientStore.ts create mode 100644 src/stores/useModalStore.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore index a482381..1dc8a4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,26 @@ -node_modules -package-lock.json - # Logs logs *.log npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +.env +cypress/ -# IDE +# Editor directories and files .vscode/* -!.vscode/tasks.js !.vscode/extensions.json -*.coverage -*.coveragexml .idea - -# Optional npm cache directory -.npm - -# OS generated files # .DS_Store -.DS_Store? -*.local +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/_mocks_/fileMock.js b/_mocks_/fileMock.js new file mode 100644 index 0000000..0a445d0 --- /dev/null +++ b/_mocks_/fileMock.js @@ -0,0 +1 @@ +module.exports = "test-file-stub"; diff --git a/_tests_/e2e/Dashboard.cy.ts b/_tests_/e2e/Dashboard.cy.ts new file mode 100644 index 0000000..f745cbf --- /dev/null +++ b/_tests_/e2e/Dashboard.cy.ts @@ -0,0 +1,56 @@ +describe("Dashboard Page Full Flow", () => { + beforeEach(() => { + cy.uiLogin(); + }); + + it("can add, view, edit, search, and delete a client", () => { + const uniqueName = `John Test ${Date.now()}`; + + cy.get("button").contains("+ Add Client").click(); + cy.get("input[name='name']").type(uniqueName); + cy.get("input[name='company']").type("Test Co"); + cy.get("input[name='age']").type("35"); + cy.get("select[name='gender']").select("male"); + cy.get("select[name='currency']").select("USD"); + cy.get("input[name='subscriptionCost']").type("99.99"); + cy.get("button[type='submit']").click(); + cy.contains("Client added successfully").should("exist"); + + cy.contains("[data-cy='client-table'] tr", uniqueName).within(() => { + cy.get("[data-cy='view-btn']").click(); + }); + cy.get("[data-cy='client-view']").should("be.visible"); + cy.contains("Client Profile").should("exist"); + cy.get("button").contains("×").click(); + + cy.contains("[data-cy='client-table'] tr", uniqueName).within(() => { + cy.get("[data-cy='edit-btn']").click(); + }); + cy.get("input[name='company']").clear().type("Updated Co"); + cy.get("button[type='submit']").click(); + cy.contains("Client updated successfully").should("exist"); + + cy.wait(3000); // - wait for toast + cy.get("[data-cy='search-input']").clear().type(uniqueName); + cy.contains("[data-cy='client-table'] tr", uniqueName).should("exist"); + + cy.contains("[data-cy='client-table'] tr", uniqueName).within(() => { + cy.get("[data-cy='delete-btn']").click(); + }); + + cy.contains("Are you sure you want to delete this client?").should("exist"); + cy.get("button").contains("Delete").click(); + cy.wait(3000); // - wait for toast + cy.contains("Client deleted").should("exist"); + + cy.get("[data-cy='search-input']").clear().type(uniqueName); + cy.contains("[data-cy='client-table'] tr", uniqueName).should("not.exist"); + cy.get("[data-cy='search-input']").clear(); + }); + it("can logout and go back to home page", () => { + cy.get("[data-cy='logout-btn']").click(); + + cy.url().should("include", "login"); + cy.contains("Login").should("exist"); + }); +}); diff --git a/_tests_/e2e/HomePage.cy.ts b/_tests_/e2e/HomePage.cy.ts new file mode 100644 index 0000000..1d6101a --- /dev/null +++ b/_tests_/e2e/HomePage.cy.ts @@ -0,0 +1,27 @@ +describe("HomePage", () => { + beforeEach(() => { + cy.visit("/"); + }); + it("shows login form on load", () => { + cy.get("form#login-form").should("exist"); + cy.get("input[placeholder='Username']").should("exist"); + cy.get("input[placeholder='Password']").should("exist"); + cy.contains("Login").should("exist"); + }); + + it("switches to register form", () => { + cy.contains(/register/i).click(); + + cy.get("form#register-form").should("exist"); + cy.get("input[placeholder='Confirm Password']").should("exist"); + cy.contains("Register").should("exist"); + }); + + it("switches to forgot password form", () => { + cy.contains(/forgot password/i).click(); + + cy.get("form#forgot-form").should("exist"); + cy.get("input[placeholder='Enter your username']").should("exist"); + cy.contains("Reset Password").should("exist"); + }); +}); diff --git a/_tests_/e2e/auth/ForgotPassword.cy.ts b/_tests_/e2e/auth/ForgotPassword.cy.ts new file mode 100644 index 0000000..106f8d2 --- /dev/null +++ b/_tests_/e2e/auth/ForgotPassword.cy.ts @@ -0,0 +1,50 @@ +describe("Forgot Password Flow", () => { + beforeEach(() => { + cy.visit("/?mode=forgot"); + }); + + it("shows validation error when username is empty", () => { + cy.get('button[type="submit"]').click(); + cy.contains(/username is required/i).should("exist"); + }); + + it("shows error for non-existent user", () => { + cy.get('input[placeholder="Enter your username"]').type("nonexistentuser"); + cy.get('button[type="submit"]').click(); + + cy.contains("User not found.").should("exist"); + }); + + it("opens password modal when user exists", () => { + cy.get('input[placeholder="Enter your username"]').type("testuser"); + cy.get('button[type="submit"]').click(); + + cy.contains("Enter New Password").should("exist"); + }); + + it("submits new password and closes modal", () => { + cy.get('input[placeholder="Enter your username"]').type("testuser"); + cy.get('button[type="submit"]').click(); + + cy.get('input[placeholder="New password"]').type("newpass123"); + cy.get('button[type="submit"]').contains("Submit").click(); + + cy.contains("Password updated successfully").should("exist"); + cy.contains("Enter New Password").should("not.exist"); + }); + + it("cancels password reset modal", () => { + cy.get('input[placeholder="Enter your username"]').type("testuser"); + cy.get('button[type="submit"]').click(); + + cy.contains("Enter New Password").should("exist"); + cy.get("button").contains("Cancel").click(); + cy.contains("Enter New Password").should("not.exist"); + }); + it("navigates back to login form", () => { + cy.contains(/back to login/i).click(); + + cy.url().should("include", "mode=login"); + cy.get("form#login-form").should("exist"); + }); +}); diff --git a/_tests_/e2e/auth/Login.cy.ts b/_tests_/e2e/auth/Login.cy.ts new file mode 100644 index 0000000..2f92743 --- /dev/null +++ b/_tests_/e2e/auth/Login.cy.ts @@ -0,0 +1,56 @@ +describe("Login Flow", () => { + beforeEach(() => { + cy.visit("/"); + }); + + it("logs in successfully with valid credentials", () => { + const username = Cypress.env("username"); + const password = Cypress.env("password"); + console.log({ username, password }); + cy.get("input[placeholder='Username']").type(username); + cy.get("input[placeholder='Password']").type(password); + + cy.contains("Login").click(); + + cy.url().should("include", "/dashboard"); + }); + it("shows error on invalid credentials", () => { + cy.visit("/"); + + cy.get("input[placeholder='Username']").type("wronguser"); + cy.get("input[placeholder='Password']").type("wrongpass"); + + cy.contains("Login").click(); + + cy.contains(/invalid username or password/i).should("be.visible"); + + cy.url().should("eq", Cypress.config().baseUrl + "/"); + }); + it("shows required field errors", () => { + cy.contains("Login").click(); + + cy.contains(/username is required/i).should("be.visible"); + cy.contains(/password is required/i).should("be.visible"); + }); + it("shows validation error for short password", () => { + cy.get("input[placeholder='Username']").type("testuser"); + cy.get("input[placeholder='Password']").type("123"); + + cy.contains("Login").click(); + + cy.contains(/password must be at least/i).should("be.visible"); + }); + it("navigates to forgot password", () => { + cy.contains("Forgot Password?").click(); + + cy.url().should("include", "/?mode=forgot"); + cy.get("form#forgot-form").should("exist"); + }); + + it("navigates to register", () => { + cy.contains("Register").click(); + + cy.url().should("include", "/?mode=register"); + cy.get("form#register-form").should("exist"); + }); +}); diff --git a/_tests_/e2e/auth/Register.cy.ts b/_tests_/e2e/auth/Register.cy.ts new file mode 100644 index 0000000..79988d7 --- /dev/null +++ b/_tests_/e2e/auth/Register.cy.ts @@ -0,0 +1,65 @@ +describe("Register Flow", () => { + beforeEach(() => { + cy.visit("/?mode=register"); + }); + + it("registers a new user successfully with a random username", () => { + const randomUsername = `user_${Date.now()}`; + + cy.get('input[placeholder="Username"]').type(randomUsername); + cy.get('input[placeholder="Password"]').type("securepass"); + cy.get('input[placeholder="Confirm Password"]').type("securepass"); + + cy.get("form#register-form").submit(); + + cy.url().should("not.include", "mode=register"); + }); + + it("shows error when username already exists", () => { + const existingUsername = Cypress.env("username"); + + cy.get('input[placeholder="Username"]').type(existingUsername); + cy.get('input[placeholder="Password"]').type("securepass"); + cy.get('input[placeholder="Confirm Password"]').type("securepass"); + + cy.get("form#register-form").submit(); + + cy.on("window:alert", (text) => { + expect(text).toMatch(/username already taken/i); + }); + }); + + it("shows error for mismatched passwords", () => { + cy.get('input[placeholder="Username"]').type("testuser123"); + cy.get('input[placeholder="Password"]').type("securepass"); + cy.get('input[placeholder="Confirm Password"]').type("wrongpass"); + + cy.get("form#register-form").submit(); + + cy.contains(/passwords do not match/i).should("exist"); + }); + + it("shows error for short password", () => { + cy.get('input[placeholder="Username"]').type("testuser123"); + cy.get('input[placeholder="Password"]').type("123"); + cy.get('input[placeholder="Confirm Password"]').type("123"); + + cy.get("form#register-form").submit(); + + cy.contains(/password must be at least/i).should("exist"); + }); + + it("shows validation error for empty fields", () => { + cy.get("form#register-form").submit(); + + cy.contains(/username is required/i).should("exist"); + cy.contains(/password is required/i).should("exist"); + }); + + it("navigates back to login form", () => { + cy.contains(/back to login/i).click(); + + cy.url().should("include", "mode=login"); + cy.get("form#login-form").should("exist"); + }); +}); diff --git a/_tests_/e2e/support.ts b/_tests_/e2e/support.ts new file mode 100644 index 0000000..056387e --- /dev/null +++ b/_tests_/e2e/support.ts @@ -0,0 +1,18 @@ +/// + +declare global { + namespace Cypress { + interface Chainable { + uiLogin(): Chainable; + } + } +} + +Cypress.Commands.add("uiLogin", () => { + cy.visit("/"); + cy.get("input[placeholder='Username']").type(Cypress.env("username")); + cy.get("input[placeholder='Password']").type(Cypress.env("password")); + cy.get("button[type='submit']").click(); +}); + +export {}; diff --git a/_tests_/unit/App.test.tsx b/_tests_/unit/App.test.tsx new file mode 100644 index 0000000..6bacf64 --- /dev/null +++ b/_tests_/unit/App.test.tsx @@ -0,0 +1,24 @@ +import { render, screen } from "@testing-library/react"; +import App from "../../src/App"; + +jest.mock("sonner", () => ({ + Toaster: () =>
, +})); + +jest.mock("../../src/providers/ModalProvider", () => () => ( +
+)); + +jest.mock("../../src/routes/AppRoutes", () => () => ( +
Mocked Routes
+)); + +describe("App", () => { + it("renders Toaster, ModalProvider, and AppRoutes", () => { + render(); + + expect(screen.getByTestId("toaster")).toBeInTheDocument(); + expect(screen.getByTestId("modal-provider")).toBeInTheDocument(); + expect(screen.getByTestId("app-routes")).toHaveTextContent("Mocked Routes"); + }); +}); diff --git a/_tests_/unit/forms/ClientForm.test.tsx b/_tests_/unit/forms/ClientForm.test.tsx new file mode 100644 index 0000000..1df2279 --- /dev/null +++ b/_tests_/unit/forms/ClientForm.test.tsx @@ -0,0 +1,138 @@ +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import { useClientsStore } from "../../../src/stores/useClientStore"; +import AddClientForm from "../../../src/components/clients/forms/ClientForm"; + +jest.mock("../../../src/stores/useClientStore"); + +const mockAddClient = jest.fn(); +const mockUpdateClient = jest.fn(); + +beforeEach(() => { + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + addClient: mockAddClient, + updateClient: mockUpdateClient, + }); +}); + +afterEach(() => { + jest.clearAllMocks(); +}); + +describe("AddClientForm (add mode)", () => { + it("submits new client with required fields", async () => { + const onSuccess = jest.fn(); + + render(); + + fireEvent.input(screen.getByPlaceholderText("Name"), { + target: { value: "John Doe" }, + }); + fireEvent.input(screen.getByPlaceholderText("Company"), { + target: { value: "ACME Corp" }, + }); + fireEvent.input(screen.getByPlaceholderText("Age"), { + target: { value: "30" }, + }); + fireEvent.change(screen.getByRole("combobox", { name: "Gender" }), { + target: { value: "male" }, + }); + fireEvent.change(screen.getByRole("combobox", { name: "Currency" }), { + target: { value: "USD" }, + }); + fireEvent.input(screen.getByPlaceholderText("Subscription Cost"), { + target: { value: "49.99" }, + }); + + fireEvent.click(screen.getByRole("button", { name: /add client/i })); + + await waitFor(() => { + expect(mockAddClient).toHaveBeenCalled(); + expect(onSuccess).toHaveBeenCalled(); + }); + }); +}); + +describe("AddClientForm (edit mode)", () => { + const initialData = { + id: "123", + name: "Jane Smith", + company: "Globex", + age: 35, + gender: "female" as "male" | "female", + currency: "EUR", + subscriptionCost: 99.99, + picture: "data:image/png;base64,abc123", + }; + + it("renders initial data and submits update", async () => { + const onSuccess = jest.fn(); + + render( + + ); + + expect(screen.getByDisplayValue("Jane Smith")).toBeInTheDocument(); + expect(screen.getByDisplayValue("Globex")).toBeInTheDocument(); + + fireEvent.input(screen.getByPlaceholderText("Name"), { + target: { value: "Jane Updated" }, + }); + + fireEvent.click(screen.getByRole("button", { name: /update client/i })); + + await waitFor(() => { + expect(mockUpdateClient).toHaveBeenCalledWith( + "123", + expect.objectContaining({ name: "Jane Updated" }) + ); + expect(onSuccess).toHaveBeenCalled(); + }); + }); +}); + +describe("AddClientForm image handling", () => { + const initialData = { + id: "123", + name: "Jane Smith", + company: "Globex", + age: 35, + gender: "female" as "male" | "female", + currency: "EUR", + subscriptionCost: 99.99, + picture: "data:image/png;base64,abc123", + }; + it("displays preview when base64 image is uploaded", async () => { + render( {}} />); + + const file = new File(["dummy"], "test.png", { type: "image/png" }); + + const input = screen.getByLabelText("Client Photo"); + fireEvent.change(input, { target: { files: [file] } }); + + await waitFor(() => { + expect(screen.getByAltText("Preview")).toBeInTheDocument(); + }); + }); + + it("uses fallback image on error", async () => { + render( + {}} + initialData={{ ...initialData }} + /> + ); + + const img = screen.getByAltText("Preview") as HTMLImageElement; + + fireEvent.error(img); + + await waitFor(() => { + expect(img.src).toContain("test-file-stub"); + }); + }); +}); diff --git a/_tests_/unit/forms/ForgotPassword.test.tsx b/_tests_/unit/forms/ForgotPassword.test.tsx new file mode 100644 index 0000000..6bdd65c --- /dev/null +++ b/_tests_/unit/forms/ForgotPassword.test.tsx @@ -0,0 +1,72 @@ +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import ForgotPasswordForm from "../../../src/components/auth/forms/ForgotPasswordForm"; +import { toast } from "sonner"; + +jest.mock("sonner", () => ({ + toast: { + error: jest.fn(), + success: jest.fn(), + }, +})); + +describe("ForgotPasswordForm", () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("renders the form inputs", () => { + render(); + expect( + screen.getByPlaceholderText("Enter your username") + ).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: /reset password/i }) + ).toBeInTheDocument(); + }); + + it("shows validation error when submitting empty form", async () => { + render(); + + fireEvent.click(screen.getByRole("button", { name: /reset password/i })); + + await waitFor(() => { + expect(screen.getByText(/username is required/i)).toBeInTheDocument(); + }); + }); + + it("shows error when user is not found", async () => { + global.fetch = jest.fn().mockResolvedValueOnce({ + ok: true, + json: async () => [], + }); + + render(); + + fireEvent.change(screen.getByPlaceholderText(/enter your username/i), { + target: { value: "nonexistent" }, + }); + fireEvent.click(screen.getByRole("button", { name: /reset password/i })); + + await waitFor(() => { + expect(toast.error).toHaveBeenCalledWith("User not found."); + }); + }); + + it("opens modal when user is found", async () => { + global.fetch = jest.fn().mockResolvedValueOnce({ + ok: true, + json: async () => [{ id: "1", username: "testuser" }], + }); + + render(); + + fireEvent.change(screen.getByPlaceholderText(/enter your username/i), { + target: { value: "testuser" }, + }); + fireEvent.click(screen.getByRole("button", { name: /reset password/i })); + + await waitFor(() => { + expect(screen.getByText(/enter new password/i)).toBeInTheDocument(); + }); + }); +}); diff --git a/_tests_/unit/forms/Login.test.tsx b/_tests_/unit/forms/Login.test.tsx new file mode 100644 index 0000000..7bb4a63 --- /dev/null +++ b/_tests_/unit/forms/Login.test.tsx @@ -0,0 +1,119 @@ +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import { LoginForm } from "../../../src/components/auth/forms"; +import { useAuthStore as mockUseAuthStore } from "../../../src/stores/useAuthStore"; + +jest.mock("../../../src/stores/useAuthStore"); + +describe("LoginForm", () => { + const mockLogin = jest.fn(); + const mockOnSuccess = jest.fn(); + + beforeEach(() => { + (mockUseAuthStore as unknown as jest.Mock).mockReturnValue({ + login: mockLogin, + }); + + jest.clearAllMocks(); + }); + + it("renders username and password inputs", () => { + render(); + expect(screen.getByPlaceholderText(/username/i)).toBeInTheDocument(); + expect(screen.getByPlaceholderText(/password/i)).toBeInTheDocument(); + expect(screen.getByRole("button", { name: /login/i })).toBeInTheDocument(); + }); + it("submits successfully with valid credentials", async () => { + global.fetch = jest.fn().mockResolvedValue({ + ok: true, + json: async () => [ + { + id: 1, + username: "testuser", + password: "password123", + }, + ], + }) as jest.Mock; + + render(); + + fireEvent.change(screen.getByPlaceholderText("Username"), { + target: { value: "testuser" }, + }); + fireEvent.change(screen.getByPlaceholderText("Password"), { + target: { value: "password123" }, + }); + fireEvent.click(screen.getByRole("button", { name: /login/i })); + + await waitFor(() => { + expect(mockLogin).toHaveBeenCalledWith({ + id: 1, + username: "testuser", + password: "password123", + }); + expect(mockOnSuccess).toHaveBeenCalled(); + }); + }); + + it("shows error message on invalid credentials", async () => { + global.fetch = jest.fn().mockResolvedValue({ + ok: true, + json: async () => [], + }) as jest.Mock; + + render(); + + fireEvent.change(screen.getByPlaceholderText("Username"), { + target: { value: "wronguser" }, + }); + fireEvent.change(screen.getByPlaceholderText("Password"), { + target: { value: "wrongpass" }, + }); + fireEvent.click(screen.getByRole("button", { name: /login/i })); + + await waitFor(() => { + expect( + screen.getByText(/invalid username or password/i) + ).toBeInTheDocument(); + expect(mockLogin).not.toHaveBeenCalled(); + expect(mockOnSuccess).not.toHaveBeenCalled(); + }); + }); + + it("shows validation errors for empty fields", async () => { + render(); + + fireEvent.click(screen.getByRole("button", { name: /login/i })); + + await waitFor(() => { + expect(screen.getByText(/username is required/i)).toBeInTheDocument(); + expect(screen.getByText(/password is required/i)).toBeInTheDocument(); + }); + + expect(mockLogin).not.toHaveBeenCalled(); + expect(mockOnSuccess).not.toHaveBeenCalled(); + }); + + it("shows validation error for short password", async () => { + (global.fetch as jest.Mock | undefined) = undefined; + + render(); + + fireEvent.change(screen.getByPlaceholderText("Username"), { + target: { value: "testuser" }, + }); + fireEvent.change(screen.getByPlaceholderText("Password"), { + target: { value: "123" }, + }); + + fireEvent.click(screen.getByRole("button", { name: /login/i })); + + await waitFor(() => { + expect( + screen.getByText("Password must be at least 4 characters") + ).toBeInTheDocument(); + }); + + expect(mockLogin).not.toHaveBeenCalled(); + expect(mockOnSuccess).not.toHaveBeenCalled(); + }); +}); diff --git a/_tests_/unit/forms/NewPassword.test.tsx b/_tests_/unit/forms/NewPassword.test.tsx new file mode 100644 index 0000000..396ce6a --- /dev/null +++ b/_tests_/unit/forms/NewPassword.test.tsx @@ -0,0 +1,61 @@ +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import { NewPasswordForm } from "../../../src/components/auth/forms"; + +describe("NewPasswordForm", () => { + const mockOnSubmit = jest.fn(); + const mockOnCancel = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("renders the password input and buttons", () => { + render(); + + expect(screen.getByPlaceholderText(/new password/i)).toBeInTheDocument(); + expect(screen.getByRole("button", { name: /submit/i })).toBeInTheDocument(); + expect(screen.getByRole("button", { name: /cancel/i })).toBeInTheDocument(); + }); + + it("shows validation error for short password", async () => { + render(); + + const input = screen.getByPlaceholderText(/new password/i); + fireEvent.change(input, { target: { value: "123" } }); + fireEvent.click(screen.getByRole("button", { name: /submit/i })); + + await waitFor(() => { + expect( + screen.getByText(/password must be at least/i) + ).toBeInTheDocument(); + }); + + expect(mockOnSubmit).not.toHaveBeenCalled(); + }); + + it("submits valid password", async () => { + render(); + + fireEvent.change(screen.getByPlaceholderText(/new password/i), { + target: { value: "validPass123" }, + }); + + fireEvent.click(screen.getByRole("button", { name: /submit/i })); + + await waitFor(() => { + expect(mockOnSubmit).toHaveBeenCalledWith("validPass123"); + }); + }); + + it("calls onCancel and resets when cancel is clicked", () => { + render(); + + const input = screen.getByPlaceholderText(/new password/i); + fireEvent.change(input, { target: { value: "anything" } }); + + fireEvent.click(screen.getByRole("button", { name: /cancel/i })); + + expect(mockOnCancel).toHaveBeenCalled(); + expect((input as HTMLInputElement).value).toBe(""); + }); +}); diff --git a/_tests_/unit/forms/Register.test.tsx b/_tests_/unit/forms/Register.test.tsx new file mode 100644 index 0000000..a33d5a3 --- /dev/null +++ b/_tests_/unit/forms/Register.test.tsx @@ -0,0 +1,61 @@ +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import RegisterForm from "../../../src/components/auth/forms/RegisterForm"; + +describe("RegisterForm", () => { + const noop = () => {}; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("shows validation errors when fields are empty", async () => { + render(); + fireEvent.click(screen.getByRole("button", { name: /register/i })); + + await waitFor(() => { + expect(screen.getAllByText(/required/i).length).toBeGreaterThan(0); + }); + }); + + it("shows error if passwords do not match", async () => { + render(); + + fireEvent.change(screen.getByPlaceholderText("Username"), { + target: { value: "kervy" }, + }); + fireEvent.change(screen.getByPlaceholderText("Password"), { + target: { value: "abc123" }, + }); + fireEvent.change(screen.getByPlaceholderText("Confirm Password"), { + target: { value: "xyz123" }, + }); + + fireEvent.click(screen.getByRole("button", { name: /register/i })); + + await waitFor(() => { + expect(screen.getByText(/passwords do not match/i)).toBeInTheDocument(); + }); + }); + + it("shows error if password is too short", async () => { + render(); + + fireEvent.change(screen.getByPlaceholderText("Username"), { + target: { value: "kervy" }, + }); + fireEvent.change(screen.getByPlaceholderText("Password"), { + target: { value: "12" }, + }); + fireEvent.change(screen.getByPlaceholderText("Confirm Password"), { + target: { value: "12" }, + }); + + fireEvent.click(screen.getByRole("button", { name: /register/i })); + + await waitFor(() => { + expect( + screen.getByText(/password must be at least/i) + ).toBeInTheDocument(); + }); + }); +}); diff --git a/_tests_/unit/hooks/useCurrencySymbol.test.tsx b/_tests_/unit/hooks/useCurrencySymbol.test.tsx new file mode 100644 index 0000000..e8f1921 --- /dev/null +++ b/_tests_/unit/hooks/useCurrencySymbol.test.tsx @@ -0,0 +1,19 @@ +import { renderHook } from "@testing-library/react"; +import { useCurrencySymbol } from "../../../src/lib/hooks/useCurrencySymbol"; + +describe("useCurrencySymbol", () => { + it("returns correct symbols for known currencies", () => { + const { result } = renderHook(() => useCurrencySymbol()); + + expect(result.current.getSymbol("USD")).toBe("$"); + expect(result.current.getSymbol("INR")).toBe("₹"); + expect(result.current.getSymbol("CAD")).toBe("C$"); + expect(result.current.getSymbol("SGD")).toBe("S$"); + expect(result.current.getSymbol("Yen")).toBe("¥"); + }); + + it("returns original code if unknown", () => { + const { result } = renderHook(() => useCurrencySymbol()); + expect(result.current.getSymbol("ABC")).toBe("ABC"); + }); +}); diff --git a/_tests_/unit/modals/ConfirmDeleteModa.test.tsx b/_tests_/unit/modals/ConfirmDeleteModa.test.tsx new file mode 100644 index 0000000..6457c10 --- /dev/null +++ b/_tests_/unit/modals/ConfirmDeleteModa.test.tsx @@ -0,0 +1,68 @@ +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import ConfirmDeleteModal from "../../../src/components/clients/modals/ConfirmDeleteModal"; +import { useClientsStore } from "../../../src/stores/useClientStore"; +import { toast } from "sonner"; + +jest.mock("../../../src/stores/useClientStore", () => ({ + useClientsStore: jest.fn(), +})); + +jest.mock("sonner", () => ({ + toast: { + success: jest.fn(), + error: jest.fn(), + }, +})); + +describe("ConfirmDeleteModal", () => { + const mockDeleteClient = jest.fn(); + const mockOnSuccess = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + deleteClient: mockDeleteClient, + }); + }); + + it("renders modal text", () => { + render(); + expect(screen.getByText("Confirm Deletion")).toBeInTheDocument(); + expect( + screen.getByText("Are you sure you want to delete this client?") + ).toBeInTheDocument(); + }); + + it("calls onSuccess when cancel is clicked", () => { + render(); + fireEvent.click(screen.getByText("Cancel")); + expect(mockOnSuccess).toHaveBeenCalled(); + }); + + it("calls deleteClient and shows success toast on confirm delete", async () => { + mockDeleteClient.mockResolvedValueOnce(undefined); + + render(); + fireEvent.click(screen.getByText("Delete")); + + await waitFor(() => { + expect(mockDeleteClient).toHaveBeenCalledWith("123"); + expect(toast.success).toHaveBeenCalledWith("Client deleted"); + expect(mockOnSuccess).toHaveBeenCalled(); + }); + }); + + it("shows error toast if deleteClient fails", async () => { + mockDeleteClient.mockRejectedValueOnce(new Error("Fail")); + + render(); + fireEvent.click(screen.getByText("Delete")); + + await waitFor(() => { + expect(mockDeleteClient).toHaveBeenCalledWith("123"); + expect(toast.error).toHaveBeenCalledWith("Failed to delete client"); + expect(mockOnSuccess).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/_tests_/unit/modals/NewPasswordModal.test.tsx b/_tests_/unit/modals/NewPasswordModal.test.tsx new file mode 100644 index 0000000..3898c5b --- /dev/null +++ b/_tests_/unit/modals/NewPasswordModal.test.tsx @@ -0,0 +1,32 @@ +import { render, screen } from "@testing-library/react"; +import NewPasswordModal from "../../../src/components/auth/modals/NewPasswordModal"; + +describe("NewPasswordModal", () => { + const mockOnClose = jest.fn(); + const mockOnSubmit = jest.fn(); + beforeEach(() => { + jest.clearAllMocks(); + }); + it("renders when isOpen is true", () => { + render( + + ); + expect(screen.getByText(/enter new password/i)).toBeInTheDocument(); + expect(screen.getByPlaceholderText(/new password/i)).toBeInTheDocument(); + }); + + it("does not render when closed", () => { + const { container } = render( + + ); + expect(container).toBeEmptyDOMElement(); + }); +}); diff --git a/_tests_/unit/modals/ViewClientModal.test.tsx b/_tests_/unit/modals/ViewClientModal.test.tsx new file mode 100644 index 0000000..6e7fc15 --- /dev/null +++ b/_tests_/unit/modals/ViewClientModal.test.tsx @@ -0,0 +1,96 @@ +import { render, screen, waitFor, fireEvent } from "@testing-library/react"; +import ViewClientModal from "../../../src/components/clients/modals/ViewClientModal"; +import { useClientsStore } from "../../../src/stores/useClientStore"; +import fallbackImg from "../../../src/assets/fallback.jpg"; +import { formatDate } from "../../../src/lib/utils"; + +jest.mock("../../../src/stores/useClientStore", () => ({ + useClientsStore: jest.fn(), +})); + +global.fetch = jest.fn(); + +const mockClient = { + id: "123", + name: "John Doe", + company: "Example Corp", + age: 30, + gender: "male", + picture: "https://example.com/image.jpg", + currency: "USD", + subscriptionCost: "99.99", + registered: "2025-08-01T09:45:23.626 -09:00", +}; + +describe("ViewClientModal", () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it("renders client from store", () => { + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + clients: [mockClient], + }); + + render(); + expect(screen.getByText("Client Profile")).toBeInTheDocument(); + expect(screen.getByText("John Doe")).toBeInTheDocument(); + expect(screen.getByText("Example Corp")).toBeInTheDocument(); + expect(screen.getByText("30")).toBeInTheDocument(); + }); + + it("fetches client from API if not in store", async () => { + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + clients: [], + }); + + (fetch as jest.Mock).mockResolvedValueOnce({ + json: () => Promise.resolve(mockClient), + }); + + render(); + + await waitFor(() => + expect(screen.getByText("John Doe")).toBeInTheDocument() + ); + }); + + it("renders null if client is not found and fetch fails", async () => { + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + clients: [], + }); + + (fetch as jest.Mock).mockRejectedValueOnce(new Error("Fetch failed")); + + const { container } = render(); + + await waitFor(() => { + expect(container).toBeEmptyDOMElement(); + }); + }); + + it("shows fallback image if client picture fails to load", async () => { + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + clients: [mockClient], + }); + + render(); + const img = screen.getByRole("img") as HTMLImageElement; + + fireEvent.error(img); + + await waitFor(() => { + expect(img.src).toContain(fallbackImg); + }); + }); + it("displays formatted registration time", () => { + (useClientsStore as unknown as jest.Mock).mockReturnValue({ + clients: [mockClient], + }); + + render(); + + const formatted = formatDate(mockClient.registered); + expect(screen.getByText(formatted)).toBeInTheDocument(); + }); +}); diff --git a/_tests_/unit/pages/DashBoard.test.tsx b/_tests_/unit/pages/DashBoard.test.tsx new file mode 100644 index 0000000..4b4c5b2 --- /dev/null +++ b/_tests_/unit/pages/DashBoard.test.tsx @@ -0,0 +1,79 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import Dashboard from "../../../src/pages/Dashboard"; + +let useClientsStoreMock: jest.Mock; + +jest.mock("../../../src/stores/useClientStore", () => ({ + get useClientsStore() { + return useClientsStoreMock; + }, +})); + +jest.mock("../../../src/lib/hooks/useCurrencySymbol", () => ({ + useCurrencySymbol: () => ({ + getSymbol: (currency: string) => (currency === "USD" ? "$" : "€"), + }), +})); + +const openMock = jest.fn(); +jest.mock("../../../src/stores/useModalStore", () => ({ + useModalStore: () => ({ + open: openMock, + }), +})); + +describe("Dashboard Page", () => { + beforeEach(() => { + useClientsStoreMock = jest.fn().mockReturnValue({ + clients: [ + { + name: "Alice", + company: "Acme Inc", + currency: "USD", + subscriptionCost: 29.99, + age: 30, + }, + { + name: "Bob", + company: "Beta LLC", + currency: "EUR", + subscriptionCost: 19.99, + age: 40, + }, + ], + fetchClients: jest.fn(), + }); + }); + + it("renders search input and add client button", () => { + render(); + expect(screen.getByPlaceholderText(/search by name/i)).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: /\+ add client/i }) + ).toBeInTheDocument(); + }); + + it("renders clients in table", () => { + render(); + expect(screen.getByText("Alice")).toBeInTheDocument(); + expect(screen.getByText("Acme Inc")).toBeInTheDocument(); + expect(screen.getByText("$ 29.99")).toBeInTheDocument(); + }); + + it("calls open with modal id when add button is clicked", () => { + render(); + fireEvent.click(screen.getByRole("button", { name: /\+ add client/i })); + expect(openMock).toHaveBeenCalledWith("add-client"); + }); + + it("calls fetchClients on mount", () => { + const mockFetch = jest.fn(); + useClientsStoreMock.mockReturnValueOnce({ + clients: [], + fetchClients: mockFetch, + }); + + render(); + expect(mockFetch).toHaveBeenCalled(); + }); +}); diff --git a/_tests_/unit/pages/HomePage.test.tsx b/_tests_/unit/pages/HomePage.test.tsx new file mode 100644 index 0000000..8110cf7 --- /dev/null +++ b/_tests_/unit/pages/HomePage.test.tsx @@ -0,0 +1,27 @@ +import { render, screen } from "@testing-library/react"; +import { MemoryRouter } from "react-router-dom"; +import AppRoutes from "../../../src/routes/AppRoutes"; + +describe("AppRoutes", () => { + it("renders HomePage by default", () => { + render( + + + + ); + + expect( + screen.getByRole("heading", { name: /virtusize/i }) + ).toBeInTheDocument(); + }); + + it("renders NotFound or fallback for unknown route", () => { + render( + + + + ); + + expect(screen.getByText(/not found/i)).toBeInTheDocument(); + }); +}); diff --git a/_tests_/unit/schemas/addClientSchema.test.tsx b/_tests_/unit/schemas/addClientSchema.test.tsx new file mode 100644 index 0000000..a2d9243 --- /dev/null +++ b/_tests_/unit/schemas/addClientSchema.test.tsx @@ -0,0 +1,62 @@ +import { addClientSchema } from "../../../src/schemas/clientSchema"; + +describe("addClientSchema", () => { + const validData = { + name: "Alice", + company: "Acme Inc.", + age: "30", + gender: "female", + currency: "USD", + subscriptionCost: "19.99", + }; + + it("passes with valid input and coerces values", () => { + const parsed = addClientSchema.parse(validData); + + expect(parsed.age).toBe(30); + expect(parsed.subscriptionCost).toBe(19.99); + expect(parsed.gender).toBe("female"); + }); + + it("fails if name is empty", () => { + const result = addClientSchema.safeParse({ ...validData, name: "" }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().name?._errors).toContain("Name is required"); + } + }); + + it("fails if age is too high", () => { + const result = addClientSchema.safeParse({ ...validData, age: 150 }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().age?._errors).toContain( + "Hey, that's not possible!" + ); + } + }); + + it("fails if subscriptionCost is zero", () => { + const result = addClientSchema.safeParse({ + ...validData, + subscriptionCost: 0, + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().subscriptionCost?._errors).toContain( + "Must be greater than 0" + ); + } + }); + + it("allows optional id and picture", () => { + const result = addClientSchema.parse({ + ...validData, + id: "abc123", + picture: "http://example.com/image.png", + }); + + expect(result.id).toBe("abc123"); + expect(result.picture).toBe("http://example.com/image.png"); + }); +}); diff --git a/_tests_/unit/schemas/authSchema.test.tsx b/_tests_/unit/schemas/authSchema.test.tsx new file mode 100644 index 0000000..7345a37 --- /dev/null +++ b/_tests_/unit/schemas/authSchema.test.tsx @@ -0,0 +1,146 @@ +import { + loginSchema, + registerSchema, + forgotPasswordSchema, + newPasswordSchema, +} from "../../../src/schemas/authSchema"; + +describe("Auth Schemas", () => { + describe("loginSchema", () => { + it("passes with valid data", () => { + expect(() => + loginSchema.parse({ username: "testuser", password: "secret" }) + ).not.toThrow(); + }); + it("fails if username is missing (undefined)", () => { + const result = loginSchema.safeParse({ password: "secret" }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().username?._errors).toContainEqual( + expect.stringContaining("expected string") + ); + } + }); + it("fails if username is empty string", () => { + const result = loginSchema.safeParse({ + username: "", + password: "secret", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().username?._errors).toContain( + "Username is required" + ); + } + }); + it("fails if password is too short", () => { + const result = loginSchema.safeParse({ + username: "user", + password: "123", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().password?._errors).toContain( + "Password must be at least 4 characters" + ); + } + }); + }); + + describe("registerSchema", () => { + const valid = { + username: "user", + password: "secret", + confirmPassword: "secret", + }; + + it("passes with matching passwords", () => { + expect(() => registerSchema.parse(valid)).not.toThrow(); + }); + + it("fails if username too short", () => { + const result = registerSchema.safeParse({ + ...valid, + username: "ab", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().username?._errors).toContain( + "Username must be at least 3 characters" + ); + } + }); + + it("fails if passwords don't match", () => { + const result = registerSchema.safeParse({ + ...valid, + confirmPassword: "wrong", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().confirmPassword?._errors).toContain( + "Passwords do not match" + ); + } + }); + }); + + describe("forgotPasswordSchema", () => { + it("passes with valid username", () => { + expect(() => + forgotPasswordSchema.parse({ username: "testuser" }) + ).not.toThrow(); + }); + + it("fails if username is missing (undefined)", () => { + const result = loginSchema.safeParse({ password: "secret" }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().username?._errors).toContainEqual( + expect.stringContaining("expected string") + ); + } + }); + it("fails if username is empty string", () => { + const result = loginSchema.safeParse({ + username: "", + password: "secret", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().username?._errors).toContain( + "Username is required" + ); + } + }); + }); + + describe("newPasswordSchema", () => { + it("passes with valid password", () => { + expect(() => + newPasswordSchema.parse({ password: "strongpass" }) + ).not.toThrow(); + }); + + it("fails if password is too short", () => { + const result = newPasswordSchema.safeParse({ password: "123" }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().password?._errors).toContain( + "Password must be at least 4 characters" + ); + } + }); + + it("fails if password is too long", () => { + const longPassword = "a".repeat(51); + const result = newPasswordSchema.safeParse({ password: longPassword }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.format().password?._errors).toContain( + "Password too long" + ); + } + }); + }); +}); diff --git a/_tests_/unit/shared/BackgroundImage.test.tsx b/_tests_/unit/shared/BackgroundImage.test.tsx new file mode 100644 index 0000000..5e8f64f --- /dev/null +++ b/_tests_/unit/shared/BackgroundImage.test.tsx @@ -0,0 +1,34 @@ +import { render, screen } from "@testing-library/react"; +import BackgroundImage from "../../../src/components/shared/BackgroundImage"; + +describe("BackgroundImage", () => { + it("renders with background image style", () => { + render(); + const bgDiv = screen.getByRole("img", { name: "Test image" }); + expect(bgDiv).toHaveStyle({ + backgroundImage: "url(/test.jpg)", + }); + expect(bgDiv).toHaveClass( + "bg-cover", + "bg-center", + "blur-sm", + "brightness-50" + ); + }); + + it("renders alt text for accessibility", () => { + render(); + expect( + screen.getByRole("img", { name: "Accessible image" }) + ).toBeInTheDocument(); + }); + + it("renders children inside overlay container", () => { + render( + +
Child Content
+
+ ); + expect(screen.getByText("Child Content")).toBeInTheDocument(); + }); +}); diff --git a/_tests_/unit/shared/Button.test.tsx b/_tests_/unit/shared/Button.test.tsx new file mode 100644 index 0000000..1d425d8 --- /dev/null +++ b/_tests_/unit/shared/Button.test.tsx @@ -0,0 +1,50 @@ +import { render, screen } from "@testing-library/react"; +import Button from "../../../src/components/shared/Button"; +import userEvent from "@testing-library/user-event"; + +describe("Button component", () => { + it("renders with children", () => { + render(); + expect( + screen.getByRole("button", { name: /click me/i }) + ).toBeInTheDocument(); + }); + + it("applies variant styles correctly", () => { + const { rerender } = render(); + expect(screen.getByText("Filled").className).toMatch(/bg-blue-600/); + + rerender(); + expect(screen.getByText("Outline").className).toMatch(/border-gray-300/); + + rerender(); + expect(screen.getByText("Ghost").className).toMatch(/text-blue-600/); + }); + + it("disables the button when `disabled` is true", () => { + render(); + expect(screen.getByRole("button")).toBeDisabled(); + }); + it("disables and shows spinner when `loading` is true", () => { + render(); + const btn = screen.getByRole("button"); + expect(btn).toBeDisabled(); + + const spinner = btn.querySelector("svg"); + expect(spinner).toBeInTheDocument(); + expect(spinner?.getAttribute("class")).toMatch(/animate-spin/); + }); + + it("applies custom className", () => { + render(); + expect(screen.getByRole("button").className).toMatch(/custom-class/); + }); + + it("fires onClick event", async () => { + const user = userEvent.setup(); + const handleClick = jest.fn(); + render(); + await user.click(screen.getByRole("button")); + expect(handleClick).toHaveBeenCalled(); + }); +}); diff --git a/_tests_/unit/shared/Modal.test.tsx b/_tests_/unit/shared/Modal.test.tsx new file mode 100644 index 0000000..d29f2c7 --- /dev/null +++ b/_tests_/unit/shared/Modal.test.tsx @@ -0,0 +1,35 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import Modal from "../../../src/components/shared/Modal"; + +describe("Modal component", () => { + it("does not render when isOpen is false", () => { + const { container } = render( + {}}> +
Test Content
+
+ ); + expect(container.firstChild).toBeNull(); + }); + + it("renders children and close button when isOpen is true", () => { + render( + {}}> +
Test Modal
+
+ ); + expect(screen.getByText("Test Modal")).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "×" })).toBeInTheDocument(); + }); + + it("calls onClose when close button is clicked", () => { + const handleClose = jest.fn(); + render( + +
Test Modal
+
+ ); + + fireEvent.click(screen.getByRole("button", { name: "×" })); + expect(handleClose).toHaveBeenCalledTimes(1); + }); +}); diff --git a/_tests_/unit/shared/NavBar.test.tsx b/_tests_/unit/shared/NavBar.test.tsx new file mode 100644 index 0000000..96a1cbb --- /dev/null +++ b/_tests_/unit/shared/NavBar.test.tsx @@ -0,0 +1,44 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import Navbar from "../../../src/components/shared/NavBar"; +import { MemoryRouter } from "react-router-dom"; + +const logoutMock = jest.fn(); +const navigateMock = jest.fn(); + +jest.mock("react-router-dom", () => { + const actual = jest.requireActual("react-router-dom"); + return { + ...actual, + useNavigate: () => navigateMock, + }; +}); + +jest.mock("../../../src/stores/useAuthStore", () => ({ + useAuthStore: () => ({ + user: { username: "testuser" }, + logout: logoutMock, + }), +})); + +const renderWithRouter = () => + render( + + + + ); + +describe("Navbar", () => { + it("renders username", () => { + renderWithRouter(); + expect(screen.getByText("Welcome testuser")).toBeInTheDocument(); + }); + + it("calls logout and navigates on click", () => { + renderWithRouter(); + fireEvent.click(screen.getByRole("button", { name: /logout/i })); + expect(logoutMock).toHaveBeenCalled(); + expect(navigateMock).toHaveBeenCalledWith("/?mode=login", { + replace: true, + }); + }); +}); diff --git a/_tests_/unit/shared/PaginatedTable.test.tsx b/_tests_/unit/shared/PaginatedTable.test.tsx new file mode 100644 index 0000000..bb88015 --- /dev/null +++ b/_tests_/unit/shared/PaginatedTable.test.tsx @@ -0,0 +1,102 @@ +import { render, screen, fireEvent } from "@testing-library/react"; +import PaginatedTable from "../../../src/components/shared/Table"; + +type MockData = { + id: number; + name: string; +}; + +const generateMockData = (count: number): MockData[] => + Array.from({ length: count }, (_, i) => ({ + id: i + 1, + name: `Item ${i + 1}`, + })); + +const columns = [ + { + label: "ID", + render: (item: MockData) => item.id, + }, + { + label: "Name", + render: (item: MockData) => item.name, + }, +]; + +describe("PaginatedTable", () => { + it("renders headers correctly", () => { + render(); + expect(screen.getByText("ID")).toBeInTheDocument(); + expect(screen.getByText("Name")).toBeInTheDocument(); + }); + + it("renders the first page of data", () => { + render( + + ); + expect(screen.getByText("Item 1")).toBeInTheDocument(); + expect(screen.getByText("Item 10")).toBeInTheDocument(); + expect(screen.queryByText("Item 11")).not.toBeInTheDocument(); + }); + + it("navigates to the next page", () => { + render( + + ); + fireEvent.click(screen.getByRole("button", { name: /next/i })); + expect(screen.getByText("Item 11")).toBeInTheDocument(); + expect(screen.queryByText("Item 1")).not.toBeInTheDocument(); + }); + + it("navigates back to previous page", () => { + render( + + ); + fireEvent.click(screen.getByRole("button", { name: /next/i })); + fireEvent.click(screen.getByRole("button", { name: /prev/i })); + expect(screen.getByText("Item 1")).toBeInTheDocument(); + expect(screen.queryByText("Item 11")).not.toBeInTheDocument(); + }); + + it("disables Prev on first page and Next on last page", () => { + render( + + ); + + const prevButton = screen.getByRole("button", { name: /prev/i }); + expect(prevButton).toBeDisabled(); + + fireEvent.click(screen.getByRole("button", { name: /next/i })); + const nextButton = screen.getByRole("button", { name: /next/i }); + expect(nextButton).toBeDisabled(); + }); + + it("shows correct page number", () => { + render( + + ); + expect(screen.getByText("Page 1 of 2")).toBeInTheDocument(); + fireEvent.click(screen.getByRole("button", { name: /next/i })); + expect(screen.getByText("Page 2 of 2")).toBeInTheDocument(); + }); +}); diff --git a/_tests_/unit/shared/ProtectedRoute.test.tsx b/_tests_/unit/shared/ProtectedRoute.test.tsx new file mode 100644 index 0000000..f581d15 --- /dev/null +++ b/_tests_/unit/shared/ProtectedRoute.test.tsx @@ -0,0 +1,49 @@ +import { render, screen } from "@testing-library/react"; +import ProtectedRoute from "../../../src/components/shared/ProtectedRoute"; +import { MemoryRouter } from "react-router-dom"; + +let isAuthenticatedMock = true; + +jest.mock("../../../src/stores/useAuthStore", () => ({ + useAuthStore: () => ({ + isAuthenticated: isAuthenticatedMock, + }), +})); + +jest.mock("../../../src/components/shared/NavBar", () => () => ( +
Mock Navbar
+)); + +jest.mock("../../../src/components/shared/SideBar", () => () => ( +
Mock Sidebar
+)); + +describe("ProtectedRoute", () => { + it("redirects to login if not authenticated", () => { + isAuthenticatedMock = false; + render( + + +
Protected Content
+
+
+ ); + + expect(screen.queryByText("Protected Content")).not.toBeInTheDocument(); + }); + + it("renders layout and children if authenticated", () => { + isAuthenticatedMock = true; + render( + + +
Protected Content
+
+
+ ); + + expect(screen.getByText("Protected Content")).toBeInTheDocument(); + expect(screen.getByText("Mock Navbar")).toBeInTheDocument(); + expect(screen.getByText("Mock Sidebar")).toBeInTheDocument(); + }); +}); diff --git a/_tests_/unit/shared/Sidebar.test.tsx b/_tests_/unit/shared/Sidebar.test.tsx new file mode 100644 index 0000000..3e78597 --- /dev/null +++ b/_tests_/unit/shared/Sidebar.test.tsx @@ -0,0 +1,25 @@ +import { render, screen } from "@testing-library/react"; +import { MemoryRouter, Route, Routes } from "react-router-dom"; +import Sidebar from "../../../src/components/shared/SideBar"; + +const renderWithPath = (initialPath: string) => + render( + + + } /> + + + ); + +describe("Sidebar", () => { + it("highlights Dashboard link when on /dashboard", () => { + renderWithPath("/dashboard"); + const dashboardLink = screen.getByText("Dashboard"); + expect(dashboardLink).toHaveClass("bg-gray-300"); + }); + + it("renders link/s", () => { + renderWithPath("/somewhere-else"); + expect(screen.getByText("Dashboard")).toBeInTheDocument(); + }); +}); diff --git a/_tests_/unit/stores/AuthStore.test.tsx b/_tests_/unit/stores/AuthStore.test.tsx new file mode 100644 index 0000000..11c76c3 --- /dev/null +++ b/_tests_/unit/stores/AuthStore.test.tsx @@ -0,0 +1,62 @@ +import { useAuthStore } from "../../../src/stores/useAuthStore"; +import { act } from "react"; + +describe("useAuthStore", () => { + beforeEach(() => { + useAuthStore.setState({ isAuthenticated: false, user: null }); + }); + + it("should have default values", () => { + const state = useAuthStore.getState(); + expect(state.isAuthenticated).toBe(false); + expect(state.user).toBeNull(); + }); + + it("should login and set user", () => { + const mockUser = { id: "1", username: "admin" }; + + act(() => { + useAuthStore.getState().login(mockUser); + }); + + const state = useAuthStore.getState(); + expect(state.isAuthenticated).toBe(true); + expect(state.user).toEqual(mockUser); + }); + + it("should logout and reset state", () => { + const mockUser = { id: "1", username: "admin" }; + + act(() => { + useAuthStore.getState().login(mockUser); + }); + + act(() => { + useAuthStore.getState().logout(); + }); + + const state = useAuthStore.getState(); + expect(state.isAuthenticated).toBe(false); + expect(state.user).toBeNull(); + }); + + it("should persist only when authenticated", () => { + const partializeFn = ( + useAuthStore as typeof useAuthStore & { + persist: { getOptions: () => { partialize?: (state: any) => any } }; + } + ).persist.getOptions().partialize; + + const state = { + isAuthenticated: true, + user: { id: "1", username: "admin" }, + login: jest.fn(), + logout: jest.fn(), + }; + + expect(partializeFn?.(state)).toEqual({ + isAuthenticated: true, + user: { id: "1", username: "admin" }, + }); + }); +}); diff --git a/_tests_/unit/stores/ClientStore.test.tsx b/_tests_/unit/stores/ClientStore.test.tsx new file mode 100644 index 0000000..b9e7685 --- /dev/null +++ b/_tests_/unit/stores/ClientStore.test.tsx @@ -0,0 +1,135 @@ +import { act } from "react"; +import { useClientsStore } from "../../../src/stores/useClientStore"; + +describe("useClientsStore", () => { + beforeEach(() => { + useClientsStore.setState({ clients: [], loading: false }); + global.fetch = jest.fn(); + }); + + it("initializes with empty clients", () => { + const state = useClientsStore.getState(); + expect(state.clients).toEqual([]); + expect(state.loading).toBe(false); + }); + + it("fetches clients and updates state", async () => { + const mockData = [ + { + id: "6", + gender: "male", + name: "Barron Bowen", + company: "EBIDCO", + age: 38, + picture: "http://placehold.it/32x32", + registered: "2019-10-18T07:26:00 -09:00", + currency: "SGD", + subscriptionCost: "500.00", + }, + { + id: "1753893243211", + name: "test", + company: "tttt", + age: 44, + gender: "male", + currency: "GBP", + subscriptionCost: "500.00", + picture: "http://placehold.it/32x32", + registered: "2025-07-30T16:34:03.211 -09:00", + }, + ]; + + (global.fetch as jest.Mock).mockResolvedValue({ + ok: true, + json: async () => mockData, + }); + + await act(async () => { + await useClientsStore.getState().fetchClients(); + }); + + const state = useClientsStore.getState(); + expect(state.clients).toEqual(mockData); + expect(state.loading).toBe(false); + }); + + it("adds a new client via addClient()", async () => { + const mockClient = { + id: "999", + name: "Added Client", + company: "AddCorp", + currency: "USD", + subscriptionCost: "500", + age: 25, + gender: "female", + picture: "http://placehold.it/32x32", + registered: "2021-05-31T02:24:00 -09:00", + }; + + (global.fetch as jest.Mock).mockResolvedValue({ + ok: true, + json: async () => mockClient, + }); + + await act(async () => { + await useClientsStore.getState().addClient(mockClient); + }); + + const state = useClientsStore.getState(); + expect(state.clients).toContainEqual(mockClient); + }); + + it("updates a client via updateClient()", async () => { + const original = { + id: "1", + name: "Alice", + company: "OldCo", + currency: "USD", + subscriptionCost: "500", + age: 25, + gender: "female", + picture: "http://placehold.it/32x32", + registered: "2021-05-31T02:24:00 -09:00", + }; + useClientsStore.setState({ clients: [original] }); + + const updated = { name: "Alice Updated", company: "NewCo" }; + + (global.fetch as jest.Mock).mockResolvedValue({ + ok: true, + json: async () => ({ ...original, ...updated }), + }); + + await act(async () => { + await useClientsStore.getState().updateClient("1", updated); + }); + + const state = useClientsStore.getState(); + expect(state.clients[0]).toEqual({ ...original, ...updated }); + }); + + it("deletes a client via deleteClient()", async () => { + const existingClient = { + id: "1", + name: "ToDelete", + company: "Test", + currency: "USD", + subscriptionCost: "500", + age: 25, + gender: "female", + picture: "http://placehold.it/32x32", + registered: "2021-05-31T02:24:00 -09:00", + }; + + useClientsStore.setState({ clients: [existingClient] }); + + (global.fetch as jest.Mock).mockResolvedValue({ ok: true }); + + await act(async () => { + await useClientsStore.getState().deleteClient("1"); + }); + + const state = useClientsStore.getState(); + expect(state.clients).toEqual([]); + }); +}); diff --git a/_tests_/unit/stores/ModalStore.test.tsx b/_tests_/unit/stores/ModalStore.test.tsx new file mode 100644 index 0000000..15ae5bb --- /dev/null +++ b/_tests_/unit/stores/ModalStore.test.tsx @@ -0,0 +1,66 @@ +import { act } from "react"; +import { useModalStore } from "../../../src/stores/useModalStore"; + +beforeEach(() => { + const { close } = useModalStore.getState(); + act(() => { + close(); + }); +}); + +describe("useModalStore", () => { + it("should initialize with null modalId and empty props", () => { + const state = useModalStore.getState(); + expect(state.modalId).toBe(null); + expect(state.props).toEqual({}); + }); + + it("should set modalId and props when open is called", () => { + act(() => { + useModalStore.getState().open("test-modal", { foo: "bar" }); + }); + + const state = useModalStore.getState(); + expect(state.modalId).toBe("test-modal"); + expect(state.props).toEqual({ foo: "bar" }); + }); + + it("should reset modalId and props when close is called", () => { + act(() => { + useModalStore.getState().open("modal-1", { data: 123 }); + useModalStore.getState().close(); + }); + + const state = useModalStore.getState(); + expect(state.modalId).toBe(null); + expect(state.props).toEqual({}); + }); + + it("should update modalId and props with setModalId", () => { + act(() => { + useModalStore.getState().setModalId("custom-modal", { id: 42 }); + }); + + const state = useModalStore.getState(); + expect(state.modalId).toBe("custom-modal"); + expect(state.props).toEqual({ id: 42 }); + }); + + it("isOpen should return true when modalId matches", () => { + act(() => { + useModalStore.getState().open("confirm-modal"); + }); + + const isOpen = useModalStore.getState().isOpen("confirm-modal"); + expect(isOpen).toBe(true); + }); + + it("isOpen should return false when modalId does not match", () => { + act(() => { + useModalStore.getState().open("confirm-modal"); + }); + + const isOpen = useModalStore.getState().isOpen("other-modal"); + expect(isOpen).toBe(false); + }); +}); diff --git a/clients.json b/clients.json index 15fcbb7..1263668 100644 --- a/clients.json +++ b/clients.json @@ -1,16 +1,5 @@ { "clients": [ - { - "id": "0", - "gender": "female", - "name": "Steele Burch", - "company": "TELEPARK", - "age": 21, - "picture": "http://placehold.it/32x32", - "registered": "2021-05-31T02:20:58 -09:00", - "currency": "USD", - "subscriptionCost": "1000.00" - }, { "id": "1", "gender": "male", @@ -77,5 +66,27 @@ "currency": "SGD", "subscriptionCost": "500.00" } + ], + "users": [ + { + "id": "b674", + "username": "usertesthehe", + "password": "cjswoshrdu" + }, + { + "id": "7", + "username": "testuser", + "password": "newpass123" + }, + { + "id": "eec8", + "username": "testuser123", + "password": "securepass" + }, + { + "id": "05c4", + "username": "user_1753976432042", + "password": "securepass" + } ] -} +} \ No newline at end of file diff --git a/cypress.config.js b/cypress.config.js new file mode 100644 index 0000000..b65ed32 --- /dev/null +++ b/cypress.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from "cypress"; + +export default defineConfig({ + e2e: { + baseUrl: process.env.VITE_CYPRESS_BASE_URL || "http://localhost:5173", + supportFile: "_tests_/e2e/support.ts", + specPattern: "_tests_/e2e/**/*.cy.{js,ts,jsx,tsx}", + video: false, + screenshotOnRunFailure: false, + }, + env: { + username: "testuser", + password: "newpass123", + }, +}); diff --git a/devNotes.md b/devNotes.md index ef9d6b5..f22033d 100644 --- a/devNotes.md +++ b/devNotes.md @@ -1 +1,52 @@ -# Developer Notes +## ✅ Run the app + +- Use `npm run dev` to start the app in development mode. +- Use `npm run build` to create a production build. +- Use `npm run preview` to preview the production build locally. +- Use `npm run api` to run the JSON server. + +### ✅ Unit Tests (Jest) + +- Zod Schemas: Validations, required fields, type coercions +- Modal components: Rendering, image fallback, API fallback +- Zustand logic: tested in isolation +- Pages: Rendering + +### ✅ E2E Tests (Cypress) + +- Custom command: `cy.uiLogin()` to simulate login +- Auth test: + 1. Login + 2. Register + 3. ForgotPassword - Can be improved with email verification if there is an actual server. + - Cypress specs: `_tests_/e2e/auth/` +- Full client flow test: + + 1. Add client + 2. View client + 3. Edit client + 4. Search client + 5. Delete client + +- Cypress spec: `_tests_/e2e/Dashboard.cy.ts` + +--- + +## 📌 Additional Notes + +1. 🧪 All test files are organized under the `_tests_/` directory. +2. 🚀 To run E2E tests with the Cypress GUI, use: `npm run test:e2e-open` + To run all E2E tests in headless mode, use: `npm run test:e2e-run` +3. 🧪 To run unit tests, use: `npm run test:unit` + To run unit tests in watch mode, use: `npm run test:watch` + +--- + +## 🔧 Potential Improvements + +- 🔐 Implement real user roles and tie clients to user accounts +- 🖼️ Use file uploads instead of base64 for production +- 🌍 Add pagination on the backend (currently handled client-side) +- 📤 Allow export of client data (CSV, PDF) + +--- diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d94e7de --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,23 @@ +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' +import { globalIgnores } from 'eslint/config' + +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..581f11b --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Virtusize - Client Management System + + +
+ + + diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..86c487e --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,31 @@ +import { Config } from "jest"; + +const config: Config = { + testEnvironment: "jest-fixed-jsdom", + setupFilesAfterEnv: ["/setup-test.ts"], + moduleNameMapper: { + "\\.(css|less|scss|sass)$": "identity-obj-proxy", + "\\.(jpg|jpeg|png|gif|webp|svg)$": "/_mocks_/fileMock.js", + }, + collectCoverageFrom: [ + "src/**/*.{js,jsx,ts,tsx}", + "!src/**/*.d.ts", + "!src/**/*.{spec,test}.{js,jsx,ts,tsx}", + "!**/node_modules/**", + "!**/vendor/**", + "!**/dist/**", + "!**/build/**", + "!vite.config.ts", + "!**/coverage/**", + ], + coveragePathIgnorePatterns: [ + "/node_modules/", + "setup-test.ts", + "vite-env.d.ts", + ], + transform: { + "^.+\\.tsx?$": "ts-jest", + }, +}; + +export default config; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..09dc3c6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13080 @@ +{ + "name": "virtusize-assignment", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "virtusize-assignment", + "version": "1.0.0", + "dependencies": { + "@hookform/resolvers": "^5.2.1", + "@tailwindcss/vite": "^4.1.11", + "clsx": "^2.1.1", + "date-fns-tz": "^3.2.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-hook-form": "^7.61.1", + "react-router-dom": "^7.7.1", + "react-spinners": "^0.17.0", + "sonner": "^2.0.6", + "tailwindcss": "^4.1.11", + "zod": "^4.0.13", + "zustand": "^5.0.6" + }, + "devDependencies": { + "@babel/core": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/preset-react": "^7.27.1", + "@babel/preset-typescript": "^7.27.1", + "@eslint/js": "^9.30.1", + "@testing-library/jest-dom": "^6.6.4", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/jest": "^30.0.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "babel-jest": "^30.0.5", + "cypress": "^14.5.3", + "cypress-dotenv": "^3.0.1", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^30.0.5", + "jest-environment-jsdom": "^30.0.5", + "jest-fixed-jsdom": "^0.0.9", + "json-server": "^1.0.0-beta.2", + "ts-jest": "^29.4.0", + "ts-node": "^10.9.2", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", + "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", + "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", + "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.4", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.14.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.1.tgz", + "integrity": "sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.5.tgz", + "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.5.tgz", + "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.0.5", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.0.5", + "jest-config": "30.0.5", + "jest-haste-map": "30.0.5", + "jest-message-util": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-resolve-dependencies": "30.0.5", + "jest-runner": "30.0.5", + "jest-runtime": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "jest-watcher": "30.0.5", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz", + "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.0.5.tgz", + "integrity": "sha512-gpWwiVxZunkoglP8DCnT3As9x5O8H6gveAOpvaJd2ATAoSh7ZSSCWbr9LQtUMvr8WD3VjG9YnDhsmkCK5WN1rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/@jest/expect": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.0.5", + "jest-snapshot": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz", + "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz", + "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", + "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.5.tgz", + "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.0.5", + "@jest/expect": "30.0.5", + "@jest/types": "30.0.5", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.5.tgz", + "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "jest-worker": "30.0.5", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", + "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.5.tgz", + "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.0.5", + "@jest/types": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", + "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.0.5", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.5.tgz", + "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.0", + "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": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", + "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.1.tgz", + "integrity": "sha512-oENme6QxtLCqjChRUUo3S6X8hjCXnWmJWnedD7VbGML5GUtaOtAyx+fEEXnBXVf0CBZApMQU0Idwi0FmyxzQhw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.1.tgz", + "integrity": "sha512-OikvNT3qYTl9+4qQ9Bpn6+XHM+ogtFadRLuT2EXiFQMiNkXFLQfNVppi5o28wvYdHL2s3fM0D/MZJ8UkNFZWsw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.1.tgz", + "integrity": "sha512-EFYNNGij2WllnzljQDQnlFTXzSJw87cpAs4TVBAWLdkvic5Uh5tISrIL6NRcxoh/b2EFBG/TK8hgRrGx94zD4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.1.tgz", + "integrity": "sha512-ZaNH06O1KeTug9WI2+GRBE5Ujt9kZw4a1+OIwnBHal92I8PxSsl5KpsrPvthRynkhMck4XPdvY0z26Cym/b7oA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.1.tgz", + "integrity": "sha512-n4SLVebZP8uUlJ2r04+g2U/xFeiQlw09Me5UFqny8HGbARl503LNH5CqFTb5U5jNxTouhRjai6qPT0CR5c/Iig==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.1.tgz", + "integrity": "sha512-8vu9c02F16heTqpvo3yeiu7Vi1REDEC/yES/dIfq3tSXe6mLndiwvYr3AAvd1tMNUqE9yeGYa5w7PRbI5QUV+w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.1.tgz", + "integrity": "sha512-K4ncpWl7sQuyp6rWiGUvb6Q18ba8mzM0rjWJ5JgYKlIXAau1db7hZnR0ldJvqKWWJDxqzSLwGUhA4jp+KqgDtQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.1.tgz", + "integrity": "sha512-YykPnXsjUjmXE6j6k2QBBGAn1YsJUix7pYaPLK3RVE0bQL2jfdbfykPxfF8AgBlqtYbfEnYHmLXNa6QETjdOjQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.1.tgz", + "integrity": "sha512-kKvqBGbZ8i9pCGW3a1FH3HNIVg49dXXTsChGFsHGXQaVJPLA4f/O+XmTxfklhccxdF5FefUn2hvkoGJH0ScWOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.1.tgz", + "integrity": "sha512-zzX5nTw1N1plmqC9RGC9vZHFuiM7ZP7oSWQGqpbmfjK7p947D518cVK1/MQudsBdcD84t6k70WNczJOct6+hdg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.1.tgz", + "integrity": "sha512-O8CwgSBo6ewPpktFfSDgB6SJN9XDcPSvuwxfejiddbIC/hn9Tg6Ai0f0eYDf3XvB/+PIWzOQL+7+TZoB8p9Yuw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.1.tgz", + "integrity": "sha512-JnCfFVEKeq6G3h3z8e60kAp8Rd7QVnWCtPm7cxx+5OtP80g/3nmPtfdCXbVl063e3KsRnGSKDHUQMydmzc/wBA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.1.tgz", + "integrity": "sha512-dVxuDqS237eQXkbYzQQfdf/njgeNw6LZuVyEdUaWwRpKHhsLI+y4H/NJV8xJGU19vnOJCVwaBFgr936FHOnJsQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.1.tgz", + "integrity": "sha512-CvvgNl2hrZrTR9jXK1ye0Go0HQRT6ohQdDfWR47/KFKiLd5oN5T14jRdUVGF4tnsN8y9oSfMOqH6RuHh+ck8+w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.1.tgz", + "integrity": "sha512-x7ANt2VOg2565oGHJ6rIuuAon+A8sfe1IeUx25IKqi49OjSr/K3awoNqr9gCwGEJo9OuXlOn+H2p1VJKx1psxA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.1.tgz", + "integrity": "sha512-9OADZYryz/7E8/qt0vnaHQgmia2Y0wrjSSn1V/uL+zw/i7NUhxbX4cHXdEQ7dnJgzYDS81d8+tf6nbIdRFZQoQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.1.tgz", + "integrity": "sha512-NuvSCbXEKY+NGWHyivzbjSVJi68Xfq1VnIvGmsuXs6TCtveeoDRKutI5vf2ntmNnVq64Q4zInet0UDQ+yMB6tA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.1.tgz", + "integrity": "sha512-mWz+6FSRb82xuUMMV1X3NGiaPFqbLN9aIueHleTZCc46cJvwTlvIh7reQLk4p97dv0nddyewBhwzryBHH7wtPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.1.tgz", + "integrity": "sha512-7Thzy9TMXDw9AU4f4vsLNBxh7/VOKuXi73VH3d/kHGr0tZ3x/ewgL9uC7ojUKmH1/zvmZe2tLapYcZllk3SO8Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.1.tgz", + "integrity": "sha512-7GVB4luhFmGUNXXJhH2jJwZCFB3pIOixv2E3s17GQHBFUOQaISlt7aGcQgqvCaDSxTZJUzlK/QJ1FN8S94MrzQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.38", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz", + "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", + "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", + "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", + "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", + "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", + "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", + "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", + "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", + "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", + "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.11", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", + "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", + "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz", + "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "tailwindcss": "4.1.11" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.4.tgz", + "integrity": "sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", + "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "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 + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tinyhttp/accepts": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/accepts/-/accepts-2.2.3.tgz", + "integrity": "sha512-9pQN6pJAJOU3McmdJWTcyq7LLFW8Lj5q+DadyKcvp+sxMkEpktKX5sbfJgJuOvjk6+1xWl7pe0YL1US1vaO/1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime": "4.0.4", + "negotiator": "^0.6.3" + }, + "engines": { + "node": ">=12.20.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/app": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/app/-/app-2.5.2.tgz", + "integrity": "sha512-DcB3Y8GQppLQlO2VxRYF7LzTEAoZb+VRQXuIsErcu2fNaM1xdx6NQZDso5rlZUiaeg6KYYRfU34N4XkZbv6jSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/cookie": "2.1.1", + "@tinyhttp/proxy-addr": "2.2.1", + "@tinyhttp/req": "2.2.5", + "@tinyhttp/res": "2.2.5", + "@tinyhttp/router": "2.2.3", + "header-range-parser": "1.1.3", + "regexparam": "^2.0.2" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/content-disposition": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/content-disposition/-/content-disposition-2.2.2.tgz", + "integrity": "sha512-crXw1txzrS36huQOyQGYFvhTeLeG0Si1xu+/l6kXUVYpE0TjFjEZRqTbuadQLfKGZ0jaI+jJoRyqaWwxOSHW2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/content-type": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@tinyhttp/content-type/-/content-type-0.1.4.tgz", + "integrity": "sha512-dl6f3SHIJPYbhsW1oXdrqOmLSQF/Ctlv3JnNfXAE22kIP7FosqJHxkz/qj2gv465prG8ODKH5KEyhBkvwrueKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4" + } + }, + "node_modules/@tinyhttp/cookie": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/cookie/-/cookie-2.1.1.tgz", + "integrity": "sha512-h/kL9jY0e0Dvad+/QU3efKZww0aTvZJslaHj3JTPmIPC9Oan9+kYqmh3M6L5JUQRuTJYFK2nzgL2iJtH2S+6dA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/cookie-signature": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/cookie-signature/-/cookie-signature-2.1.1.tgz", + "integrity": "sha512-VDsSMY5OJfQJIAtUgeQYhqMPSZptehFSfvEEtxr+4nldPA8IImlp3QVcOVuK985g4AFR4Hl1sCbWCXoqBnVWnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/cors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/cors/-/cors-2.0.1.tgz", + "integrity": "sha512-qrmo6WJuaiCzKWagv2yA/kw6hIISfF/hOqPWwmI6w0o8apeTMmRN3DoCFvQ/wNVuWVdU5J4KU7OX8aaSOEq51A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/vary": "^0.1.3" + }, + "engines": { + "node": ">=12.20 || 14.x || >=16" + } + }, + "node_modules/@tinyhttp/encode-url": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/encode-url/-/encode-url-2.1.1.tgz", + "integrity": "sha512-AhY+JqdZ56qV77tzrBm0qThXORbsVjs/IOPgGCS7x/wWnsa/Bx30zDUU/jPAUcSzNOzt860x9fhdGpzdqbUeUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/etag": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/etag/-/etag-2.1.2.tgz", + "integrity": "sha512-j80fPKimGqdmMh6962y+BtQsnYPVCzZfJw0HXjyH70VaJBHLKGF+iYhcKqzI3yef6QBNa8DKIPsbEYpuwApXTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/forwarded": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/forwarded/-/forwarded-2.1.2.tgz", + "integrity": "sha512-9H/eulJ68ElY/+zYpTpNhZ7vxGV+cnwaR6+oQSm7bVgZMyuQfgROW/qvZuhmgDTIxnGMXst+Ba4ij6w6Krcs3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/logger": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@tinyhttp/logger/-/logger-2.1.0.tgz", + "integrity": "sha512-Ma1fJ9CwUbn9r61/4HW6+nflsVoslpOnCrfQ6UeZq7GGIgwLzofms3HoSVG7M+AyRMJpxlfcDdbH5oFVroDMKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.20", + "dayjs": "^1.11.13", + "http-status-emojis": "^2.2.0" + }, + "engines": { + "node": ">=14.18 || >=16.20" + } + }, + "node_modules/@tinyhttp/proxy-addr": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/proxy-addr/-/proxy-addr-2.2.1.tgz", + "integrity": "sha512-BicqMqVI91hHq2BQmnqJUh0FQUnx7DncwSGgu2ghlh+JZG2rHK2ZN/rXkfhrx1rrUw6hnd0L36O8GPMh01+dDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/forwarded": "2.1.2", + "ipaddr.js": "^2.2.0" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/req": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@tinyhttp/req/-/req-2.2.5.tgz", + "integrity": "sha512-trfsXwtmsNjMcGKcLJ+45h912kLRqBQCQD06ams3Tq0kf4gHLxjHjoYOC1Z9yGjOn81XllRx8wqvnvr+Kbe3gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/accepts": "2.2.3", + "@tinyhttp/type-is": "2.2.4", + "@tinyhttp/url": "2.1.1", + "header-range-parser": "^1.1.3" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/res": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@tinyhttp/res/-/res-2.2.5.tgz", + "integrity": "sha512-yBsqjWygpuKAVz4moWlP4hqzwiDDqfrn2mA0wviJAcgvGiyOErtlQwXY7aj3aPiCpURvxvEFO//Gdy6yV+xEpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/content-disposition": "2.2.2", + "@tinyhttp/cookie": "2.1.1", + "@tinyhttp/cookie-signature": "2.1.1", + "@tinyhttp/encode-url": "2.1.1", + "@tinyhttp/req": "2.2.5", + "@tinyhttp/send": "2.2.3", + "@tinyhttp/vary": "^0.1.3", + "es-escape-html": "^0.1.1", + "mime": "4.0.4" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/router": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/router/-/router-2.2.3.tgz", + "integrity": "sha512-O0MQqWV3Vpg/uXsMYg19XsIgOhwjyhTYWh51Qng7bxqXixxx2PEvZWnFjP7c84K7kU/nUX41KpkEBTLnznk9/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/send": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/send/-/send-2.2.3.tgz", + "integrity": "sha512-o4cVHHGQ8WjVBS8UT0EE/2WnjoybrfXikHwsRoNlG1pfrC/Sd01u1N4Te8cOd/9aNGLr4mGxWb5qTm2RRtEi7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/content-type": "^0.1.4", + "@tinyhttp/etag": "2.1.2", + "mime": "4.0.4" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/type-is": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tinyhttp/type-is/-/type-is-2.2.4.tgz", + "integrity": "sha512-7F328NheridwjIfefBB2j1PEcKKABpADgv7aCJaE8x8EON77ZFrAkI3Rir7pGjopV7V9MBmW88xUQigBEX2rmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tinyhttp/content-type": "^0.1.4", + "mime": "4.0.4" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/url": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/url/-/url-2.1.1.tgz", + "integrity": "sha512-POJeq2GQ5jI7Zrdmj22JqOijB5/GeX+LEX7DUdml1hUnGbJOTWDx7zf2b5cCERj7RoXL67zTgyzVblBJC+NJWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/vary": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/vary/-/vary-0.1.3.tgz", + "integrity": "sha512-SoL83sQXAGiHN1jm2VwLUWQSQeDAAl1ywOm6T0b0Cg1CZhVsjoiZadmjhxF6FHCCY7OHHVaLnTgSMxTPIDLxMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", + "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", + "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", + "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "30.0.5", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", + "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", + "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.1.tgz", + "integrity": "sha512-23fWKohMTvS5s0wwJKycOe0dBdCwQ6+iiLaNR9zy8P13mtFRFM9qLLX6HJX5DL2pi/FNDf3fCQHM4FIMoHH/7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", + "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001731", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", + "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", + "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "1.4.0" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/core-js-compat": { + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cypress": { + "version": "14.5.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.5.3.tgz", + "integrity": "sha512-syLwKjDeMg77FRRx68bytLdlqHXDT4yBVh0/PPkcgesChYDjUZbwxLqMXuryYKzAyJsPsQHUDW1YU74/IYEUIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cypress/request": "^3.0.9", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-table3": "0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "hasha": "5.2.2", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.7.1", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + } + }, + "node_modules/cypress-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cypress-dotenv/-/cypress-dotenv-3.0.1.tgz", + "integrity": "sha512-k1EGr8JJZdUxTsV7MbnVKGhgiU2q8LsFdDfGfmvofAQTODNhiHnqP7Hp8Cy7fhzVYb/7rkGcto0tPLLr2QCggA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", + "dotenv-parse-variables": "^2.0.0", + "lodash.clonedeep": "^4.5.0" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">= 10.x" + }, + "peerDependencies": { + "cypress": ">= 10.x", + "dotenv": ">= 10.x" + } + }, + "node_modules/cypress-dotenv/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "license": "MIT", + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz", + "integrity": "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-parse-variables": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dotenv-parse-variables/-/dotenv-parse-variables-2.0.0.tgz", + "integrity": "sha512-/Tezlx6xpDqR6zKg1V4vLCeQtHWiELhWoBz5A/E0+A1lXN9iIkNbbfc4THSymS0LQUo8F1PMiIwVG8ai/HrnSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "is-string-and-not-blank": "^0.0.2" + }, + "engines": { + "node": ">= 8.3.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.192", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz", + "integrity": "sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-escape-html": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/es-escape-html/-/es-escape-html-0.1.1.tgz", + "integrity": "sha512-yUx1o+8RsG7UlszmYPtks+dm6Lho2m8lgHMOsLJQsFI0R8XwUJwiMhM1M4E/S8QLeGyf6MkDV/pWgjQ0tdTSyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.x" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-3.5.0.tgz", + "integrity": "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true, + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-range-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/header-range-parser/-/header-range-parser-1.1.3.tgz", + "integrity": "sha512-B9zCFt3jH8g09LR1vHL4pcAn8yMEtlSlOUdQemzHMRKMImNIhhszdeosYFfNW0WXKQtXIlWB+O4owHJKvEJYaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-status-emojis": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http-status-emojis/-/http-status-emojis-2.2.0.tgz", + "integrity": "sha512-ompKtgwpx8ff0hsbpIB7oE4ax1LXoHmftsHHStMELX56ivG3GhofTX8ZHWlUaFKfGjcGjw6G3rPk7dJRXMmbbg==", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflection": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-3.0.2.tgz", + "integrity": "sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string-and-not-blank": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/is-string-and-not-blank/-/is-string-and-not-blank-0.0.2.tgz", + "integrity": "sha512-FyPGAbNVyZpTeDCTXnzuwbu9/WpNXbCfbHXLpCRpN4GANhS00eEIP5Ef+k5HYSNIzIhdN9zRDoBj6unscECvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-string-blank": "^1.0.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/is-string-blank": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.5.tgz", + "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.0.5", + "@jest/types": "30.0.5", + "import-local": "^3.2.0", + "jest-cli": "30.0.5" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", + "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.0.5", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.5.tgz", + "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.0.5", + "@jest/expect": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.0.5", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-runtime": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "p-limit": "^3.1.0", + "pretty-format": "30.0.5", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.5.tgz", + "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.5.tgz", + "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.0.1", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.0.5", + "@jest/types": "30.0.5", + "babel-jest": "30.0.5", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.0.5", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-runner": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz", + "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", + "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.5.tgz", + "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "jest-util": "30.0.5", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.0.5.tgz", + "integrity": "sha512-BmnDEoAH+jEjkPrvE9DTKS2r3jYSJWlN/r46h0/DBUxKrkgt2jAZ5Nj4wXLAcV1KWkRpcFqA5zri9SWzJZ1cCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.0.5", + "@jest/environment-jsdom-abstract": "30.0.5", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jsdom": "^26.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.5.tgz", + "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-fixed-jsdom": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/jest-fixed-jsdom/-/jest-fixed-jsdom-0.0.9.tgz", + "integrity": "sha512-KPfqh2+sn5q2B+7LZktwDcwhCpOpUSue8a1I+BcixWLOQoEVyAjAGfH+IYZGoxZsziNojoHGRTC8xRbB1wDD4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "jest-environment-jsdom": ">=28.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.5.tgz", + "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "jest-worker": "30.0.5", + "micromatch": "^4.0.8", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", + "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", + "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "jest-diff": "30.0.5", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz", + "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.5", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", + "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.5.tgz", + "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", + "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.5.tgz", + "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.0.5", + "@jest/environment": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.5", + "jest-haste-map": "30.0.5", + "jest-leak-detector": "30.0.5", + "jest-message-util": "30.0.5", + "jest-resolve": "30.0.5", + "jest-runtime": "30.0.5", + "jest-util": "30.0.5", + "jest-watcher": "30.0.5", + "jest-worker": "30.0.5", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.5.tgz", + "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/globals": "30.0.5", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.5.tgz", + "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "@jest/snapshot-utils": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "babel-preset-current-node-syntax": "^1.1.0", + "chalk": "^4.1.2", + "expect": "30.0.5", + "graceful-fs": "^4.2.11", + "jest-diff": "30.0.5", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "pretty-format": "30.0.5", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", + "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.5.tgz", + "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.5", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.5.tgz", + "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.0.5", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.5.tgz", + "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.0.5", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.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.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-server": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/json-server/-/json-server-1.0.0-beta.3.tgz", + "integrity": "sha512-DwE69Ep5ccwIJZBUIWEENC30Yj8bwr4Ax9W9VoIWAYnB8Sj4ReptscO8/DRHv/nXwVlmb3Bk73Ls86+VZdYkkA==", + "dev": true, + "license": "SEE LICENSE IN ./LICENSE", + "dependencies": { + "@tinyhttp/app": "^2.4.0", + "@tinyhttp/cors": "^2.0.1", + "@tinyhttp/logger": "^2.0.0", + "chalk": "^5.3.0", + "chokidar": "^4.0.1", + "dot-prop": "^9.0.0", + "eta": "^3.5.0", + "inflection": "^3.0.0", + "json5": "^2.2.3", + "lowdb": "^7.0.1", + "milliparsec": "^4.0.0", + "sirv": "^2.0.4", + "sort-on": "^6.1.0" + }, + "bin": { + "json-server": "lib/bin.js" + }, + "engines": { + "node": ">=18.3" + } + }, + "node_modules/json-server/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lowdb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-7.0.1.tgz", + "integrity": "sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==", + "dev": true, + "license": "MIT", + "dependencies": { + "steno": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/milliparsec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/milliparsec/-/milliparsec-4.0.0.tgz", + "integrity": "sha512-/wk9d4Z6/9ZvoEH/6BI4TrTCgmkpZPuSRN/6fI9aUHOfXdNTuj/VhLS7d+NqG26bi6L9YmGXutVYvWC8zQ0qtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/mime": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", + "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", + "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.61.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz", + "integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.7.1.tgz", + "integrity": "sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.7.1.tgz", + "integrity": "sha512-bavdk2BA5r3MYalGKZ01u8PGuDBloQmzpBZVhDLrOOv1N943Wq6dcM9GhB3x8b7AbqPMEezauv4PeGkAJfy7FQ==", + "license": "MIT", + "dependencies": { + "react-router": "7.7.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-spinners": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.17.0.tgz", + "integrity": "sha512-L/8HTylaBmIWwQzIjMq+0vyaRXuoAevzWoD35wKpNTxxtYXWZp+xtgkfD7Y4WItuX0YvdxMPU79+7VhhmbmuTQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexparam": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.2.tgz", + "integrity": "sha512-A1PeDEYMrkLrfyOwv2jwihXbo9qxdGD3atBYQA9JJgreAx8/7rC6IUkWOw2NQlOxLp2wL0ifQbh1HuidDfYA6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.46.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.1.tgz", + "integrity": "sha512-33xGNBsDJAkzt0PvninskHlWnTIPgDtTwhg0U38CUoNP/7H6wI2Cz6dUeoNPbjdTdsYTGuiFFASuUOWovH0SyQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.1", + "@rollup/rollup-android-arm64": "4.46.1", + "@rollup/rollup-darwin-arm64": "4.46.1", + "@rollup/rollup-darwin-x64": "4.46.1", + "@rollup/rollup-freebsd-arm64": "4.46.1", + "@rollup/rollup-freebsd-x64": "4.46.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.1", + "@rollup/rollup-linux-arm-musleabihf": "4.46.1", + "@rollup/rollup-linux-arm64-gnu": "4.46.1", + "@rollup/rollup-linux-arm64-musl": "4.46.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.1", + "@rollup/rollup-linux-ppc64-gnu": "4.46.1", + "@rollup/rollup-linux-riscv64-gnu": "4.46.1", + "@rollup/rollup-linux-riscv64-musl": "4.46.1", + "@rollup/rollup-linux-s390x-gnu": "4.46.1", + "@rollup/rollup-linux-x64-gnu": "4.46.1", + "@rollup/rollup-linux-x64-musl": "4.46.1", + "@rollup/rollup-win32-arm64-msvc": "4.46.1", + "@rollup/rollup-win32-ia32-msvc": "4.46.1", + "@rollup/rollup-win32-x64-msvc": "4.46.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sonner": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.6.tgz", + "integrity": "sha512-yHFhk8T/DK3YxjFQXIrcHT1rGEeTLliVzWbO0xN8GberVun2RiBnxAjXAYpZrqwEVHBG9asI/Li8TAAhN9m59Q==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/sort-on": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-6.1.0.tgz", + "integrity": "sha512-WTECP0nYNWO1n2g5bpsV0yZN9cBmZsF8ThHFbOqVN0HBFRoaQZLLEMvMmJlKHNPYQeVngeI5+jJzIfFqOIo1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-prop": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/steno": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/steno/-/steno-4.0.2.tgz", + "integrity": "sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.2", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "devOptional": true, + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "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 + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.13.tgz", + "integrity": "sha512-jv+zRxuZQxTrFHzxZ46ezL2FtnE+M4HIJHJEwLsZ7UjrXHltdG6HrxvqM0twoVCWxJiYf8WqKjAcjztegpkB+Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.6.tgz", + "integrity": "sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==", + "license": "MIT", + "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 + } + } + } + } +} diff --git a/package.json b/package.json index bf9fa05..2b3a17e 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,62 @@ "name": "virtusize-assignment", "version": "1.0.0", "description": "A frontend coding challenge for Virtusize Frontend team", - "main": "index.js", + "type": "module", "scripts": { - "start": "", + "dev": "vite", "api": "json-server --watch clients.json --port 4090", - "test": "" + "test:unit": "jest", + "test:watch": "jest --watchAll", + "test:e2e-open": "cypress open", + "test:e2e-run": "cypress run", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" }, - "author": "virtusize", - "license": "UNLICENSED", "dependencies": { - "json-server": "^1.0.0-beta.2" + "@hookform/resolvers": "^5.2.1", + "@tailwindcss/vite": "^4.1.11", + "clsx": "^2.1.1", + "date-fns-tz": "^3.2.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-hook-form": "^7.61.1", + "react-router-dom": "^7.7.1", + "react-spinners": "^0.17.0", + "sonner": "^2.0.6", + "tailwindcss": "^4.1.11", + "zod": "^4.0.13", + "zustand": "^5.0.6" + }, + "devDependencies": { + "@babel/core": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/preset-react": "^7.27.1", + "@babel/preset-typescript": "^7.27.1", + "@eslint/js": "^9.30.1", + "@testing-library/jest-dom": "^6.6.4", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/jest": "^30.0.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "babel-jest": "^30.0.5", + "cypress": "^14.5.3", + "cypress-dotenv": "^3.0.1", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^30.0.5", + "jest-environment-jsdom": "^30.0.5", + "jest-fixed-jsdom": "^0.0.9", + "json-server": "^1.0.0-beta.2", + "ts-jest": "^29.4.0", + "ts-node": "^10.9.2", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.4" } } diff --git a/public/virtusize.svg b/public/virtusize.svg new file mode 100644 index 0000000..649bf0e --- /dev/null +++ b/public/virtusize.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/setup-test.ts b/setup-test.ts new file mode 100644 index 0000000..85ba855 --- /dev/null +++ b/setup-test.ts @@ -0,0 +1,2 @@ +// this looks weird to me but its needed to setup jest +import "@testing-library/jest-dom"; diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..605642d --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,19 @@ +import { BrowserRouter } from "react-router-dom"; + +import { Toaster } from "sonner"; +import AppRoutes from "./routes/AppRoutes"; +import ModalProvider from "./providers/ModalProvider"; + +const App = () => { + return ( + <> + + + + + + + ); +}; + +export default App; diff --git a/src/assets/fallback.jpg b/src/assets/fallback.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce517588f14c806512802793846e86b69a98cd26 GIT binary patch literal 2788 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

6P;>7-Etb)s~YJflLw(#nk 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 E0R25(MgRZ+ literal 0 HcmV?d00001 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/auth/AuthCard.tsx b/src/components/auth/AuthCard.tsx new file mode 100644 index 0000000..7da8d6d --- /dev/null +++ b/src/components/auth/AuthCard.tsx @@ -0,0 +1,53 @@ +import Button from "../shared/Button"; +import { LoginForm, RegisterForm, ForgotPasswordForm } from "./forms"; +import { useNavigate } from "react-router-dom"; +import { AuthCardProps, AuthMode } from "./types"; + +const AuthCard = ({ mode, setMode }: AuthCardProps) => { + const navigate = useNavigate(); + + const switchTo = (target: AuthMode) => () => setMode(target); + + const renderForm = () => { + switch (mode) { + case "login": + return navigate("/dashboard")} />; + case "register": + return setMode("login")} />; + case "forgot": + return setMode("login")} />; + default: + return null; + } + }; + + return ( +

+

Virtusize

+ {renderForm()} + +
+ {mode === "login" ? ( +
+ + +
+ ) : ( + + )} +
+
+ ); +}; + +export default AuthCard; diff --git a/src/components/auth/forms/ForgotPasswordForm.tsx b/src/components/auth/forms/ForgotPasswordForm.tsx new file mode 100644 index 0000000..8470079 --- /dev/null +++ b/src/components/auth/forms/ForgotPasswordForm.tsx @@ -0,0 +1,103 @@ +import { SubmitHandler, useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { + forgotPasswordSchema, + ForgotPasswordFormData, +} from "../../../schemas/authSchema"; +import Button from "../../shared/Button"; +import { FormProps } from "../types"; +import { toast } from "sonner"; +import React, { useState } from "react"; +import NewPasswordModal from "../modals/NewPasswordModal"; + +const ForgotPasswordForm = ({ onSuccess }: FormProps) => { + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = useForm({ + resolver: zodResolver(forgotPasswordSchema), + }); + + const [userId, setUserId] = useState(null); + const [modalOpen, setModalOpen] = useState(false); + + const onSubmit: SubmitHandler = async (data) => { + try { + const res = await fetch( + `http://localhost:4090/users?username=${data.username}` + ); + if (!res.ok) throw new Error("Failed to search user."); + + const users = await res.json(); + if (users.length === 0) { + toast.error("User not found."); + return; + } + + setUserId(users[0].id); + setModalOpen(true); + } catch (error) { + console.error("Submission error:", error); + toast.error("Something went wrong."); + } + }; + + const handlePasswordSubmit = async (newPassword: string) => { + if (!userId) return; + + try { + const updateRes = await fetch(`http://localhost:4090/users/${userId}`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ password: newPassword }), + }); + console.log("status:", updateRes.status); + console.log("content-type:", updateRes.headers.get("content-type")); + + if (!updateRes.ok) return toast.error("Update Error"); + + toast.success("Password updated successfully"); + + onSuccess?.(); + } catch (error) { + console.error("Update error:", error); + toast.error("Failed to update password."); + } finally { + setModalOpen(false); + } + }; + + return ( + <> +
+ + {errors.username && ( +

{errors.username.message}

+ )} + + +
+ + setModalOpen(false)} + onSubmit={handlePasswordSubmit} + /> + + ); +}; + +export default React.memo(ForgotPasswordForm); diff --git a/src/components/auth/forms/LoginForm.tsx b/src/components/auth/forms/LoginForm.tsx new file mode 100644 index 0000000..b3903e9 --- /dev/null +++ b/src/components/auth/forms/LoginForm.tsx @@ -0,0 +1,90 @@ +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { loginSchema, LoginFormData } from "../../../schemas/authSchema"; +import Button from "../../shared/Button"; +import React, { useEffect, useState } from "react"; +import { useAuthStore } from "../../../stores/useAuthStore"; +import { FormProps } from "../types"; + +const LoginForm = ({ onSuccess }: FormProps) => { + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + watch, + } = useForm({ + resolver: zodResolver(loginSchema), + }); + const [loginError, setLoginError] = useState(""); + const { login } = useAuthStore(); + const watchedUsername = watch("username"); + const watchedPassword = watch("password"); + + useEffect(() => { + if (loginError) { + setLoginError(""); + } + }, [watchedUsername, watchedPassword]); + + const onSubmit = async (data: LoginFormData) => { + setLoginError(""); + + try { + const res = await fetch( + `http://localhost:4090/users?username=${data.username}&password=${data.password}` + ); + + if (!res.ok) { + throw new Error("Server responded with error"); + } + + const users = await res.json(); + + if (users.length > 0) { + const user = users[0]; + login(user); + onSuccess(); + } else { + setLoginError("Invalid username or password."); + } + } catch (err) { + setLoginError("Server error. Please try again later."); + console.error("Login request failed:", err); + } + }; + + return ( +
+

{loginError ?? ""}

+ + + {errors.username && ( +

{errors.username.message}

+ )} + + + {errors.password && ( +

{errors.password.message}

+ )} + + +
+ ); +}; + +export default React.memo(LoginForm); diff --git a/src/components/auth/forms/NewPasswordForm.tsx b/src/components/auth/forms/NewPasswordForm.tsx new file mode 100644 index 0000000..1d4f8c0 --- /dev/null +++ b/src/components/auth/forms/NewPasswordForm.tsx @@ -0,0 +1,63 @@ +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { + newPasswordSchema, + NewPasswordSchema, +} from "../../../schemas/authSchema"; +import Button from "../../shared/Button"; + +type Props = { + onSubmit: (password: string) => void; + onCancel?: () => void; +}; + +const NewPasswordForm = ({ onSubmit, onCancel }: Props) => { + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + reset, + } = useForm({ + resolver: zodResolver(newPasswordSchema), + }); + + const internalSubmit = (data: NewPasswordSchema) => { + onSubmit(data.password.trim()); + reset(); + }; + + return ( +
+ + {errors.password && ( +

{errors.password.message}

+ )} +
+ + +
+
+ ); +}; + +export default NewPasswordForm; diff --git a/src/components/auth/forms/RegisterForm.tsx b/src/components/auth/forms/RegisterForm.tsx new file mode 100644 index 0000000..af95c13 --- /dev/null +++ b/src/components/auth/forms/RegisterForm.tsx @@ -0,0 +1,97 @@ +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { registerSchema, RegisterFormData } from "../../../schemas/authSchema"; +import Button from "../../shared/Button"; +import { FormProps } from "../types"; +import React from "react"; +import { toast } from "sonner"; + +const RegisterForm = ({ onSuccess }: FormProps) => { + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = useForm({ + resolver: zodResolver(registerSchema), + }); + + const onSubmit = async (data: RegisterFormData) => { + try { + const res = await fetch( + `http://localhost:4090/users?username=${data.username}` + ); + if (!res.ok) throw new Error("Failed to check username"); + + const existingUsers = await res.json(); + if (existingUsers.length > 0) { + toast.error("Username already taken."); + return; + } + + const createRes = await fetch("http://localhost:4090/users", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + username: data.username, + password: data.password, + }), + }); + + if (createRes.ok) { + onSuccess(); + } else { + toast.error("Failed to register. Please try again."); + } + } catch (err) { + toast.error("Server error. Please try again later."); + console.error("Registration error:", err); + } + }; + + return ( +
+ {errors.username && ( +

{errors.username.message}

+ )} + + + {errors.username && ( +

{errors.username.message}

+ )} + + + {errors.password && ( +

{errors.password.message}

+ )} + + + {errors.confirmPassword && ( +

{errors.confirmPassword.message}

+ )} + + +
+ ); +}; + +export default React.memo(RegisterForm); diff --git a/src/components/auth/forms/index.ts b/src/components/auth/forms/index.ts new file mode 100644 index 0000000..5a8f989 --- /dev/null +++ b/src/components/auth/forms/index.ts @@ -0,0 +1,4 @@ +export { default as LoginForm } from "./LoginForm"; +export { default as RegisterForm } from "./RegisterForm"; +export { default as ForgotPasswordForm } from "./ForgotPasswordForm"; +export { default as NewPasswordForm } from "./NewPasswordForm"; diff --git a/src/components/auth/modals/NewPasswordModal.tsx b/src/components/auth/modals/NewPasswordModal.tsx new file mode 100644 index 0000000..d7d921c --- /dev/null +++ b/src/components/auth/modals/NewPasswordModal.tsx @@ -0,0 +1,22 @@ +import { NewPasswordForm } from "../forms"; + +type Props = { + isOpen: boolean; + onClose: () => void; + onSubmit: (password: string) => void; +}; + +const NewPasswordModal = ({ isOpen, onClose, onSubmit }: Props) => { + if (!isOpen) return null; + + return ( +
+
+

Enter New Password

+ +
+
+ ); +}; + +export default NewPasswordModal; diff --git a/src/components/auth/types.ts b/src/components/auth/types.ts new file mode 100644 index 0000000..cea9283 --- /dev/null +++ b/src/components/auth/types.ts @@ -0,0 +1,15 @@ +export type FormProps = { + onSuccess: () => void; +}; + +export type UserResponse = { + id: string; + username: string; +}; + +export type AuthMode = "login" | "register" | "forgot"; + +export type AuthCardProps = { + mode: AuthMode; + setMode: (mode: AuthMode) => void; +}; diff --git a/src/components/clients/forms/ClientForm.tsx b/src/components/clients/forms/ClientForm.tsx new file mode 100644 index 0000000..60a2ee5 --- /dev/null +++ b/src/components/clients/forms/ClientForm.tsx @@ -0,0 +1,231 @@ +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useClientsStore } from "../../../stores/useClientStore"; +import { AddClientData, addClientSchema } from "../../../schemas/clientSchema"; +import Button from "../../shared/Button"; +import { CURRENCYOPTIONS } from "../../../lib/constants"; +import { toast } from "sonner"; +import { fromZonedTime, formatInTimeZone } from "date-fns-tz"; +import { useState } from "react"; +import fallbackImg from "../../../assets/fallback.jpg"; + +type AddClientFormProps = { + initialData?: AddClientData; + mode?: "add" | "edit"; + onSuccess: () => void; +}; + +const AddClientForm = ({ + onSuccess, + initialData, + mode = "add", +}: AddClientFormProps) => { + const { addClient, updateClient } = useClientsStore(); + const [imageBase64, setImageBase64] = useState( + initialData?.picture ?? null + ); + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(addClientSchema), + defaultValues: initialData, + }); + + const handleImageUpload = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + + if (!file) return; + const MAX_FILE_SIZE = 100 * 1024; + + if (file.size > MAX_FILE_SIZE) { + alert("Image is too large. Please upload one under 100 KB."); + return; + } + + const reader = new FileReader(); + reader.onloadend = () => { + setImageBase64(reader.result as string); + }; + reader.readAsDataURL(file); + }; + + const onSubmit = async (data: AddClientData) => { + try { + const now = new Date(); + const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; + const utcDate = fromZonedTime(now, userTimeZone); + + const registeredDate = formatInTimeZone( + utcDate, + "Etc/GMT+9", + "yyyy-MM-dd'T'HH:mm:ss.SSS XXX" + ); + + const clientPayload = { + ...data, + subscriptionCost: parseFloat(data.subscriptionCost.toString()).toFixed( + 2 + ), + picture: imageBase64 ?? "http://placehold.it/32x32", + }; + + if (mode === "edit" && initialData?.id) { + await updateClient(initialData.id, clientPayload); + toast.success("Client updated successfully"); + } else { + await addClient({ + ...clientPayload, + id: Date.now().toString(), + registered: registeredDate, + }); + toast.success("Client added successfully"); + } + + onSuccess(); + } catch (error) { + console.error("Save client failed:", error); + toast.error("Failed to save client. Please try again."); + } + }; + + return ( +
+

+ {mode === "edit" ? "Edit Client" : "Add New Client"} +

+ + + {errors.name &&

{errors.name.message}

} + + + {errors.company && ( +

{errors.company.message}

+ )} + + + {errors.age &&

{errors.age.message}

} +
+ +
+ ▼ +
+
+ {errors.gender &&

{errors.gender.message}

} +
+ + +
+ ▼ +
+
+ {errors.currency && ( +

{errors.currency.message}

+ )} + + {errors.subscriptionCost && ( +

{errors.subscriptionCost.message}

+ )} + +
+ + +
+ + + {imageBase64 && ( + { + e.currentTarget.onerror = null; + e.currentTarget.src = fallbackImg; + }} + alt="Preview" + className="w-20 h-20 object-cover rounded-full border border-gray-300 shadow-sm" + /> + )} +
+ + {imageBase64 && ( +

+ Image preview. This will be saved with the client. +

+ )} +
+ + +
+ ); +}; + +export default AddClientForm; diff --git a/src/components/clients/modals/ConfirmDeleteModal.tsx b/src/components/clients/modals/ConfirmDeleteModal.tsx new file mode 100644 index 0000000..65b61e0 --- /dev/null +++ b/src/components/clients/modals/ConfirmDeleteModal.tsx @@ -0,0 +1,49 @@ +import { useClientsStore } from "../../../stores/useClientStore"; + +import { toast } from "sonner"; +import Button from "../../shared/Button"; + +type Props = { + clientId: string; + onSuccess: () => void; +}; + +const ConfirmDeleteModal = ({ clientId, onSuccess }: Props) => { + const { deleteClient } = useClientsStore(); + + const handleDelete = async () => { + try { + await deleteClient(clientId); + toast.success("Client deleted"); + onSuccess(); + } catch (err) { + toast.error("Failed to delete client"); + } + }; + + return ( +
+

Confirm Deletion

+

+ Are you sure you want to delete this client? +

+
+ + +
+
+ ); +}; + +export default ConfirmDeleteModal; diff --git a/src/components/clients/modals/ViewClientModal.tsx b/src/components/clients/modals/ViewClientModal.tsx new file mode 100644 index 0000000..f860797 --- /dev/null +++ b/src/components/clients/modals/ViewClientModal.tsx @@ -0,0 +1,71 @@ +import { useEffect, useState } from "react"; +import { useClientsStore } from "../../../stores/useClientStore"; +import { formatDate } from "../../../lib/utils"; +import fallbackImg from "../../../assets/fallback.jpg"; + +type Props = { + id: string; +}; + +const ViewClientModal = ({ id }: Props) => { + const { clients } = useClientsStore(); + const [client, setClient] = useState(() => clients.find((c) => c.id === id)); + + useEffect(() => { + if (!client) { + fetch(`http://localhost:4090/clients/${id}`) + .then((res) => res.json()) + .then(setClient) + .catch(console.error); + } + }, [id]); + + if (!client) return null; + + return ( +
+

+ Client Profile +

+ +
+ {client.name} { + e.currentTarget.onerror = null; + e.currentTarget.src = fallbackImg; + }} + /> +
+

{client.name}

+

{client.company}

+
+
+ +
+
+ Age + {client.age} +
+
+ Gender + {client.gender} +
+
+ Subscription + + {client.currency} {client.subscriptionCost} + +
+
+ Registered On + {formatDate(client.registered)} +
+
+
+ ); +}; + +export default ViewClientModal; diff --git a/src/components/shared/BackgroundImage.tsx b/src/components/shared/BackgroundImage.tsx new file mode 100644 index 0000000..9e4c3c0 --- /dev/null +++ b/src/components/shared/BackgroundImage.tsx @@ -0,0 +1,36 @@ +import { ReactNode } from "react"; +import { clsx } from "clsx"; + +type BackgroundImageProps = { + src: string; + alt?: string; + className?: string; + overlayClassName?: string; + children?: ReactNode; +}; + +const BackgroundImage = ({ + src, + alt = "", + className, + overlayClassName = "relative overflow-hidden", + children, +}: BackgroundImageProps) => { + return ( +
+
+ + {children} +
+ ); +}; + +export default BackgroundImage; diff --git a/src/components/shared/Button.tsx b/src/components/shared/Button.tsx new file mode 100644 index 0000000..325f7b6 --- /dev/null +++ b/src/components/shared/Button.tsx @@ -0,0 +1,61 @@ +import { ButtonHTMLAttributes } from "react"; +import { clsx } from "clsx"; + +type ButtonVariant = "filled" | "outline" | "ghost"; + +interface ButtonProps extends ButtonHTMLAttributes { + variant?: ButtonVariant; + loading?: boolean; +} + +const Button = ({ + children, + className, + variant = "filled", + loading = false, + disabled, + ...props +}: ButtonProps) => { + const base = + "cursor-pointer inline-flex items-center justify-center px-4 py-2 rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"; + + const variants: Record = { + filled: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500", + outline: "border border-gray-300 text-gray-800 hover:bg-gray-100", + ghost: "text-blue-600 hover:underline", + }; + + return ( + + ); +}; + +export default Button; diff --git a/src/components/shared/Modal.tsx b/src/components/shared/Modal.tsx new file mode 100644 index 0000000..2e12b47 --- /dev/null +++ b/src/components/shared/Modal.tsx @@ -0,0 +1,28 @@ +import Button from "./Button"; + +type Props = { + isOpen: boolean; + onClose: () => void; + children: React.ReactNode; +}; + +const Modal = ({ isOpen, onClose, children }: Props) => { + if (!isOpen) return null; + + return ( +
+
+ + {children} +
+
+ ); +}; + +export default Modal; diff --git a/src/components/shared/NavBar.tsx b/src/components/shared/NavBar.tsx new file mode 100644 index 0000000..dee519b --- /dev/null +++ b/src/components/shared/NavBar.tsx @@ -0,0 +1,27 @@ +import { useNavigate } from "react-router-dom"; +import { useAuthStore } from "../../stores/useAuthStore"; +import Button from "./Button"; + +const Navbar = () => { + const navigate = useNavigate(); + const { user, logout } = useAuthStore(); + const handleLogout = () => { + logout(); + navigate("/?mode=login", { replace: true }); + }; + + return ( +
+

{`Welcome ${user?.username}`}

+ +
+ ); +}; + +export default Navbar; diff --git a/src/components/shared/ProtectedRoute.tsx b/src/components/shared/ProtectedRoute.tsx new file mode 100644 index 0000000..2f1bd78 --- /dev/null +++ b/src/components/shared/ProtectedRoute.tsx @@ -0,0 +1,28 @@ +import { Navigate } from "react-router-dom"; +import { useAuthStore } from "../../stores/useAuthStore"; +import { ReactNode } from "react"; +import Navbar from "./NavBar"; +import Sidebar from "./SideBar"; + +const ProtectedRoute = ({ children }: { children: ReactNode }) => { + const { isAuthenticated } = useAuthStore(); + + if (!isAuthenticated) { + return ; + } + + return ( +
+ +
+ + +
{children}
+
+
+ ); +}; + +export default ProtectedRoute; diff --git a/src/components/shared/SideBar.tsx b/src/components/shared/SideBar.tsx new file mode 100644 index 0000000..65ac74c --- /dev/null +++ b/src/components/shared/SideBar.tsx @@ -0,0 +1,20 @@ +import { Link, useLocation } from "react-router-dom"; + +const Sidebar = () => { + const { pathname } = useLocation(); + + const linkClasses = (path: string) => + `block px-4 py-2 rounded hover:bg-gray-200 ${ + pathname === path ? "bg-gray-300 font-semibold" : "" + }`; + + return ( + + ); +}; + +export default Sidebar; diff --git a/src/components/shared/Table.tsx b/src/components/shared/Table.tsx new file mode 100644 index 0000000..b0eb722 --- /dev/null +++ b/src/components/shared/Table.tsx @@ -0,0 +1,79 @@ +import { ReactNode, useState } from "react"; +import Button from "./Button"; + +type Column = { + label: string | ReactNode; + render: (item: T) => React.ReactNode; +}; + +type PaginatedTableProps = { + data: T[]; + columns: Column[]; + itemsPerPage?: number; + cypress?: string; +}; + +export default function PaginatedTable({ + data, + columns, + itemsPerPage = 10, + cypress, +}: PaginatedTableProps) { + const [page, setPage] = useState(1); + const totalPages = Math.ceil(data.length / itemsPerPage); + + const start = (page - 1) * itemsPerPage; + const end = start + itemsPerPage; + const currentData = data.slice(start, end); + + return ( + <> +
+ + + + {columns.map((col, i) => ( + + ))} + + + + {currentData.map((item, idx) => ( + + {columns.map((col, i) => ( + + ))} + + ))} + +
+ {col.label} +
+ {col.render(item)} +
+
+
+ + + Page {page} of {totalPages} + + +
+ + ); +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..f1d8c73 --- /dev/null +++ b/src/index.css @@ -0,0 +1 @@ +@import "tailwindcss"; diff --git a/src/lib/constants.ts b/src/lib/constants.ts new file mode 100644 index 0000000..b85bb38 --- /dev/null +++ b/src/lib/constants.ts @@ -0,0 +1,22 @@ +export const CURRENCYOPTIONS = [ + { code: "USD", symbol: "$" }, + { code: "INR", symbol: "₹" }, + { code: "Yen", symbol: "¥" }, + { code: "CAD", symbol: "C$" }, + { code: "SGD", symbol: "S$" }, + { code: "EUR", symbol: "€" }, + { code: "GBP", symbol: "£" }, + { code: "PHP", symbol: "₱" }, + { code: "AUD", symbol: "A$" }, +]; +export const ROUTES = { + HOME: "/", + DASHBOARD: "/dashboard", +}; + +export const MODALIDS = { + VIEWCLIENT: "view-client", + ADDCLIENT: "add-client", + EDITCLIENT: "edit-client", + CONFIRMDELETE: "delete-client", +}; diff --git a/src/lib/hooks/useCurrencySymbol.ts b/src/lib/hooks/useCurrencySymbol.ts new file mode 100644 index 0000000..722f9b9 --- /dev/null +++ b/src/lib/hooks/useCurrencySymbol.ts @@ -0,0 +1,18 @@ +const currencyMap: Record = { + USD: "$", + INR: "₹", + Yen: "¥", + CAD: "C$", + SGD: "S$", + EUR: "€", + GBP: "£", + PHP: "₱", + AUD: "A$", +}; +export const useCurrencySymbol = () => { + const getSymbol = (code: string): string => { + return currencyMap[code === "Yen" ? code : code.toUpperCase()] || code; + }; + + return { getSymbol }; +}; diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..fadf6e9 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,13 @@ +export const formatDate = (isoDate: string) => { + const cleaned = isoDate.replace(" -", "-"); + + return new Date(cleaned).toLocaleString(undefined, { + year: "numeric", + month: "long", + day: "numeric", + hour: "numeric", + minute: "numeric", + second: "numeric", + hour12: true, + }); +}; diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..10ed13e --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./index.css"; +import App from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + +); diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx new file mode 100644 index 0000000..b04a5ff --- /dev/null +++ b/src/pages/Dashboard.tsx @@ -0,0 +1,97 @@ +import { useClientsStore } from "../stores/useClientStore"; +import PaginatedTable from "../components/shared/Table"; +import { useEffect, useState } from "react"; +import { useCurrencySymbol } from "../lib/hooks/useCurrencySymbol"; +import Button from "../components/shared/Button"; +import { useModalStore } from "../stores/useModalStore"; +import { Client } from "../stores/types"; +import { MODALIDS } from "../lib/constants"; + +export default function Dashboard() { + const { clients, fetchClients } = useClientsStore(); + const { getSymbol } = useCurrencySymbol(); + const { open } = useModalStore(); + + const [searchTerm, setSearchTerm] = useState(""); + + useEffect(() => { + fetchClients(); + }, [fetchClients]); + + const filteredClients = clients.filter((c) => { + const term = searchTerm.toLowerCase(); + return ( + c.name.toLowerCase().includes(term) || + c.company.toLowerCase().includes(term) + ); + }); + const columns = [ + { label: "Name", render: (c: Client) => c.name }, + { label: "Company", render: (c: Client) => c.company }, + { + label: "Subscription", + render: (c: Client) => `${getSymbol(c.currency)} ${c.subscriptionCost}`, + }, + { label: "Age", render: (c: Client) => c.age }, + { + label:
Actions
, + render: (c: Client) => ( +
+ + + + +
+ ), + }, + ]; + + return ( +
+
+ setSearchTerm(e.target.value)} + /> + +
+ + +
+ ); +} diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx new file mode 100644 index 0000000..0a4009d --- /dev/null +++ b/src/pages/HomePage.tsx @@ -0,0 +1,38 @@ +import { useEffect } from "react"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import BackgroundImage from "../components/shared/BackgroundImage"; +import bgImage from "../assets/homeBg.webp"; +import AuthCard from "../components/auth/AuthCard"; +import { useAuthStore } from "../stores/useAuthStore"; +import type { AuthMode } from "../components/auth/types"; + +const HomePage = () => { + const [searchParams, setSearchParams] = useSearchParams(); + const navigate = useNavigate(); + const isAuthenticated = useAuthStore((s) => s.isAuthenticated); + + const modeParam = searchParams.get("mode"); + const mode: AuthMode = ["login", "register", "forgot"].includes(modeParam!) + ? (modeParam as AuthMode) + : "login"; + + useEffect(() => { + if (isAuthenticated) navigate("/dashboard"); + }, [isAuthenticated, navigate]); + + const setMode = (newMode: AuthMode) => { + setSearchParams({ mode: newMode }); + }; + + return ( + + + + ); +}; + +export default HomePage; diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx new file mode 100644 index 0000000..c898c7e --- /dev/null +++ b/src/pages/NotFound.tsx @@ -0,0 +1,18 @@ +import { Link } from "react-router-dom"; + +const NotFoundPage = () => { + return ( +
+

404

+

Page not found

+ + Back to Home + +
+ ); +}; + +export default NotFoundPage; diff --git a/src/providers/ModalProvider.tsx b/src/providers/ModalProvider.tsx new file mode 100644 index 0000000..ad2eb37 --- /dev/null +++ b/src/providers/ModalProvider.tsx @@ -0,0 +1,83 @@ +import { lazy, useEffect } from "react"; +import { useModalStore } from "../stores/useModalStore"; +import Modal from "../components/shared/Modal"; +import { useSearchParams } from "react-router-dom"; + +import { MODALIDS } from "../lib/constants"; +import ConfirmDeleteModal from "../components/clients/modals/ConfirmDeleteModal"; + +const ClientForm = lazy(() => import("../components/clients/forms/ClientForm")); +const ViewClientModal = lazy( + () => import("../components/clients/modals/ViewClientModal") +); + +const ModalProvider = () => { + const { modalId, props, setModalId, close } = useModalStore(); + const [searchParams, setSearchParams] = useSearchParams(); + + const urlModalId = searchParams.get("modal"); + const id = searchParams.get("id"); + + useEffect(() => { + if (urlModalId && modalId !== urlModalId) { + setModalId(urlModalId); + } + }, [urlModalId]); + + useEffect(() => { + if (modalId) { + setSearchParams((prev) => { + const next = new URLSearchParams(prev); + next.set("modal", modalId); + if (props?.id) next.set("id", props.id); + return next; + }); + } else { + setSearchParams((prev) => { + const next = new URLSearchParams(prev); + next.delete("modal"); + next.delete("id"); + return next; + }); + } + }, [modalId]); + + const handleClose = () => { + close(); + }; + + const renderModal = () => { + switch (modalId) { + case MODALIDS.ADDCLIENT: + return ( + + + + ); + case MODALIDS.VIEWCLIENT: + return ( + + + + ); + case MODALIDS.EDITCLIENT: + return ( + + + + ); + case MODALIDS.CONFIRMDELETE: + return ( + + + + ); + default: + return null; + } + }; + + return renderModal(); +}; + +export default ModalProvider; diff --git a/src/routes/AppRoutes.tsx b/src/routes/AppRoutes.tsx new file mode 100644 index 0000000..1f111d9 --- /dev/null +++ b/src/routes/AppRoutes.tsx @@ -0,0 +1,27 @@ +import { Routes, Route, Outlet } from "react-router-dom"; +import HomePage from "../pages/HomePage"; +import NotFoundPage from "../pages/NotFound"; +import Dashboard from "../pages/Dashboard"; +import ProtectedRoute from "../components/shared/ProtectedRoute"; +import { ROUTES } from "../lib/constants"; + +const AppRoutes = () => ( + + } /> + + + + + } + > + } /> + + + } /> + +); + +export default AppRoutes; diff --git a/src/schemas/authSchema.ts b/src/schemas/authSchema.ts new file mode 100644 index 0000000..68ec580 --- /dev/null +++ b/src/schemas/authSchema.ts @@ -0,0 +1,41 @@ +import { z } from "zod"; + +export const loginSchema = z.object({ + username: z.string().min(1, "Username is required"), + password: z + .string() + .min(1, "Password is required") + .min(4, "Password must be at least 4 characters"), +}); + +export const registerSchema = z + .object({ + username: z + .string() + .min(1, "Username is required") + .min(3, "Username must be at least 3 characters"), + password: z + .string() + .min(1, "Password is required") + .min(4, "Password must be at least 4 characters"), + confirmPassword: z.string(), + }) + .refine((data) => data.password === data.confirmPassword, { + message: "Passwords do not match", + path: ["confirmPassword"], + }); + +export const forgotPasswordSchema = z.object({ + username: z.string().min(1, "Username is required"), +}); +export const newPasswordSchema = z.object({ + password: z + .string() + .min(4, "Password must be at least 4 characters") + .max(50, "Password too long"), +}); + +export type LoginFormData = z.infer; +export type RegisterFormData = z.infer; +export type ForgotPasswordFormData = z.infer; +export type NewPasswordSchema = z.infer; diff --git a/src/schemas/clientSchema.ts b/src/schemas/clientSchema.ts new file mode 100644 index 0000000..194daed --- /dev/null +++ b/src/schemas/clientSchema.ts @@ -0,0 +1,29 @@ +import { z } from "zod"; +export const addClientSchema = z + .object({ + id: z.string().optional(), + name: z.string().min(1, "Name is required"), + company: z.string().min(1, "Company is required"), + age: z.coerce + .number() + .min(1, "Age must be a number") + .max(120, "Hey, that's not possible!"), + gender: z.enum(["male", "female"]), + currency: z.string().min(1, "Currency is required"), + subscriptionCost: z.coerce.number().min(0.01, "Must be greater than 0"), + picture: z.string().optional(), + }) + .transform( + (data) => + data as { + id?: string; + name: string; + company: string; + age: number; + gender: "male" | "female"; + currency: string; + subscriptionCost: number; + picture?: string; + } + ); +export type AddClientData = z.infer; diff --git a/src/stores/types.ts b/src/stores/types.ts new file mode 100644 index 0000000..036c78a --- /dev/null +++ b/src/stores/types.ts @@ -0,0 +1,39 @@ +import { UserResponse } from "../components/auth/types"; + +export type AuthState = { + isAuthenticated: boolean; + user: UserResponse | null; + login: (user: AuthState["user"]) => void; + logout: () => void; +}; + +export type Client = { + id: string; + name: string; + company: string; + subscriptionCost: string; + currency: string; + age: number; + gender: string; + picture: string; + registered: string; +}; + +export interface ClientsStore { + clients: Client[]; + loading: boolean; + fetchClients: () => Promise; + addClient: (client: Client) => Promise; + updateClient: (id: string, updated: Partial) => Promise; + deleteClient: (id: string) => Promise; +} +type ModalId = "add-client" | "edit-client" | "delete-client" | string; + +export type ModalStore = { + modalId: ModalId | null; + props: Record; + open: (id: string, props?: Record) => void; + close: () => void; + setModalId: (id: string | null, props?: Record) => void; + isOpen: (id: string) => boolean; +}; diff --git a/src/stores/useAuthStore.ts b/src/stores/useAuthStore.ts new file mode 100644 index 0000000..9c89da6 --- /dev/null +++ b/src/stores/useAuthStore.ts @@ -0,0 +1,25 @@ +import { create } from "zustand"; +import { persist } from "zustand/middleware"; +import { AuthState } from "./types"; + +export const authPartialize = (state: AuthState) => + state.isAuthenticated + ? { isAuthenticated: state.isAuthenticated, user: state.user } + : {}; + +export const useAuthStore = create()( + persist( + (set) => ({ + isAuthenticated: false, + user: null, + login: (user) => { + set({ isAuthenticated: true, user }); + }, + logout: () => set({ isAuthenticated: false, user: null }), + }), + { + name: "auth", + partialize: authPartialize, + } + ) +); diff --git a/src/stores/useClientStore.ts b/src/stores/useClientStore.ts new file mode 100644 index 0000000..d652bea --- /dev/null +++ b/src/stores/useClientStore.ts @@ -0,0 +1,76 @@ +import { ClientsStore } from "./types"; +import { create } from "zustand"; +import { persist } from "zustand/middleware"; + +export const useClientsStore = create()( + persist( + (set) => ({ + clients: [], + loading: false, + + fetchClients: async () => { + set({ loading: true }); + try { + const res = await fetch("http://localhost:4090/clients"); + const data = await res.json(); + set({ clients: data }); + } catch (error) { + console.error("Fetch clients failed:", error); + } finally { + set({ loading: false }); + } + }, + + addClient: async (client) => { + try { + const res = await fetch("http://localhost:4090/clients", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(client), + }); + if (!res.ok) throw new Error("Failed to add client"); + + const newClient = await res.json(); + set((state) => ({ clients: [...state.clients, newClient] })); + return newClient; + } catch (err) { + console.error("Add client error:", err); + throw err; + } + }, + updateClient: async (id, updated) => { + try { + const res = await fetch(`http://localhost:4090/clients/${id}`, { + method: "PATCH", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(updated), + }); + if (!res.ok) throw new Error("Failed to update client"); + + const updatedClient = await res.json(); + set((state) => ({ + clients: state.clients.map((c) => + c.id === id ? updatedClient : c + ), + })); + } catch (err) { + console.error("Update client error:", err); + } + }, + + deleteClient: async (id) => { + try { + await fetch(`http://localhost:4090/clients/${id}`, { + method: "DELETE", + }); + set((state) => ({ + clients: state.clients.filter((c) => c.id !== id), + })); + } catch (err) { + console.error("Delete client error:", err); + } + }, + }), + { name: "clients-storage" } + ) +); diff --git a/src/stores/useModalStore.ts b/src/stores/useModalStore.ts new file mode 100644 index 0000000..f087368 --- /dev/null +++ b/src/stores/useModalStore.ts @@ -0,0 +1,15 @@ +import { create } from "zustand"; +import { ModalStore } from "./types"; + +export const useModalStore = create((set, get) => ({ + modalId: null, + props: {}, + + open: (id, props = {}) => set({ modalId: id, props }), + close: () => set({ modalId: null, props: {} }), + + setModalId: (id, props = {}) => + set({ modalId: id, props: id ? props ?? {} : {} }), + + isOpen: (id) => get().modalId === id, +})); diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..5af168c --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src", "./setup-test.ts", "_tests_"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c3bc4ab --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "isolatedModules": true, + "jsx": "react-jsx" + }, + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..607a826 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..78d83ab --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), tailwindcss()], + server: { + watch: { + ignored: ["**/clients.json"], + }, + }, + build: { + chunkSizeWarningLimit: 600, + }, +}); From 68c9e33e4a16d21eb8a9e3173ea1f8297d334bf7 Mon Sep 17 00:00:00 2001 From: Kervy Cantos Date: Fri, 1 Aug 2025 14:43:04 +0800 Subject: [PATCH 2/2] fix: hide time in ViewClientModal --- src/lib/utils.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib/utils.ts b/src/lib/utils.ts index fadf6e9..4e29c79 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -5,9 +5,5 @@ export const formatDate = (isoDate: string) => { year: "numeric", month: "long", day: "numeric", - hour: "numeric", - minute: "numeric", - second: "numeric", - hour12: true, }); };