diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 665480ebf..fe4dd7902 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,6 +8,9 @@ jobs: test: runs-on: ubuntu-latest name: pnpm test + env: + NEXT_PUBLIC_APP_URL: http://localhost:4000 + NEXT_PUBLIC_V0_URL: https://v0.dev steps: - uses: actions/checkout@v3 with: diff --git a/apps/v4/package.json b/apps/v4/package.json index c4721f0b3..e5fde0507 100644 --- a/apps/v4/package.json +++ b/apps/v4/package.json @@ -54,7 +54,7 @@ "@radix-ui/react-toggle-group": "^1.1.1", "@radix-ui/react-tooltip": "^1.1.7", "@tabler/icons-react": "^3.31.0", - "@tailwindcss/postcss": "^4.0.1", + "@tailwindcss/postcss": "^4.1.11", "@tanstack/react-table": "^8.9.1", "@vercel/analytics": "^1.4.1", "change-case": "^5.4.4", @@ -108,7 +108,7 @@ "eslint-config-next": "15.3.1", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.11", - "tailwindcss": "^4.1.7", + "tailwindcss": "^4.1.11", "tw-animate-css": "^1.2.4", "typescript": "^5", "unist-builder": "3.0.0", diff --git a/package.json b/package.json index 7573c27c8..94b5f0ba9 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,8 @@ "release": "changeset version", "pub:beta": "cd packages/shadcn && pnpm pub:beta", "pub:release": "cd packages/shadcn && pnpm pub:release", - "test": "turbo run test --filter=!shadcn-ui --force", - "tests:test": "pnpm --filter=tests test" + "test:dev": "turbo run test --filter=!shadcn-ui --force", + "test": "start-server-and-test v4:dev http://localhost:4000 test:dev" }, "packageManager": "pnpm@9.0.6", "dependencies": { @@ -86,6 +86,7 @@ "@types/node": "^20.11.27", "@types/react": "^18.2.65", "@types/react-dom": "^18.2.22", + "start-server-and-test": "^2.0.12", "typescript": "^5.5.3" } } diff --git a/packages/tests/fixtures/next-app/app/layout.tsx b/packages/tests/fixtures/next-app/app/layout.tsx index ae8456212..ef077d2d9 100644 --- a/packages/tests/fixtures/next-app/app/layout.tsx +++ b/packages/tests/fixtures/next-app/app/layout.tsx @@ -1,12 +1,12 @@ -import './globals.css' -import type { Metadata } from 'next' -import { Inter } from 'next/font/google' +import "./globals.css" +import type { Metadata } from "next" +import { Inter } from "next/font/google" -const inter = Inter({ subsets: ['latin'] }) +const inter = Inter({ subsets: ["latin"] }) export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', + title: "Create Next App", + description: "Generated by create next app", } export default function RootLayout({ diff --git a/packages/tests/fixtures/next-app/app/page.tsx b/packages/tests/fixtures/next-app/app/page.tsx index 7a8286b57..08930a9d3 100644 --- a/packages/tests/fixtures/next-app/app/page.tsx +++ b/packages/tests/fixtures/next-app/app/page.tsx @@ -1,4 +1,4 @@ -import Image from 'next/image' +import Image from "next/image" export default function Home() { return ( @@ -15,7 +15,7 @@ export default function Home() { target="_blank" rel="noopener noreferrer" > - By{' '} + By{" "} Vercel Logo

- Docs{' '} + Docs{" "} -> @@ -64,7 +64,7 @@ export default function Home() { rel="noopener noreferrer" >

- Learn{' '} + Learn{" "} -> @@ -81,7 +81,7 @@ export default function Home() { rel="noopener noreferrer" >

- Templates{' '} + Templates{" "} -> @@ -98,7 +98,7 @@ export default function Home() { rel="noopener noreferrer" >

- Deploy{' '} + Deploy{" "} -> diff --git a/packages/tests/fixtures/vite-app/src/App.tsx b/packages/tests/fixtures/vite-app/src/App.tsx index 3d7ded3ff..ff7a823d2 100644 --- a/packages/tests/fixtures/vite-app/src/App.tsx +++ b/packages/tests/fixtures/vite-app/src/App.tsx @@ -1,7 +1,8 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' +import { useState } from "react" + +import reactLogo from "./assets/react.svg" +import viteLogo from "/vite.svg" +import "./App.css" function App() { const [count, setCount] = useState(0) diff --git a/packages/tests/fixtures/vite-app/src/main.tsx b/packages/tests/fixtures/vite-app/src/main.tsx index bef5202a3..50d7a89b9 100644 --- a/packages/tests/fixtures/vite-app/src/main.tsx +++ b/packages/tests/fixtures/vite-app/src/main.tsx @@ -1,10 +1,11 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.tsx' +import { StrictMode } from "react" +import { createRoot } from "react-dom/client" -createRoot(document.getElementById('root')!).render( +import "./index.css" +import App from "./App.tsx" + +createRoot(document.getElementById("root")!).render( - , + ) diff --git a/packages/tests/fixtures/vite-app/vite.config.ts b/packages/tests/fixtures/vite-app/vite.config.ts index ed509f6a7..f7449c10a 100644 --- a/packages/tests/fixtures/vite-app/vite.config.ts +++ b/packages/tests/fixtures/vite-app/vite.config.ts @@ -1,7 +1,7 @@ -import path from "path"; -import tailwindcss from "@tailwindcss/vite"; -import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; +import path from "path" +import tailwindcss from "@tailwindcss/vite" +import react from "@vitejs/plugin-react" +import { defineConfig } from "vite" // https://vite.dev/config/ export default defineConfig({ @@ -11,4 +11,4 @@ export default defineConfig({ "#custom": path.resolve(__dirname, "./src"), }, }, -}); +}) diff --git a/packages/tests/package.json b/packages/tests/package.json index eb2434eee..49b18894e 100644 --- a/packages/tests/package.json +++ b/packages/tests/package.json @@ -6,7 +6,9 @@ "type": "module", "scripts": { "test": "vitest run", - "test:watch": "vitest" + "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache", + "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache", + "typecheck": "tsc --noEmit" }, "dependencies": { "shadcn": "workspace:*" @@ -19,7 +21,6 @@ "rimraf": "^6.0.1", "typescript": "^5.5.3", "vite-tsconfig-paths": "^4.2.0", - "vitest": "^2.1.9", - "wait-port": "^1.1.0" + "vitest": "^2.1.9" } -} \ No newline at end of file +} diff --git a/packages/tests/src/tests/add.test.ts b/packages/tests/src/tests/add.test.ts index dc015420c..7f28746b8 100644 --- a/packages/tests/src/tests/add.test.ts +++ b/packages/tests/src/tests/add.test.ts @@ -5,7 +5,7 @@ import { describe, expect, it } from "vitest" import { createFixtureTestDirectory, cssHasProperties, - fileExists, + getRegistryUrl, npxShadcn, } from "../utils/helpers" @@ -15,7 +15,7 @@ describe("shadcn add", () => { await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) await npxShadcn(fixturePath, ["add", "button"]) expect( - await fileExists(path.join(fixturePath, "components/ui/button.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/button.tsx")) ).toBe(true) }) @@ -24,46 +24,34 @@ describe("shadcn add", () => { await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) await npxShadcn(fixturePath, ["add", "button", "card"]) expect( - await fileExists(path.join(fixturePath, "components/ui/button.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/button.tsx")) ).toBe(true) expect( - await fileExists(path.join(fixturePath, "components/ui/card.tsx")) - ).toBe(true) - }) - - it("should add item with registryDependencies", async () => { - const fixturePath = await createFixtureTestDirectory("next-app") - await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) - await npxShadcn(fixturePath, ["add", "alert-dialog"]) - expect( - await fileExists(path.join(fixturePath, "components/ui/alert-dialog.tsx")) - ).toBe(true) - expect( - await fileExists(path.join(fixturePath, "components/ui/button.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/card.tsx")) ).toBe(true) }) it("should add item from url", async () => { const fixturePath = await createFixtureTestDirectory("next-app") await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) - await npxShadcn(fixturePath, [ - "add", - "https://ui.shadcn.com/r/styles/new-york-v4/login-01.json", - ]) + const registryUrl = getRegistryUrl() + const url = `${registryUrl}/styles/new-york-v4/login-01.json` + await npxShadcn(fixturePath, ["add", url]) + expect( - await fileExists(path.join(fixturePath, "components/ui/button.tsx")) + await fs.pathExists(path.join(fixturePath, "app/login/page.tsx")) ).toBe(true) expect( - await fileExists(path.join(fixturePath, "components/ui/card.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/button.tsx")) ).toBe(true) expect( - await fileExists(path.join(fixturePath, "components/ui/input.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/card.tsx")) ).toBe(true) expect( - await fileExists(path.join(fixturePath, "components/ui/label.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/input.tsx")) ).toBe(true) expect( - await fileExists(path.join(fixturePath, "components/login-form.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/label.tsx")) ).toBe(true) }) @@ -86,9 +74,23 @@ describe("shadcn add", () => { const fixturePath = await createFixtureTestDirectory("next-app") await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) await npxShadcn(fixturePath, ["add", "login-03"]) - expect(await fileExists(path.join(fixturePath, "app/login/page.tsx"))).toBe( - true - ) + expect( + await fs.pathExists(path.join(fixturePath, "app/login/page.tsx")) + ).toBe(true) + }) + + it("should add item with registryDependencies", async () => { + const fixturePath = await createFixtureTestDirectory("next-app") + await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) + await npxShadcn(fixturePath, ["add", "alert-dialog"]) + expect( + await fs.pathExists( + path.join(fixturePath, "components/ui/alert-dialog.tsx") + ) + ).toBe(true) + expect( + await fs.pathExists(path.join(fixturePath, "components/ui/button.tsx")) + ).toBe(true) }) it("should add item with npm dependencies", async () => { @@ -153,7 +155,7 @@ describe("shadcn add", () => { "add", "../../fixtures/registry/example-item.json", ]) - expect(await fileExists(path.join(fixturePath, "path/to/foo.txt"))).toBe( + expect(await fs.pathExists(path.join(fixturePath, "path/to/foo.txt"))).toBe( true ) expect( @@ -169,7 +171,7 @@ describe("shadcn add", () => { "../../fixtures/registry/example-item.json", ]) expect( - await fileExists(path.join(fixturePath, "src/path/to/foo.txt")) + await fs.pathExists(path.join(fixturePath, "src/path/to/foo.txt")) ).toBe(true) expect( await fs.readFile(path.join(fixturePath, "src/path/to/foo.txt"), "utf-8") @@ -183,7 +185,9 @@ describe("shadcn add", () => { "add", "../../fixtures/registry/example-item-to-root.json", ]) - expect(await fileExists(path.join(fixturePath, "config.json"))).toBe(true) + expect(await fs.pathExists(path.join(fixturePath, "config.json"))).toBe( + true + ) expect(await fs.readJson(path.join(fixturePath, "config.json"))).toEqual({ foo: "bar", }) @@ -196,7 +200,9 @@ describe("shadcn add", () => { "add", "../../fixtures/registry/example-item-to-root.json", ]) - expect(await fileExists(path.join(fixturePath, "config.json"))).toBe(true) + expect(await fs.pathExists(path.join(fixturePath, "config.json"))).toBe( + true + ) expect(await fs.readJson(path.join(fixturePath, "config.json"))).toEqual({ foo: "bar", }) @@ -209,7 +215,7 @@ describe("shadcn add", () => { "add", "../../fixtures/registry/example-env-vars.json", ]) - expect(await fileExists(path.join(fixturePath, ".env.local"))).toBe(true) + expect(await fs.pathExists(path.join(fixturePath, ".env.local"))).toBe(true) expect(await fs.readFile(path.join(fixturePath, ".env.local"), "utf-8")) .toMatchInlineSnapshot(` "APP_URL=https://example.com @@ -235,7 +241,7 @@ describe("shadcn add", () => { "../../fixtures/registry/example-env-vars.json", ]) - expect(await fileExists(path.join(fixturePath, ".env.local"))).toBe(true) + expect(await fs.pathExists(path.join(fixturePath, ".env.local"))).toBe(true) expect(await fs.readFile(path.join(fixturePath, ".env.local"), "utf-8")) .toMatchInlineSnapshot(` "APP_URL=https://foo.com @@ -260,7 +266,9 @@ describe("shadcn add", () => { "../../fixtures/registry/example-env-vars.json", ]) - expect(await fileExists(path.join(fixturePath, ".env.local"))).toBe(false) + expect(await fs.pathExists(path.join(fixturePath, ".env.local"))).toBe( + false + ) expect(await fs.readFile(path.join(fixturePath, ".env"), "utf-8")) .toMatchInlineSnapshot(` "APP_URL=https://foo.com diff --git a/packages/tests/src/tests/init.test.ts b/packages/tests/src/tests/init.test.ts index 08aecb96b..77585f0b7 100644 --- a/packages/tests/src/tests/init.test.ts +++ b/packages/tests/src/tests/init.test.ts @@ -2,12 +2,7 @@ import path from "path" import fs from "fs-extra" import { describe, expect, it } from "vitest" -import { - createFixtureTestDirectory, - fileExists, - npxShadcn, - readJson, -} from "../utils/helpers" +import { createFixtureTestDirectory, npxShadcn } from "../utils/helpers" describe("shadcn init - next-app", () => { it("should init with default configuration", async () => { @@ -15,9 +10,9 @@ describe("shadcn init - next-app", () => { await npxShadcn(fixturePath, ["init", "--base-color=neutral"]) const componentsJsonPath = path.join(fixturePath, "components.json") - expect(await fileExists(componentsJsonPath)).toBe(true) + expect(await fs.pathExists(componentsJsonPath)).toBe(true) - const componentsJson = await readJson(componentsJsonPath) + const componentsJson = await fs.readJson(componentsJsonPath) expect(componentsJson).toMatchObject({ style: "new-york", rsc: true, @@ -37,7 +32,9 @@ describe("shadcn init - next-app", () => { }, }) - expect(await fileExists(path.join(fixturePath, "lib/utils.ts"))).toBe(true) + expect(await fs.pathExists(path.join(fixturePath, "lib/utils.ts"))).toBe( + true + ) const cssPath = path.join(fixturePath, "app/globals.css") const cssContent = await fs.readFile(cssPath, "utf-8") @@ -53,7 +50,7 @@ describe("shadcn init - next-app", () => { const fixturePath = await createFixtureTestDirectory("next-app") await npxShadcn(fixturePath, ["init", "--base-color=zinc"]) - const componentsJson = await readJson( + const componentsJson = await fs.readJson( path.join(fixturePath, "components.json") ) expect(componentsJson.style).toBe("new-york") @@ -68,7 +65,7 @@ describe("shadcn init - next-app", () => { "--no-css-variables", ]) - const componentsJson = await readJson( + const componentsJson = await fs.readJson( path.join(fixturePath, "components.json") ) expect(componentsJson.tailwind.cssVariables).toBe(false) @@ -84,7 +81,7 @@ describe("shadcn init - next-app", () => { await npxShadcn(fixturePath, ["init", "--base-color=neutral", "button"]) expect( - await fileExists(path.join(fixturePath, "components/ui/button.tsx")) + await fs.pathExists(path.join(fixturePath, "components/ui/button.tsx")) ).toBe(true) }) }) @@ -94,7 +91,7 @@ describe("shadcn init - vite-app", () => { const fixturePath = await createFixtureTestDirectory("vite-app") await npxShadcn(fixturePath, ["init", "--base-color=gray", "alert-dialog"]) - const componentsJson = await readJson( + const componentsJson = await fs.readJson( path.join(fixturePath, "components.json") ) expect(componentsJson.style).toBe("new-york") @@ -108,13 +105,15 @@ describe("shadcn init - vite-app", () => { }) expect( - await fileExists( + await fs.pathExists( path.join(fixturePath, "src/components/ui/alert-dialog.tsx") ) ).toBe(true) expect( - await fileExists(path.join(fixturePath, "src/components/ui/button.tsx")) + await fs.pathExists( + path.join(fixturePath, "src/components/ui/button.tsx") + ) ).toBe(true) const alertDialogContent = await fs.readFile( diff --git a/packages/tests/src/utils/helpers.ts b/packages/tests/src/utils/helpers.ts index b7ba643dd..b39ea5a20 100644 --- a/packages/tests/src/utils/helpers.ts +++ b/packages/tests/src/utils/helpers.ts @@ -6,20 +6,10 @@ import fs from "fs-extra" const __dirname = path.dirname(fileURLToPath(import.meta.url)) const FIXTURES_DIR = path.join(__dirname, "../../fixtures") const TEMP_DIR = path.join(__dirname, "../../temp") -const CACHE_DIR = path.join(__dirname, "../../.cache") const SHADCN_CLI_PATH = path.join(__dirname, "../../../shadcn/dist/index.js") -export async function fileExists(filePath: string): Promise { - try { - await fs.access(filePath) - return true - } catch { - return false - } -} - -export async function readJson(filePath: string): Promise { - return fs.readJSON(filePath) +export function getRegistryUrl() { + return process.env.REGISTRY_URL || "http://localhost:4000/r" } export async function createFixtureTestDirectory(fixtureName: string) { @@ -74,14 +64,9 @@ export async function runCommand( } export async function npxShadcn(cwd: string, args: string[]) { - const { getRegistryUrl } = await import("./setup") - - await fs.ensureDir(CACHE_DIR) - return runCommand(cwd, args, { env: { REGISTRY_URL: getRegistryUrl(), - SHADCN_CACHE_DIR: CACHE_DIR, }, }) } @@ -92,7 +77,7 @@ export function cssHasProperties( selector: string properties: Record }> -): boolean { +) { return checks.every(({ selector, properties }) => { const escapedSelector = selector.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") const regex = new RegExp(`${escapedSelector}\\s*{([^}]+)}`, "s") diff --git a/packages/tests/src/utils/registry.ts b/packages/tests/src/utils/registry.ts deleted file mode 100644 index a90f758bd..000000000 --- a/packages/tests/src/utils/registry.ts +++ /dev/null @@ -1,67 +0,0 @@ -import path from "path" -import { fileURLToPath } from "url" -import { execa, type ExecaChildProcess } from "execa" -import waitPort from "wait-port" - -const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const ROOT_DIR = path.join(__dirname, "../../../..") -const PORT = 4000 - -export class Registry { - private process?: ExecaChildProcess - private _url?: string - - get url(): string { - if (!this._url) { - throw new Error("Registry not started. Call start() first.") - } - return this._url - } - - async start(): Promise { - if (this.process) { - return - } - - this.process = execa("pnpm", ["v4:dev"], { - cwd: ROOT_DIR, - env: { - ...process.env, - NODE_ENV: "development", - }, - stdio: "pipe", - reject: false, - }) - - try { - await waitPort({ - port: PORT, - host: "localhost", - timeout: 60000, - interval: 1000, - }) - - this._url = `http://localhost:${PORT}/r` - } catch (error) { - this.process.kill() - this.process = undefined - throw new Error(`Registry failed to start on port ${PORT}: ${error}`) - } - } - - async stop(): Promise { - if (!this.process) { - return - } - - this.process.kill("SIGTERM") - await new Promise((resolve) => setTimeout(resolve, 1000)) - - if (!this.process.killed) { - this.process.kill("SIGKILL") - } - - this.process = undefined - this._url = undefined - } -} diff --git a/packages/tests/src/utils/setup.ts b/packages/tests/src/utils/setup.ts index d2f2b0b3e..cf5b75d25 100644 --- a/packages/tests/src/utils/setup.ts +++ b/packages/tests/src/utils/setup.ts @@ -1,37 +1,18 @@ /* eslint-disable turbo/no-undeclared-env-vars */ +import { tmpdir } from "os" import path from "path" -import { fileURLToPath } from "url" +import fs from "fs-extra" import { rimraf } from "rimraf" -import { afterAll, beforeAll } from "vitest" -import { Registry } from "./registry" +const TEMP_DIR = fs.mkdtempSync(path.join(tmpdir(), "shadcn-tests")) -const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const TEMP_DIR = path.join(__dirname, "../../temp") +console.log("TEMP_DIR", TEMP_DIR) -let globalRegistry: Registry | null = null - -beforeAll(async () => { +export async function setup() { + await rimraf(TEMP_DIR) + await fs.ensureDir(TEMP_DIR) +} + +export async function teardown() { await rimraf(TEMP_DIR) - - if (!globalRegistry) { - globalRegistry = new Registry() - await globalRegistry.start() - - process.env.TEST_REGISTRY_URL = globalRegistry.url - } -}, 120000) - -afterAll(async () => { - if (globalRegistry) { - await globalRegistry.stop() - globalRegistry = null - } - - // Also clean up temp directory after all tests - await rimraf(TEMP_DIR) -}) - -export function getRegistryUrl(): string { - return process.env.TEST_REGISTRY_URL || "http://localhost:4000/r" } diff --git a/packages/tests/vitest.config.ts b/packages/tests/vitest.config.ts index e090c86a7..235d3ce39 100644 --- a/packages/tests/vitest.config.ts +++ b/packages/tests/vitest.config.ts @@ -3,13 +3,13 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { - testTimeout: 60000, + testTimeout: 120000, hookTimeout: 120000, globals: true, environment: "node", - setupFiles: ["./src/utils/setup.ts"], + globalSetup: "./src/utils/setup.ts", maxConcurrency: 4, - isolate: true, + isolate: false, }, plugins: [ tsconfigPaths({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9e3235ed..6be647b9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,6 +108,9 @@ importers: '@types/react-dom': specifier: ^18.2.22 version: 18.3.5(@types/react@18.3.18) + start-server-and-test: + specifier: ^2.0.12 + version: 2.0.12 typescript: specifier: ^5.5.3 version: 5.7.3 @@ -226,8 +229,8 @@ importers: specifier: ^3.31.0 version: 3.31.0(react@19.1.0) '@tailwindcss/postcss': - specifier: ^4.0.1 - version: 4.0.2 + specifier: ^4.1.11 + version: 4.1.11 '@tanstack/react-table': specifier: ^8.9.1 version: 8.20.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -269,7 +272,7 @@ importers: version: 11.6.6(acorn@8.14.0)(fumadocs-core@15.4.2(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) fumadocs-ui: specifier: ^15.3.1 - version: 15.4.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.8) + version: 15.4.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11) input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -380,8 +383,8 @@ importers: specifier: ^0.6.11 version: 0.6.11(@ianvs/prettier-plugin-sort-imports@4.4.2(prettier@3.4.2))(prettier@3.4.2) tailwindcss: - specifier: ^4.1.7 - version: 4.1.8 + specifier: ^4.1.11 + version: 4.1.11 tw-animate-css: specifier: ^1.2.4 version: 1.2.4 @@ -832,9 +835,6 @@ importers: vitest: specifier: ^2.1.9 version: 2.1.9(@types/node@20.17.16)(lightningcss@1.30.1)(msw@2.7.1(@types/node@20.17.16)(typescript@5.7.3)) - wait-port: - specifier: ^1.1.0 - version: 1.1.0 packages: @@ -2020,6 +2020,12 @@ packages: engines: {node: '>=6'} hasBin: true + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@hookform/resolvers@3.10.0': resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==} peerDependencies: @@ -3957,6 +3963,15 @@ packages: engines: {node: '>= 8.0.0'} hasBin: true + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sindresorhus/is@0.14.0': resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} @@ -4075,8 +4090,8 @@ packages: resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.0.2': - resolution: {integrity: sha512-+VB4Csd7BY06XY1sxcJ/xZ/kLlJ7spxG2uJwj0qIiS4RvliznfbI33lrSUb9WKpWFgnzJFx3kClmrmMj9FgVsw==} + '@tailwindcss/postcss@4.1.11': + resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} '@tanstack/react-table@8.20.6': resolution: {integrity: sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ==} @@ -4617,6 +4632,9 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -4632,6 +4650,9 @@ packages: resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} + axios@1.11.0: + resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -4696,6 +4717,9 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + body-parser@2.2.0: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} @@ -4833,6 +4857,10 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -4944,6 +4972,10 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -4955,10 +4987,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - comment-json@4.2.5: resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} engines: {node: '>= 6'} @@ -5201,6 +5229,15 @@ packages: supports-color: optional: true + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -5259,6 +5296,10 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -5336,6 +5377,9 @@ packages: duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -5705,6 +5749,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -5851,6 +5898,15 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.4: resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} engines: {node: '>= 0.4'} @@ -5859,6 +5915,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -5906,6 +5966,9 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -6590,6 +6653,9 @@ packages: jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jotai@2.11.3: resolution: {integrity: sha512-B/PsewAQ0UOS5e2+TTWegUPQ3SCLPCjPY24LYUjfn2EorGlluTA2dFjVLgF1+xHLjK9Jit3y5mKHyMG3Xq/GZg==} engines: {node: '>=12.20.0'} @@ -6694,6 +6760,10 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -6910,6 +6980,9 @@ packages: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} + map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -7194,10 +7267,18 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mime-types@3.0.1: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} @@ -7690,6 +7771,9 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -7913,6 +7997,11 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -8315,6 +8404,9 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -8561,6 +8653,9 @@ packages: split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -8570,6 +8665,11 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + start-server-and-test@2.0.12: + resolution: {integrity: sha512-U6QiS5qsz+DN5RfJJrkAXdooxMDnLZ+n5nR8kaX//ZH19SilF6b58Z3zM9zTfrNIkJepzauHo4RceSgvgUSX9w==} + engines: {node: '>=16'} + hasBin: true + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -8581,6 +8681,9 @@ packages: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -8752,15 +8855,9 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.0.2: - resolution: {integrity: sha512-cjWQjZEbzQNqH4IiSjRcYg96zjlu+rjzTFkqTc/fN3FNnIU4CoNlQvwCsIomwG/2EPWYT9ysFL1QF6Av3fZeNg==} - tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} - tailwindcss@4.1.8: - resolution: {integrity: sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==} - tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -9348,9 +9445,9 @@ packages: jsdom: optional: true - wait-port@1.1.0: - resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} - engines: {node: '>=10'} + wait-on@8.0.3: + resolution: {integrity: sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==} + engines: {node: '>=12.0.0'} hasBin: true wcwidth@1.0.1: @@ -10581,7 +10678,7 @@ snapshots: '@eslint/config-array@0.19.1': dependencies: '@eslint/object-schema': 2.1.5 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -10607,7 +10704,7 @@ snapshots: '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.1 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.1 @@ -10672,6 +10769,12 @@ snapshots: protobufjs: 7.4.0 yargs: 17.7.2 + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + '@hookform/resolvers@3.10.0(react-hook-form@7.54.2(react@18.3.1))': dependencies: react-hook-form: 7.54.2(react@18.3.1) @@ -13293,6 +13396,14 @@ snapshots: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + '@sindresorhus/is@0.14.0': {} '@standard-schema/spec@1.0.0': {} @@ -13386,14 +13497,13 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - '@tailwindcss/postcss@4.0.2': + '@tailwindcss/postcss@4.1.11': dependencies: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 - lightningcss: 1.30.1 postcss: 8.5.6 - tailwindcss: 4.0.2 + tailwindcss: 4.1.11 '@tanstack/react-table@8.20.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -13653,7 +13763,7 @@ snapshots: '@typescript-eslint/types': 8.33.0 '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.33.0 - debug: 4.4.0 + debug: 4.4.1 eslint: 9.19.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: @@ -13663,7 +13773,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.7.3) '@typescript-eslint/types': 8.33.0 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color - typescript @@ -13691,7 +13801,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0 + debug: 4.4.1 eslint: 9.19.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 @@ -13722,7 +13832,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/visitor-keys': 8.22.0 - debug: 4.4.0 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -13738,7 +13848,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.7.3) '@typescript-eslint/types': 8.33.0 '@typescript-eslint/visitor-keys': 8.33.0 - debug: 4.4.0 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -14000,6 +14110,8 @@ snapshots: async-function@1.0.0: {} + asynckit@0.4.0: {} + autoprefixer@10.4.20(postcss@8.5.1): dependencies: browserslist: 4.24.4 @@ -14016,6 +14128,14 @@ snapshots: axe-core@4.10.2: {} + axios@1.11.0(debug@4.4.1): + dependencies: + follow-redirects: 1.15.9(debug@4.4.1) + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axobject-query@4.1.0: {} b4a@1.6.7: {} @@ -14071,6 +14191,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bluebird@3.7.2: {} + body-parser@2.2.0: dependencies: bytes: 3.1.2 @@ -14221,6 +14343,8 @@ snapshots: check-error@2.1.1: {} + check-more-types@2.24.0: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -14339,14 +14463,16 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} commander@10.0.1: {} commander@4.1.1: {} - commander@9.5.0: {} - comment-json@4.2.5: dependencies: array-timsort: 1.0.3 @@ -14587,6 +14713,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.1: + dependencies: + ms: 2.1.3 + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 @@ -14644,6 +14774,8 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + delayed-stream@1.0.0: {} + depd@2.0.0: {} dequal@2.0.3: {} @@ -14703,6 +14835,8 @@ snapshots: duplexer3@0.1.5: {} + duplexer@0.1.2: {} + eastasianwidth@0.2.0: {} ee-first@1.1.1: {} @@ -15095,7 +15229,7 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.61.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: - debug: 4.4.0 + debug: 4.4.1 enhanced-resolve: 5.18.2 eslint: 8.57.1 eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.61.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) @@ -15112,7 +15246,7 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.33.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@2.4.2)): dependencies: - debug: 4.4.0 + debug: 4.4.1 enhanced-resolve: 5.18.2 eslint: 9.19.0(jiti@2.4.2) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.33.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.19.0(jiti@2.4.2)) @@ -15382,7 +15516,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -15475,6 +15609,16 @@ snapshots: etag@1.8.1: {} + event-stream@3.3.4: + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + eventemitter3@4.0.7: {} eventsource-parser@3.0.1: {} @@ -15680,6 +15824,10 @@ snapshots: flatted@3.3.1: {} + follow-redirects@1.15.9(debug@4.4.1): + optionalDependencies: + debug: 4.4.1 + for-each@0.3.4: dependencies: is-callable: 1.2.7 @@ -15689,6 +15837,14 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + format@0.2.2: {} formdata-polyfill@4.0.10: @@ -15721,6 +15877,8 @@ snapshots: fresh@2.0.0: {} + from@0.1.7: {} + fs-constants@1.0.0: {} fs-extra@11.3.0: @@ -15802,7 +15960,7 @@ snapshots: - acorn - supports-color - fumadocs-ui@15.4.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.8): + fumadocs-ui@15.4.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11): dependencies: '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -15826,7 +15984,7 @@ snapshots: react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) tailwind-merge: 3.3.0 optionalDependencies: - tailwindcss: 4.1.8 + tailwindcss: 4.1.11 transitivePeerDependencies: - '@oramacloud/client' - '@types/react' @@ -16601,6 +16759,14 @@ snapshots: jju@1.4.0: {} + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + jotai@2.11.3(@types/react@18.3.18)(react@18.3.1): optionalDependencies: '@types/react': 18.3.18 @@ -16687,6 +16853,8 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 + lazy-ass@1.6.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -16847,6 +17015,8 @@ snapshots: map-obj@4.3.0: {} + map-stream@0.1.0: {} + markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} @@ -17532,8 +17702,14 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mime-types@3.0.1: dependencies: mime-db: 1.54.0 @@ -18065,6 +18241,10 @@ snapshots: pathval@2.0.0: {} + pause-stream@0.0.11: + dependencies: + through: 2.3.8 + pend@1.2.0: {} picocolors@1.0.1: {} @@ -18250,6 +18430,10 @@ snapshots: proxy-from-env@1.1.0: {} + ps-tree@1.2.0: + dependencies: + event-stream: 3.3.4 + pseudomap@1.0.2: {} psl@1.15.0: @@ -18910,6 +19094,10 @@ snapshots: dependencies: tslib: 2.8.1 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + sade@1.8.1: dependencies: mri: 1.2.0 @@ -19261,12 +19449,29 @@ snapshots: dependencies: readable-stream: 3.6.2 + split@0.3.3: + dependencies: + through: 2.3.8 + sprintf-js@1.0.3: {} sprintf-js@1.1.3: {} stackback@0.0.2: {} + start-server-and-test@2.0.12: + dependencies: + arg: 5.0.2 + bluebird: 3.7.2 + check-more-types: 2.24.0 + debug: 4.4.1 + execa: 5.1.1 + lazy-ass: 1.6.0 + ps-tree: 1.2.0 + wait-on: 8.0.3(debug@4.4.1) + transitivePeerDependencies: + - supports-color + statuses@2.0.1: {} std-env@3.8.1: {} @@ -19275,6 +19480,10 @@ snapshots: dependencies: bl: 5.1.0 + stream-combiner@0.0.4: + dependencies: + duplexer: 0.1.2 + streamsearch@1.1.0: {} streamx@2.22.0: @@ -19508,12 +19717,8 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@4.0.2: {} - tailwindcss@4.1.11: {} - tailwindcss@4.1.8: {} - tapable@2.2.1: {} tar-fs@2.1.2: @@ -20220,13 +20425,15 @@ snapshots: - supports-color - terser - wait-port@1.1.0: + wait-on@8.0.3(debug@4.4.1): dependencies: - chalk: 4.1.2 - commander: 9.5.0 - debug: 4.4.0 + axios: 1.11.0(debug@4.4.1) + joi: 17.13.3 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.2 transitivePeerDependencies: - - supports-color + - debug wcwidth@1.0.1: dependencies: