From 9faedee7666f9f1aee856ad58428a2e143763193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20D=C3=ADaz?= Date: Tue, 16 Jun 2026 17:45:19 -0500 Subject: [PATCH 01/36] =?UTF-8?q?feat:=20=E2=AC=86=EF=B8=8F=20migrate=20to?= =?UTF-8?q?=20Qwik=20v2=20beta=20(@qwik.dev/core=20/=20@qwik.dev/router)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate the library, website and test workspaces from Qwik 1.x to Qwik 2.0.0-beta.37. - Rename packages: @builder.io/qwik -> @qwik.dev/core, @builder.io/qwik-city -> @qwik.dev/router - API renames: qwikCity() -> qwikRouter(), createQwikCity() -> createQwikRouter(), -> , @qwik-city-plan -> @qwik-router-config - Drop the qwikRouterConfig option from createQwikRouter (resolved internally in v2) - Remove src/routes/service-worker.ts (v2 uses modulepreload; keep to unregister stale SWs) - tsconfig: jsxImportSource @qwik.dev/core + moduleResolution bundler - Bump Vite to ^7.3.5, vite-tsconfig-paths ^6, eslint-plugin-qwik v2 - Fix v2 type strictness: isSignal() arg, timeout type, task cleanup - pnpm-workspace: allow esbuild/sharp build scripts --- package.json | 38 +- pnpm-lock.yaml | 2173 ++++++++++++----- pnpm-workspace.yaml | 3 + src/entry.dev.tsx | 2 +- src/entry.ssr.tsx | 2 +- src/lib/headless/icons.tsx | 2 +- src/lib/headless/state.ts | 2 +- src/lib/headless/toast-wrapper.tsx | 2 +- src/lib/headless/toast.tsx | 13 +- src/lib/headless/types.ts | 2 +- src/lib/styled/index.tsx | 2 +- src/root.tsx | 2 +- test/.vscode/qwik-city.code-snippets | 2 +- test/package.json | 10 +- .../components/router-head/router-head.tsx | 4 +- test/src/entry.dev.tsx | 2 +- test/src/entry.preview.tsx | 7 +- test/src/entry.ssr.tsx | 2 +- test/src/root.tsx | 12 +- test/src/routes/index.tsx | 4 +- test/src/routes/layout.tsx | 6 +- test/src/routes/service-worker.ts | 18 - test/tsconfig.json | 2 +- test/vite.config.ts | 8 +- tsconfig.json | 2 +- vite.config.ts | 2 +- website/adapters/deno/vite.config.ts | 6 +- website/package.json | 10 +- website/src/components/CodeBlock.tsx | 2 +- website/src/components/ExpandModes.tsx | 2 +- website/src/components/Footer.tsx | 2 +- website/src/components/Installation.tsx | 2 +- website/src/components/Other.tsx | 2 +- website/src/components/Position.tsx | 2 +- website/src/components/Types.tsx | 2 +- website/src/components/Usage.tsx | 2 +- .../components/router-head/router-head.tsx | 4 +- website/src/entry.deno.ts | 8 +- website/src/entry.dev.tsx | 2 +- website/src/entry.preview.tsx | 7 +- website/src/entry.ssr.tsx | 2 +- website/src/root.tsx | 12 +- website/src/routes/index.tsx | 2 +- website/src/routes/layout.tsx | 6 +- website/src/routes/service-worker.ts | 18 - website/tsconfig.json | 2 +- website/vite.config.ts | 6 +- 47 files changed, 1690 insertions(+), 735 deletions(-) delete mode 100644 test/src/routes/service-worker.ts delete mode 100644 website/src/routes/service-worker.ts diff --git a/package.json b/package.json index 2b42208..9a25eda 100644 --- a/package.json +++ b/package.json @@ -33,32 +33,18 @@ ], "exports": { ".": { - "node": { - "import": "./lib/index.qwik.mjs", - "require": "./lib/index.qwik.cjs", - "types": "./lib-types/index.d.ts" - }, - "default": { - "import": "./lib/index.qwik.mjs", - "require": "./lib/index.qwik.cjs", - "types": "./lib-types/index.d.ts" - } + "import": "./lib/index.qwik.mjs", + "require": "./lib/index.qwik.cjs", + "types": "./lib-types/index.d.ts" }, "./headless": { - "node": { - "import": "./lib/headless.qwik.mjs", - "require": "./lib/headless.qwik.cjs", - "types": "./lib-types/headless/toast-wrapper.d.ts" - }, - "default": { - "import": "./lib/headless.qwik.mjs", - "require": "./lib/headless.qwik.cjs", - "types": "./lib-types/headless/toast-wrapper.d.ts" - } + "import": "./lib/headless.qwik.mjs", + "require": "./lib/headless.qwik.cjs", + "types": "./lib-types/headless/toast-wrapper.d.ts" } }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "22.x" }, "private": false, "type": "module", @@ -78,7 +64,7 @@ "qwik": "qwik" }, "devDependencies": { - "@builder.io/qwik": "1.5.3", + "@qwik.dev/core": "2.0.0-beta.37", "@playwright/test": "^1.38.1", "@types/dompurify": "3.0.5", "@types/eslint": "^8.56.10", @@ -87,12 +73,12 @@ "@typescript-eslint/parser": "^7.7.1", "bumpp": "9.4.0", "dompurify": "3.1.2", - "eslint-plugin-qwik": "latest", + "eslint-plugin-qwik": "2.0.0-beta.37", "eslint": "^8.57.0", "prettier": "^3.2.5", "typescript": "5.4.5", "undici": "*", - "vite": "^5.2.10", - "vite-tsconfig-paths": "^4.2.1" + "vite": "^7.3.5", + "vite-tsconfig-paths": "^6.1.1" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30abd11..fd10257 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,12 @@ importers: .: devDependencies: - '@builder.io/qwik': - specifier: 1.5.3 - version: 1.5.3(@types/node@20.12.8)(undici@6.10.2) '@playwright/test': specifier: ^1.38.1 version: 1.43.1 + '@qwik.dev/core': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) '@types/dompurify': specifier: 3.0.5 version: 3.0.5 @@ -39,8 +39,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 eslint-plugin-qwik: - specifier: latest - version: 1.5.3(eslint@8.57.0) + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.5) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -51,20 +51,20 @@ importers: specifier: '*' version: 6.10.2 vite: - specifier: ^5.2.10 - version: 5.2.11(@types/node@20.12.8) + specifier: ^7.3.5 + version: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) vite-tsconfig-paths: - specifier: ^4.2.1 - version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.8)) + specifier: ^6.1.1 + version: 6.1.1(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) test: devDependencies: - '@builder.io/qwik': - specifier: ^1.5.3 - version: 1.5.3(@types/node@20.12.8)(undici@6.10.2) - '@builder.io/qwik-city': - specifier: ^1.5.3 - version: 1.5.3(@types/node@20.12.8)(rollup@4.13.2) + '@qwik.dev/core': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + '@qwik.dev/router': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) '@types/eslint': specifier: ^8.56.10 version: 8.56.10 @@ -81,8 +81,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 eslint-plugin-qwik: - specifier: ^1.5.3 - version: 1.5.3(eslint@8.57.0) + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.5) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -96,20 +96,20 @@ importers: specifier: '*' version: 6.10.2 vite: - specifier: ^5.2.10 - version: 5.2.11(@types/node@20.12.8) + specifier: ^7.3.5 + version: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) vite-tsconfig-paths: - specifier: ^4.2.1 - version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.8)) + specifier: ^6.1.1 + version: 6.1.1(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) website: devDependencies: - '@builder.io/qwik': - specifier: 1.5.1 - version: 1.5.1(@types/node@20.12.2)(undici@6.3.0) - '@builder.io/qwik-city': - specifier: 1.5.1 - version: 1.5.1(@types/node@20.12.2)(rollup@4.13.2) + '@qwik.dev/core': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + '@qwik.dev/router': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) '@types/eslint': specifier: 8.56.1 version: 8.56.1 @@ -132,8 +132,8 @@ importers: specifier: 8.57.0 version: 8.57.0 eslint-plugin-qwik: - specifier: 1.5.1 - version: 1.5.1(eslint@8.57.0) + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.3) postcss: specifier: 8.4.38 version: 8.4.38 @@ -156,11 +156,11 @@ importers: specifier: '*' version: 6.3.0 vite: - specifier: 5.2.7 - version: 5.2.7(@types/node@20.12.2) + specifier: ^7.3.5 + version: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) vite-tsconfig-paths: - specifier: 4.3.2 - version: 4.3.2(typescript@5.4.3)(vite@5.2.7(@types/node@20.12.2)) + specifier: ^6.1.1 + version: 6.1.1(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) packages: @@ -172,166 +172,165 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@builder.io/qwik-city@1.5.1': - resolution: {integrity: sha512-toa2eNgXFSFE+Tv6SYAtYnoubtidYmedy6MnVjxXHKmrMB1sz3e/yO+R6dJLUTHiaJf+D9PI6l4DtF71I+7C/A==} - engines: {node: '>=16.8.0 <18.0.0 || >=18.11'} + '@azure/functions@3.5.1': + resolution: {integrity: sha512-6UltvJiuVpvHSwLcK/Zc6NfUwlkDLOFFx97BHCJzlWNsfiWwzwmTsxJXg4kE/LemKTHxPpfoPE+kOJ8hAdiKFQ==} - '@builder.io/qwik-city@1.5.3': - resolution: {integrity: sha512-FuGG+JhguQRywJlGWTUFOOsnS9/40jReGm4EwWMpogqJdakmg0bwi9KZJgIk4JBLLz016hxX/WmKM/vjLFpiow==} - engines: {node: '>=16.8.0 <18.0.0 || >=18.11'} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@builder.io/qwik@1.5.1': - resolution: {integrity: sha512-xjGVH6xx/ADN+ACSfvoZQWIlN6B4bTcL1gpoijVKyx/Wed7U7QPgVq2VIJ92Vhr6Y+uKiUaoNlsuY5s4PhVQkQ==} - engines: {node: '>=16.8.0 <18.0.0 || >=18.11'} - hasBin: true - peerDependencies: - undici: '*' - - '@builder.io/qwik@1.5.3': - resolution: {integrity: sha512-X42mnWN2gWbTVqcT5X44+twqZyHOnMEL/MbJZGGJ5wmLkhNdDr4afHUKfhTuMVLXtKBinPjzC1pFYOeAhLEn9w==} - engines: {node: '>=16.8.0 <18.0.0 || >=18.11'} - hasBin: true - peerDependencies: - undici: '*' - - '@emnapi/runtime@0.45.0': - resolution: {integrity: sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==} - - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -341,6 +340,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.10.0': resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -360,6 +365,7 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -367,117 +373,158 @@ packages: '@humanwhocodes/object-schema@2.0.2': resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + deprecated: Use @eslint/object-schema instead - '@img/sharp-darwin-arm64@0.33.2': - resolution: {integrity: sha512-itHBs1rPmsmGF9p4qRe++CzCgd+kFYktnsoR1sbIAfsRMrJZau0Tt1AH9KVnufc2/tU02Gf6Ibujx+15qRE03w==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.2': - resolution: {integrity: sha512-/rK/69Rrp9x5kaWBjVN07KixZanRr+W1OiyKdXcbjQD6KbW+obaTeBBtLUAtbBsnlTTmWthw99xqoOS7SsySDg==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.1': - resolution: {integrity: sha512-kQyrSNd6lmBV7O0BUiyu/OEw9yeNGFbQhbxswS1i6rMDwBBSX+e+rPzu3S+MwAiGU3HdLze3PanQ4Xkfemgzcw==} - engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.1': - resolution: {integrity: sha512-eVU/JYLPVjhhrd8Tk6gosl5pVlvsqiFlt50wotCvdkFGf+mDNBJxMh+bvav+Wt3EBnNZWq8Sp2I7XfSjm8siog==} - engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.1': - resolution: {integrity: sha512-bnGG+MJjdX70mAQcSLxgeJco11G+MxTz+ebxlz8Y3dxyeb3Nkl7LgLI0mXupoO+u1wRNx/iRj5yHtzA4sde1yA==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-arm@1.0.1': - resolution: {integrity: sha512-FtdMvR4R99FTsD53IA3LxYGghQ82t3yt0ZQ93WMZ2xV3dqrb0E8zq4VHaTOuLEAuA83oDawHV3fd+BsAPadHIQ==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.0.1': - resolution: {integrity: sha512-3+rzfAR1YpMOeA2zZNp+aYEzGNWK4zF3+sdMxuCS3ey9HhDbJ66w6hDSHDMoap32DueFwhhs3vwooAB2MaK4XQ==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-x64@1.0.1': - resolution: {integrity: sha512-3NR1mxFsaSgMMzz1bAnnKbSAI+lHXVTqAHgc1bgzjHuXjo4hlscpUxc0vFSAPKI3yuzdzcZOkq7nDPrP2F8Jgw==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.0.1': - resolution: {integrity: sha512-5aBRcjHDG/T6jwC3Edl3lP8nl9U2Yo8+oTl5drd1dh9Z1EBfzUKAJFUDTDisDjUwc7N4AjnPGfCA3jl3hY8uDg==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.0.1': - resolution: {integrity: sha512-dcT7inI9DBFK6ovfeWRe3hG30h51cBAP5JXlZfx6pzc/Mnf9HFCQDLtYf4MCBjxaaTfjCCjkBxcy3XzOAo5txw==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] - '@img/sharp-linux-arm64@0.33.2': - resolution: {integrity: sha512-pz0NNo882vVfqJ0yNInuG9YH71smP4gRSdeL09ukC2YLE6ZyZePAlWKEHgAzJGTiOh8Qkaov6mMIMlEhmLdKew==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-linux-arm@0.33.2': - resolution: {integrity: sha512-Fndk/4Zq3vAc4G/qyfXASbS3HBZbKrlnKZLEJzPLrXoJuipFNNwTes71+Ki1hwYW5lch26niRYoZFAtZVf3EGA==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@img/sharp-linux-s390x@0.33.2': - resolution: {integrity: sha512-MBoInDXDppMfhSzbMmOQtGfloVAflS2rP1qPcUIiITMi36Mm5YR7r0ASND99razjQUpHTzjrU1flO76hKvP5RA==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-linux-x64@0.33.2': - resolution: {integrity: sha512-xUT82H5IbXewKkeF5aiooajoO1tQV4PnKfS/OZtb5DDdxS/FCI/uXTVZ35GQ97RZXsycojz/AJ0asoz6p2/H/A==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.33.2': - resolution: {integrity: sha512-F+0z8JCu/UnMzg8IYW1TMeiViIWBVg7IWP6nE0p5S5EPQxlLd76c8jYemG21X99UzFwgkRo5yz2DS+zbrnxZeA==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-linuxmusl-x64@0.33.2': - resolution: {integrity: sha512-+ZLE3SQmSL+Fn1gmSaM8uFusW5Y3J9VOf+wMGNnTtJUMUxFhv+P4UPaYEYT8tqnyYVaOVGgMN/zsOxn9pSsO2A==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] - '@img/sharp-wasm32@0.33.2': - resolution: {integrity: sha512-fLbTaESVKuQcpm8ffgBD7jLb/CQLcATju/jxtTXR1XCLwbOQt+OL5zPHSDMmp2JZIeq82e18yE0Vv7zh6+6BfQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.2': - resolution: {integrity: sha512-okBpql96hIGuZ4lN3+nsAjGeggxKm7hIRu9zyec0lnfB8E7Z6p95BuRZzDDXZOl2e8UmR4RhYt631i7mfmKU8g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.2': - resolution: {integrity: sha512-E4magOks77DK47FwHUIGH0RYWSgRBfGdK56kIHSVeB9uIS4pPFr4N2kIVsXdQQo4LzOsENKV5KAhRlRL7eMAdg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -500,6 +547,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.21': resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} @@ -507,8 +557,16 @@ packages: resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} engines: {node: '>=10'} - '@mdx-js/mdx@3.0.1': - resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@netlify/edge-functions@3.0.8': + resolution: {integrity: sha512-ml1oCDsRTTRmZS2nUj8XRD1b6+foEiZT3lPk7qQ4nv/jnxylHJ20ooPzPDH+cJmGjXFrMeR14/91W1o6D2ftBg==} + engines: {node: '>=18.0.0'} + + '@netlify/types@2.8.0': + resolution: {integrity: sha512-8/g0Pt6y6wXj5Ia5eeYLiXhRfWeqZXGXpGFeCiiQdUOem+FPtXdA4+YdGxqzWc7D0AvptKSO01KGeeVWHSu8Kg==} + engines: {node: ^18.14.0 || >=20} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -529,7 +587,33 @@ packages: '@playwright/test@1.43.1': resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} engines: {node: '>=16'} + deprecated: Please update to the latest version of Playwright to test up-to-date browsers. + hasBin: true + + '@qwik.dev/core@2.0.0-beta.37': + resolution: {integrity: sha512-8BAe/70kjUNmt6CCGGFHuqcmSUb8o9s5R9LhzhW2rcVDMbkVxtKByVGFVPQnTrZFU584UJDVwb8Tdaz6hrtQew==} + engines: {node: ^20.3.0 || >=21.0.0} hasBin: true + peerDependencies: + prettier: '*' + vite: '>=6 <9' + vitest: '>=2 <4' + peerDependenciesMeta: + prettier: + optional: true + vitest: + optional: true + + '@qwik.dev/optimizer@2.1.0-beta.5': + resolution: {integrity: sha512-ygrROBg8/lqyvfig78lAEtxHLmLJLNcncMWLguIK4vmruuYpYXQVMMHklsbcTDj9tEvhL1B/MfclDsiG5E4XOA==} + engines: {node: ^20.3.0 || >=21.0.0} + + '@qwik.dev/router@2.0.0-beta.37': + resolution: {integrity: sha512-YIF4GjdghEaTbL0bTPnhHngAITbDlc7K19R1UbGfGjhKFkA1cLrmZp2xaFPwKUDXUVyu+LTAvBkTx8nLgwIebQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + peerDependencies: + '@qwik.dev/core': ^2.0.0-beta.37 + vite: '>=6 <9' '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} @@ -540,84 +624,143 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.13.2': - resolution: {integrity: sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==} + '@rollup/rollup-android-arm-eabi@4.62.0': + resolution: {integrity: sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.13.2': - resolution: {integrity: sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==} + '@rollup/rollup-android-arm64@4.62.0': + resolution: {integrity: sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.13.2': - resolution: {integrity: sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==} + '@rollup/rollup-darwin-arm64@4.62.0': + resolution: {integrity: sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.13.2': - resolution: {integrity: sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==} + '@rollup/rollup-darwin-x64@4.62.0': + resolution: {integrity: sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.13.2': - resolution: {integrity: sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==} + '@rollup/rollup-freebsd-arm64@4.62.0': + resolution: {integrity: sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.62.0': + resolution: {integrity: sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.62.0': + resolution: {integrity: sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.62.0': + resolution: {integrity: sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==} cpu: [arm] os: [linux] + libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.13.2': - resolution: {integrity: sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==} + '@rollup/rollup-linux-arm64-gnu@4.62.0': + resolution: {integrity: sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==} cpu: [arm64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.13.2': - resolution: {integrity: sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==} + '@rollup/rollup-linux-arm64-musl@4.62.0': + resolution: {integrity: sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==} cpu: [arm64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-powerpc64le-gnu@4.13.2': - resolution: {integrity: sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==} - cpu: [ppc64le] + '@rollup/rollup-linux-loong64-gnu@4.62.0': + resolution: {integrity: sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.62.0': + resolution: {integrity: sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.62.0': + resolution: {integrity: sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.62.0': + resolution: {integrity: sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.62.0': + resolution: {integrity: sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==} + cpu: [riscv64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.13.2': - resolution: {integrity: sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==} + '@rollup/rollup-linux-riscv64-musl@4.62.0': + resolution: {integrity: sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==} cpu: [riscv64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.13.2': - resolution: {integrity: sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==} + '@rollup/rollup-linux-s390x-gnu@4.62.0': + resolution: {integrity: sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==} cpu: [s390x] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.13.2': - resolution: {integrity: sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==} + '@rollup/rollup-linux-x64-gnu@4.62.0': + resolution: {integrity: sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==} cpu: [x64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.13.2': - resolution: {integrity: sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==} + '@rollup/rollup-linux-x64-musl@4.62.0': + resolution: {integrity: sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==} cpu: [x64] os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.62.0': + resolution: {integrity: sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==} + cpu: [x64] + os: [openbsd] - '@rollup/rollup-win32-arm64-msvc@4.13.2': - resolution: {integrity: sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==} + '@rollup/rollup-openharmony-arm64@4.62.0': + resolution: {integrity: sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.62.0': + resolution: {integrity: sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.13.2': - resolution: {integrity: sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==} + '@rollup/rollup-win32-ia32-msvc@4.62.0': + resolution: {integrity: sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.13.2': - resolution: {integrity: sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==} + '@rollup/rollup-win32-x64-gnu@4.62.0': + resolution: {integrity: sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==} cpu: [x64] os: [win32] - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} + '@rollup/rollup-win32-x64-msvc@4.62.0': + resolution: {integrity: sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==} + cpu: [x64] + os: [win32] '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -640,6 +783,12 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -649,9 +798,6 @@ packages: '@types/mdast@4.0.3': resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} - '@types/mdx@2.0.12': - resolution: {integrity: sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==} - '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -664,6 +810,9 @@ packages: '@types/node@20.12.8': resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + '@types/semver@7.5.6': resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} @@ -721,6 +870,12 @@ packages: typescript: optional: true + '@typescript-eslint/project-service@8.61.1': + resolution: {integrity: sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@7.5.0': resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -729,6 +884,16 @@ packages: resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.61.1': + resolution: {integrity: sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.61.1': + resolution: {integrity: sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@7.5.0': resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -757,6 +922,10 @@ packages: resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.61.1': + resolution: {integrity: sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@7.5.0': resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -775,6 +944,12 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.61.1': + resolution: {integrity: sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@7.5.0': resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -787,6 +962,13 @@ packages: peerDependencies: eslint: ^8.56.0 + '@typescript-eslint/utils@8.61.1': + resolution: {integrity: sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@7.5.0': resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -795,8 +977,13 @@ packages: resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.61.1': + resolution: {integrity: sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -880,6 +1067,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -893,6 +1084,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -971,13 +1166,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1030,8 +1218,8 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -1042,6 +1230,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -1066,8 +1263,8 @@ packages: destr@2.0.2: resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} - detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} devlop@1.1.0: @@ -1138,9 +1335,15 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} hasBin: true escalade@3.1.2: @@ -1151,17 +1354,15 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-plugin-qwik@1.5.1: - resolution: {integrity: sha512-FC6rDPdf9nExjCHzFl1YMir23xeibxoooc7KuF3KCaY0A79e/+dWaFn5smQK0dMncIAJPL6No4oKkiMlfjytGQ==} - engines: {node: '>=16.8.0 <18.0.0 || >=18.11'} - peerDependencies: - eslint: ^8.57.0 + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} - eslint-plugin-qwik@1.5.3: - resolution: {integrity: sha512-NRpTZiXPVvpHn04tTR1j6REKz+/W5ytsBwsUJ0K8JxQAn6Yh3goclfV5c1fSMvHENCunXFkn+MpsIFHOn9PO7g==} - engines: {node: '>=16.8.0 <18.0.0 || >=18.11'} + eslint-plugin-qwik@2.0.0-beta.37: + resolution: {integrity: sha512-rDqlR0oWuie4D7iDEYOszv4+n4hs6cH8ASImV8CwtfBc1oI2Kbj2d46eGjcicZWiZicMCItEbsvB7j4vvqtazQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} peerDependencies: - eslint: ^8.57.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} @@ -1171,9 +1372,14 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: @@ -1201,9 +1407,15 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} @@ -1240,6 +1452,18 @@ packages: fastq@1.16.0: resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1270,6 +1494,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} @@ -1315,6 +1543,9 @@ packages: resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} hasBin: true + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1326,10 +1557,12 @@ packages: glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -1378,19 +1611,41 @@ packages: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} + hast-util-heading-rank@2.1.1: + resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + hast-util-to-string@2.0.0: + resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} + hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -1399,9 +1654,9 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - imagetools-core@6.0.4: - resolution: {integrity: sha512-N1qs5qn7u9nR3kboISkYuvJm8MohiphCfBa+wx1UOropVaFis9/mh6wuDPLHJNhl6/64C7q2Pch5NASVKAaSrg==} - engines: {node: '>=12.0.0'} + imagetools-core@9.1.0: + resolution: {integrity: sha512-xQjs+2vrxLnAjCq+omuNkd5UQTld9/bP8+YT0LyYTlKfuSQtgUBvqhUwGugzSAh6sCdN+LnROMuLswn5hZ9Fhg==} + engines: {node: '>=20.0.0'} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -1413,6 +1668,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -1436,9 +1692,6 @@ packages: is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -1499,9 +1752,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -1569,6 +1819,13 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1591,6 +1848,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -1602,13 +1862,48 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + marked@12.0.2: + resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + engines: {node: '>= 18'} + hasBin: true + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + mdast-util-from-markdown@2.0.0: resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + mdast-util-mdx-expression@2.0.0: resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} @@ -1649,6 +1944,30 @@ packages: micromark-core-commonmark@2.0.0: resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-mdx-expression@3.0.0: resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} @@ -1738,6 +2057,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1772,9 +2095,17 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1894,16 +2225,20 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -1966,6 +2301,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2051,10 +2390,39 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + refractor@4.9.0: + resolution: {integrity: sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==} + regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} + rehype-autolink-headings@7.1.0: + resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + remark-mdx@3.0.1: resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} @@ -2064,6 +2432,9 @@ packages: remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2078,10 +2449,11 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.13.2: - resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} + rollup@4.62.0: + resolution: {integrity: sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2096,6 +2468,13 @@ packages: resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -2106,6 +2485,14 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} @@ -2114,9 +2501,9 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} - sharp@0.33.2: - resolution: {integrity: sha512-WlYOPyyPDiiM07j/UO+E720ju6gtNtHjEGg5vovUk1Lgxyjm2LFO+37Nt/UI3MMh2l6hxTWQWi7qk3cXJTutcQ==} - engines: {libvips: '>=8.15.1', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -2126,6 +2513,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.4: + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} + engines: {node: '>= 0.4'} + side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -2133,9 +2524,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -2147,10 +2535,18 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -2214,8 +2610,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svgo@3.2.0: - resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} + svgo@3.3.3: + resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} engines: {node: '>=14.0.0'} hasBin: true @@ -2227,6 +2623,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -2238,6 +2635,10 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2263,12 +2664,19 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} tsconfck@3.0.3: resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==} engines: {node: ^18 || >=20} + deprecated: unmaintained hasBin: true peerDependencies: typescript: ^5.0.0 @@ -2336,6 +2744,9 @@ packages: unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -2369,78 +2780,77 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + + valibot@1.4.1: + resolution: {integrity: sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vite-imagetools@6.2.9: - resolution: {integrity: sha512-C4ZYhgj2vAj43/TpZ06XlDNP0p/7LIeYbgUYr+xG44nM++4HGX6YZBKAYpiBNgiCFUTJ6eXkRppWBrfPMevgmg==} - engines: {node: '>=12.0.0'} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-imagetools@10.0.0: + resolution: {integrity: sha512-+83L32YPU/2BOHWhudO2+9T5HBvb3+0qHoUNN7fb0+XcAoXilx7aE25cDPWU5kBi5Yc750zYCvHxgfyR+tAuMA==} + engines: {node: '>=22.0.0'} + peerDependencies: + vite: '>=7.0.0' - vite-tsconfig-paths@4.3.2: - resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} + vite-tsconfig-paths@6.1.1: + resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} peerDependencies: vite: '*' - peerDependenciesMeta: - vite: - optional: true - vite@5.2.11: - resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.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 - - vite@5.2.7: - resolution: {integrity: sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: + tsx: optional: true - terser: + yaml: optional: true which-boxed-primitive@1.0.2: @@ -2473,12 +2883,17 @@ packages: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -2489,150 +2904,93 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@builder.io/qwik-city@1.5.1(@types/node@20.12.2)(rollup@4.13.2)': + '@azure/functions@3.5.1': dependencies: - '@mdx-js/mdx': 3.0.1 - '@types/mdx': 2.0.12 - source-map: 0.7.4 - svgo: 3.2.0 - undici: 6.10.2 - vfile: 6.0.1 - vite: 5.2.11(@types/node@20.12.2) - vite-imagetools: 6.2.9(rollup@4.13.2) - zod: 3.22.4 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - rollup - - sass - - stylus - - sugarss - - supports-color - - terser + iconv-lite: 0.6.3 + long: 4.0.0 + uuid: 8.3.2 - '@builder.io/qwik-city@1.5.3(@types/node@20.12.8)(rollup@4.13.2)': + '@emnapi/runtime@1.11.1': dependencies: - '@mdx-js/mdx': 3.0.1 - '@types/mdx': 2.0.13 - source-map: 0.7.4 - svgo: 3.2.0 - undici: 6.10.2 - vfile: 6.0.1 - vite: 5.2.11(@types/node@20.12.8) - vite-imagetools: 6.2.9(rollup@4.13.2) - zod: 3.22.4 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - rollup - - sass - - stylus - - sugarss - - supports-color - - terser + tslib: 2.6.2 + optional: true - '@builder.io/qwik@1.5.1(@types/node@20.12.2)(undici@6.3.0)': - dependencies: - csstype: 3.1.3 - undici: 6.3.0 - vite: 5.2.11(@types/node@20.12.2) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - terser - - '@builder.io/qwik@1.5.3(@types/node@20.12.8)(undici@6.10.2)': - dependencies: - csstype: 3.1.3 - undici: 6.10.2 - vite: 5.2.11(@types/node@20.12.8) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - terser + '@esbuild/aix-ppc64@0.27.7': + optional: true - '@emnapi/runtime@0.45.0': - dependencies: - tslib: 2.6.2 + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': optional: true - '@esbuild/aix-ppc64@0.20.2': + '@esbuild/android-x64@0.27.7': optional: true - '@esbuild/android-arm64@0.20.2': + '@esbuild/darwin-arm64@0.27.7': optional: true - '@esbuild/android-arm@0.20.2': + '@esbuild/darwin-x64@0.27.7': optional: true - '@esbuild/android-x64@0.20.2': + '@esbuild/freebsd-arm64@0.27.7': optional: true - '@esbuild/darwin-arm64@0.20.2': + '@esbuild/freebsd-x64@0.27.7': optional: true - '@esbuild/darwin-x64@0.20.2': + '@esbuild/linux-arm64@0.27.7': optional: true - '@esbuild/freebsd-arm64@0.20.2': + '@esbuild/linux-arm@0.27.7': optional: true - '@esbuild/freebsd-x64@0.20.2': + '@esbuild/linux-ia32@0.27.7': optional: true - '@esbuild/linux-arm64@0.20.2': + '@esbuild/linux-loong64@0.27.7': optional: true - '@esbuild/linux-arm@0.20.2': + '@esbuild/linux-mips64el@0.27.7': optional: true - '@esbuild/linux-ia32@0.20.2': + '@esbuild/linux-ppc64@0.27.7': optional: true - '@esbuild/linux-loong64@0.20.2': + '@esbuild/linux-riscv64@0.27.7': optional: true - '@esbuild/linux-mips64el@0.20.2': + '@esbuild/linux-s390x@0.27.7': optional: true - '@esbuild/linux-ppc64@0.20.2': + '@esbuild/linux-x64@0.27.7': optional: true - '@esbuild/linux-riscv64@0.20.2': + '@esbuild/netbsd-arm64@0.27.7': optional: true - '@esbuild/linux-s390x@0.20.2': + '@esbuild/netbsd-x64@0.27.7': optional: true - '@esbuild/linux-x64@0.20.2': + '@esbuild/openbsd-arm64@0.27.7': optional: true - '@esbuild/netbsd-x64@0.20.2': + '@esbuild/openbsd-x64@0.27.7': optional: true - '@esbuild/openbsd-x64@0.20.2': + '@esbuild/openharmony-arm64@0.27.7': optional: true - '@esbuild/sunos-x64@0.20.2': + '@esbuild/sunos-x64@0.27.7': optional: true - '@esbuild/win32-arm64@0.20.2': + '@esbuild/win32-arm64@0.27.7': optional: true - '@esbuild/win32-ia32@0.20.2': + '@esbuild/win32-ia32@0.27.7': optional: true - '@esbuild/win32-x64@0.20.2': + '@esbuild/win32-x64@0.27.7': optional: true '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': @@ -2640,6 +2998,11 @@ snapshots: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.10.0': {} '@eslint/eslintrc@2.1.4': @@ -2672,79 +3035,100 @@ snapshots: '@humanwhocodes/object-schema@2.0.2': {} - '@img/sharp-darwin-arm64@0.33.2': + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.1 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.33.2': + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.1 + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-arm64@1.0.1': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.0.1': + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.0.1': + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.0.1': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.0.1': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.1': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.1': + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.1': + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-arm64@0.33.2': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.1 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.33.2': + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.1 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.33.2': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.1 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linux-x64@0.33.2': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.1 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.2': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.1 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.2': + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.1 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - '@img/sharp-wasm32@0.33.2': + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 0.45.0 + '@emnapi/runtime': 1.11.1 optional: true - '@img/sharp-win32-ia32@0.33.2': + '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-x64@0.33.2': + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': optional: true '@isaacs/cliui@8.0.2': @@ -2768,6 +3152,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.21': dependencies: '@jridgewell/resolve-uri': 3.1.1 @@ -2780,22 +3166,24 @@ snapshots: string-argv: 0.3.2 type-detect: 4.0.8 - '@mdx-js/mdx@3.0.1': + '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.5 '@types/estree-jsx': 1.0.3 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 + acorn: 8.11.3 collapse-white-space: 2.1.0 devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 + estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 hast-util-to-jsx-runtime: 2.3.0 markdown-extensions: 2.0.0 - periscopic: 3.1.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.11.3) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 remark-mdx: 3.0.1 remark-parse: 11.0.0 remark-rehype: 11.1.0 @@ -2808,6 +3196,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@netlify/edge-functions@3.0.8': + dependencies: + '@netlify/types': 2.8.0 + + '@netlify/types@2.8.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2827,60 +3221,180 @@ snapshots: dependencies: playwright: 1.43.1 - '@rollup/pluginutils@5.1.0(rollup@4.13.2)': + '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0))': + dependencies: + '@qwik.dev/optimizer': 2.1.0-beta.5 + csstype: 3.2.3 + launch-editor: 2.14.1 + magic-string: 0.30.21 + rollup: 4.62.0 + vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + optionalDependencies: + prettier: 3.2.5 + + '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0))': + dependencies: + '@qwik.dev/optimizer': 2.1.0-beta.5 + csstype: 3.2.3 + launch-editor: 2.14.1 + magic-string: 0.30.21 + rollup: 4.62.0 + vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + optionalDependencies: + prettier: 3.2.5 + + '@qwik.dev/optimizer@2.1.0-beta.5': {} + + '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0))': + dependencies: + '@azure/functions': 3.5.1 + '@mdx-js/mdx': 3.1.1 + '@netlify/edge-functions': 3.0.8 + '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + '@types/mdx': 2.0.13 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-heading-rank: 2.1.1 + hast-util-to-string: 2.0.0 + kleur: 4.1.5 + marked: 12.0.2 + mdast-util-mdx: 3.0.0 + refractor: 4.9.0 + rehype-autolink-headings: 7.1.0 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + set-cookie-parser: 2.7.2 + source-map: 0.7.6 + svgo: 3.3.3 + unified: 11.0.5 + unist-util-visit: 5.0.0 + valibot: 1.4.1(typescript@5.4.3) + vfile: 6.0.3 + vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + vite-imagetools: 10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + yaml: 2.9.0 + zod: 3.25.76 + transitivePeerDependencies: + - rollup + - supports-color + - typescript + + '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0))': + dependencies: + '@azure/functions': 3.5.1 + '@mdx-js/mdx': 3.1.1 + '@netlify/edge-functions': 3.0.8 + '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + '@types/mdx': 2.0.13 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-heading-rank: 2.1.1 + hast-util-to-string: 2.0.0 + kleur: 4.1.5 + marked: 12.0.2 + mdast-util-mdx: 3.0.0 + refractor: 4.9.0 + rehype-autolink-headings: 7.1.0 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + set-cookie-parser: 2.7.2 + source-map: 0.7.6 + svgo: 3.3.3 + unified: 11.0.5 + unist-util-visit: 5.0.0 + valibot: 1.4.1(typescript@5.4.5) + vfile: 6.0.3 + vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + vite-imagetools: 10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + yaml: 2.9.0 + zod: 3.25.76 + transitivePeerDependencies: + - rollup + - supports-color + - typescript + + '@rollup/pluginutils@5.1.0(rollup@4.62.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.13.2 + rollup: 4.62.0 + + '@rollup/rollup-android-arm-eabi@4.62.0': + optional: true + + '@rollup/rollup-android-arm64@4.62.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.62.0': + optional: true + + '@rollup/rollup-darwin-x64@4.62.0': + optional: true - '@rollup/rollup-android-arm-eabi@4.13.2': + '@rollup/rollup-freebsd-arm64@4.62.0': optional: true - '@rollup/rollup-android-arm64@4.13.2': + '@rollup/rollup-freebsd-x64@4.62.0': optional: true - '@rollup/rollup-darwin-arm64@4.13.2': + '@rollup/rollup-linux-arm-gnueabihf@4.62.0': optional: true - '@rollup/rollup-darwin-x64@4.13.2': + '@rollup/rollup-linux-arm-musleabihf@4.62.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.13.2': + '@rollup/rollup-linux-arm64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.13.2': + '@rollup/rollup-linux-arm64-musl@4.62.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.13.2': + '@rollup/rollup-linux-loong64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.13.2': + '@rollup/rollup-linux-loong64-musl@4.62.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.13.2': + '@rollup/rollup-linux-ppc64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.13.2': + '@rollup/rollup-linux-ppc64-musl@4.62.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.13.2': + '@rollup/rollup-linux-riscv64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-x64-musl@4.13.2': + '@rollup/rollup-linux-riscv64-musl@4.62.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.13.2': + '@rollup/rollup-linux-s390x-gnu@4.62.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.13.2': + '@rollup/rollup-linux-x64-gnu@4.62.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.13.2': + '@rollup/rollup-linux-x64-musl@4.62.0': optional: true - '@trysound/sax@0.2.0': {} + '@rollup/rollup-openbsd-x64@4.62.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.62.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.62.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.62.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.62.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.62.0': + optional: true '@types/acorn@4.0.6': dependencies: @@ -2910,6 +3424,12 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.9': {} + + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.10 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.2 @@ -2920,8 +3440,6 @@ snapshots: dependencies: '@types/unist': 3.0.2 - '@types/mdx@2.0.12': {} - '@types/mdx@2.0.13': {} '@types/ms@0.7.34': {} @@ -2934,6 +3452,8 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/prismjs@1.26.6': {} + '@types/semver@7.5.6': {} '@types/semver@7.5.8': {} @@ -3010,6 +3530,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.61.1(typescript@5.4.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.3) + '@typescript-eslint/types': 8.61.1 + debug: 4.4.3 + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.61.1(typescript@5.4.5)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.5) + '@typescript-eslint/types': 8.61.1 + debug: 4.4.3 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@7.5.0': dependencies: '@typescript-eslint/types': 7.5.0 @@ -3020,6 +3558,19 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/visitor-keys': 7.8.0 + '@typescript-eslint/scope-manager@8.61.1': + dependencies: + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/visitor-keys': 8.61.1 + + '@typescript-eslint/tsconfig-utils@8.61.1(typescript@5.4.3)': + dependencies: + typescript: 5.4.3 + + '@typescript-eslint/tsconfig-utils@8.61.1(typescript@5.4.5)': + dependencies: + typescript: 5.4.5 + '@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.3)': dependencies: '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3) @@ -3048,6 +3599,8 @@ snapshots: '@typescript-eslint/types@7.8.0': {} + '@typescript-eslint/types@8.61.1': {} + '@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.3)': dependencies: '@typescript-eslint/types': 7.5.0 @@ -3078,6 +3631,36 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.61.1(typescript@5.4.3)': + dependencies: + '@typescript-eslint/project-service': 8.61.1(typescript@5.4.3) + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.3) + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/visitor-keys': 8.61.1 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.4 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.4.3) + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.61.1(typescript@5.4.5)': + dependencies: + '@typescript-eslint/project-service': 8.61.1(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.5) + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/visitor-keys': 8.61.1 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.4 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) @@ -3106,6 +3689,28 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.61.1(eslint@8.57.0)(typescript@5.4.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.0) + '@typescript-eslint/scope-manager': 8.61.1 + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/typescript-estree': 8.61.1(typescript@5.4.3) + eslint: 8.57.0 + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.61.1(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.0) + '@typescript-eslint/scope-manager': 8.61.1 + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/typescript-estree': 8.61.1(typescript@5.4.5) + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@7.5.0': dependencies: '@typescript-eslint/types': 7.5.0 @@ -3116,6 +3721,11 @@ snapshots: '@typescript-eslint/types': 7.8.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.61.1': + dependencies: + '@typescript-eslint/types': 8.61.1 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.2.0': {} acorn-jsx@5.3.2(acorn@8.11.3): @@ -3202,6 +3812,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + binary-extensions@2.2.0: {} boolbase@1.0.0: {} @@ -3215,6 +3827,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + braces@3.0.2: dependencies: fill-range: 7.0.1 @@ -3309,16 +3925,6 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - comma-separated-tokens@2.0.3: {} commander@4.1.1: {} @@ -3367,12 +3973,16 @@ snapshots: dependencies: css-tree: 2.2.1 - csstype@3.1.3: {} + csstype@3.2.3: {} debug@4.3.4: dependencies: ms: 2.1.2 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -3397,7 +4007,7 @@ snapshots: destr@2.0.2: {} - detect-libc@2.0.2: {} + detect-libc@2.1.2: {} devlop@1.1.0: dependencies: @@ -3505,45 +4115,72 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - esbuild@0.20.2: + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.3 + acorn: 8.11.3 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.2 + + esbuild@0.27.7: optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 escalade@3.1.2: {} escape-string-regexp@4.0.0: {} - eslint-plugin-qwik@1.5.1(eslint@8.57.0): + escape-string-regexp@5.0.0: {} + + eslint-plugin-qwik@2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.3): dependencies: + '@typescript-eslint/utils': 8.61.1(eslint@8.57.0)(typescript@5.4.3) eslint: 8.57.0 jsx-ast-utils: 3.3.5 + transitivePeerDependencies: + - supports-color + - typescript - eslint-plugin-qwik@1.5.3(eslint@8.57.0): + eslint-plugin-qwik@2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.5): dependencies: + '@typescript-eslint/utils': 8.61.1(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 jsx-ast-utils: 3.3.5 + transitivePeerDependencies: + - supports-color + - typescript eslint-scope@7.2.2: dependencies: @@ -3552,6 +4189,8 @@ snapshots: eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@5.0.1: {} + eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) @@ -3624,12 +4263,21 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + estree-util-to-js@2.0.0: dependencies: '@types/estree-jsx': 1.0.3 astring: 1.8.6 source-map: 0.7.4 + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.5 + estree-util-visit@2.0.0: dependencies: '@types/estree-jsx': 1.0.3 @@ -3675,6 +4323,14 @@ snapshots: dependencies: reusify: 1.0.4 + fault@2.0.1: + dependencies: + format: 0.2.2 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -3707,6 +4363,8 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 + format@0.2.2: {} + fraction.js@4.3.7: {} fs-minipass@2.1.0: @@ -3757,6 +4415,8 @@ snapshots: pathe: 1.1.2 tar: 6.2.0 + github-slugger@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -3827,6 +4487,22 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-heading-rank@2.1.1: + dependencies: + '@types/hast': 2.3.10 + + hast-util-heading-rank@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-to-estree@3.1.0: dependencies: '@types/estree': 1.0.5 @@ -3868,19 +4544,33 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-string@2.0.0: + dependencies: + '@types/hast': 2.3.10 + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.4.0 + space-separated-tokens: 2.0.2 + human-signals@5.0.0: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.0: {} ignore@5.3.1: {} - imagetools-core@6.0.4: - dependencies: - sharp: 0.33.2 + imagetools-core@9.1.0: {} import-fresh@3.3.0: dependencies: @@ -3919,8 +4609,6 @@ snapshots: get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - is-arrayish@0.3.2: {} - is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 @@ -3968,10 +4656,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - is-regex@1.1.4: dependencies: call-bind: 1.0.5 @@ -4036,6 +4720,13 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + + launch-editor@2.14.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.4 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -4053,6 +4744,8 @@ snapshots: lodash.merge@4.6.2: {} + long@4.0.0: {} + longest-streak@3.1.0: {} lru-cache@10.1.0: {} @@ -4061,8 +4754,23 @@ snapshots: dependencies: yallist: 4.0.0 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + markdown-extensions@2.0.0: {} + markdown-table@3.0.4: {} + + marked@12.0.2: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.3 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + mdast-util-from-markdown@2.0.0: dependencies: '@types/mdast': 4.0.3 @@ -4080,6 +4788,74 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.0 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-expression@2.0.0: dependencies: '@types/estree-jsx': 1.0.3 @@ -4189,6 +4965,71 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.0 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + micromark-extension-mdx-expression@3.0.0: dependencies: '@types/estree': 1.0.5 @@ -4383,6 +5224,10 @@ snapshots: mimic-fn@4.0.0: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4417,12 +5262,16 @@ snapshots: ms@2.1.2: {} + ms@2.1.3: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.12: {} + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -4534,16 +5383,14 @@ snapshots: perfect-debounce@1.0.0: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@1.0.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.4: {} + pify@2.3.0: {} pirates@4.0.6: {} @@ -4599,6 +5446,12 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier-plugin-tailwindcss@0.5.13(prettier@3.2.5): @@ -4632,12 +5485,85 @@ snapshots: dependencies: picomatch: 2.3.1 + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.5 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.1 + + recma-jsx@1.0.1(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.4 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.5 + esast-util-from-js: 2.0.1 + unified: 11.0.4 + vfile: 6.0.1 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.5 + estree-util-to-js: 2.0.0 + unified: 11.0.4 + vfile: 6.0.1 + + refractor@4.9.0: + dependencies: + '@types/hast': 2.3.10 + '@types/prismjs': 1.26.6 + hastscript: 7.2.0 + parse-entities: 4.0.1 + regexp.prototype.flags@1.5.1: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 + rehype-autolink-headings@7.1.0: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.2.0 + hast-util-heading-rank: 3.0.0 + hast-util-is-element: 3.0.0 + unified: 11.0.4 + unist-util-visit: 5.0.0 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.5 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.0 + transitivePeerDependencies: + - supports-color + + remark-frontmatter@5.0.0: + dependencies: + '@types/mdast': 4.0.3 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.3 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + remark-mdx@3.0.1: dependencies: mdast-util-mdx: 3.0.0 @@ -4662,6 +5588,12 @@ snapshots: unified: 11.0.4 vfile: 6.0.1 + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.3 + mdast-util-to-markdown: 2.1.0 + unified: 11.0.4 + resolve-from@4.0.0: {} resolve@1.22.8: @@ -4676,25 +5608,35 @@ snapshots: dependencies: glob: 7.2.3 - rollup@4.13.2: + rollup@4.62.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.2 - '@rollup/rollup-android-arm64': 4.13.2 - '@rollup/rollup-darwin-arm64': 4.13.2 - '@rollup/rollup-darwin-x64': 4.13.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.2 - '@rollup/rollup-linux-arm64-gnu': 4.13.2 - '@rollup/rollup-linux-arm64-musl': 4.13.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.13.2 - '@rollup/rollup-linux-riscv64-gnu': 4.13.2 - '@rollup/rollup-linux-s390x-gnu': 4.13.2 - '@rollup/rollup-linux-x64-gnu': 4.13.2 - '@rollup/rollup-linux-x64-musl': 4.13.2 - '@rollup/rollup-win32-arm64-msvc': 4.13.2 - '@rollup/rollup-win32-ia32-msvc': 4.13.2 - '@rollup/rollup-win32-x64-msvc': 4.13.2 + '@rollup/rollup-android-arm-eabi': 4.62.0 + '@rollup/rollup-android-arm64': 4.62.0 + '@rollup/rollup-darwin-arm64': 4.62.0 + '@rollup/rollup-darwin-x64': 4.62.0 + '@rollup/rollup-freebsd-arm64': 4.62.0 + '@rollup/rollup-freebsd-x64': 4.62.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.0 + '@rollup/rollup-linux-arm-musleabihf': 4.62.0 + '@rollup/rollup-linux-arm64-gnu': 4.62.0 + '@rollup/rollup-linux-arm64-musl': 4.62.0 + '@rollup/rollup-linux-loong64-gnu': 4.62.0 + '@rollup/rollup-linux-loong64-musl': 4.62.0 + '@rollup/rollup-linux-ppc64-gnu': 4.62.0 + '@rollup/rollup-linux-ppc64-musl': 4.62.0 + '@rollup/rollup-linux-riscv64-gnu': 4.62.0 + '@rollup/rollup-linux-riscv64-musl': 4.62.0 + '@rollup/rollup-linux-s390x-gnu': 4.62.0 + '@rollup/rollup-linux-x64-gnu': 4.62.0 + '@rollup/rollup-linux-x64-musl': 4.62.0 + '@rollup/rollup-openbsd-x64': 4.62.0 + '@rollup/rollup-openharmony-arm64': 4.62.0 + '@rollup/rollup-win32-arm64-msvc': 4.62.0 + '@rollup/rollup-win32-ia32-msvc': 4.62.0 + '@rollup/rollup-win32-x64-gnu': 4.62.0 + '@rollup/rollup-win32-x64-msvc': 4.62.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4714,6 +5656,10 @@ snapshots: get-intrinsic: 1.2.2 is-regex: 1.1.4 + safer-buffer@2.1.2: {} + + sax@1.6.0: {} + semver@7.5.4: dependencies: lru-cache: 6.0.0 @@ -4722,6 +5668,10 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.8.4: {} + + set-cookie-parser@2.7.2: {} + set-function-length@1.1.1: dependencies: define-data-property: 1.1.1 @@ -4735,31 +5685,36 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - sharp@0.33.2: + sharp@0.34.5: dependencies: - color: 4.2.3 - detect-libc: 2.0.2 - semver: 7.6.0 + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.4 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.2 - '@img/sharp-darwin-x64': 0.33.2 - '@img/sharp-libvips-darwin-arm64': 1.0.1 - '@img/sharp-libvips-darwin-x64': 1.0.1 - '@img/sharp-libvips-linux-arm': 1.0.1 - '@img/sharp-libvips-linux-arm64': 1.0.1 - '@img/sharp-libvips-linux-s390x': 1.0.1 - '@img/sharp-libvips-linux-x64': 1.0.1 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.1 - '@img/sharp-libvips-linuxmusl-x64': 1.0.1 - '@img/sharp-linux-arm': 0.33.2 - '@img/sharp-linux-arm64': 0.33.2 - '@img/sharp-linux-s390x': 0.33.2 - '@img/sharp-linux-x64': 0.33.2 - '@img/sharp-linuxmusl-arm64': 0.33.2 - '@img/sharp-linuxmusl-x64': 0.33.2 - '@img/sharp-wasm32': 0.33.2 - '@img/sharp-win32-ia32': 0.33.2 - '@img/sharp-win32-x64': 0.33.2 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 shebang-command@2.0.0: dependencies: @@ -4767,6 +5722,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.4: {} + side-channel@1.0.4: dependencies: call-bind: 1.0.5 @@ -4775,18 +5732,18 @@ snapshots: signal-exit@4.1.0: {} - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - sisteransi@1.0.5: {} slash@3.0.0: {} source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map@0.7.4: {} + source-map@0.7.6: {} + space-separated-tokens@2.0.2: {} string-argv@0.3.2: {} @@ -4862,15 +5819,15 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svgo@3.2.0: + svgo@3.3.3: dependencies: - '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 5.1.0 css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 picocolors: 1.0.0 + sax: 1.6.0 tailwindcss@3.4.3: dependencies: @@ -4918,6 +5875,11 @@ snapshots: dependencies: any-promise: 1.3.0 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -4936,6 +5898,14 @@ snapshots: dependencies: typescript: 5.4.5 + ts-api-utils@2.5.0(typescript@5.4.3): + dependencies: + typescript: 5.4.3 + + ts-api-utils@2.5.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + ts-interface-checker@0.1.13: {} tsconfck@3.0.3(typescript@5.4.3): @@ -5015,6 +5985,16 @@ snapshots: trough: 2.1.0 vfile: 6.0.1 + unified@11.0.5: + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 6.0.1 + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.2 @@ -5059,6 +6039,16 @@ snapshots: util-deprecate@1.0.2: {} + uuid@8.3.2: {} + + valibot@1.4.1(typescript@5.4.3): + optionalDependencies: + typescript: 5.4.3 + + valibot@1.4.1(typescript@5.4.5): + optionalDependencies: + typescript: 5.4.5 + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 @@ -5070,61 +6060,76 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-imagetools@6.2.9(rollup@4.13.2): + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.2 + vfile-message: 4.0.2 + + vite-imagetools@10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.62.0) + imagetools-core: 9.1.0 + sharp: 0.34.5 + vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + transitivePeerDependencies: + - rollup + + vite-imagetools@10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.13.2) - imagetools-core: 6.0.4 + '@rollup/pluginutils': 5.1.0(rollup@4.62.0) + imagetools-core: 9.1.0 + sharp: 0.34.5 + vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - rollup - vite-tsconfig-paths@4.3.2(typescript@5.4.3)(vite@5.2.7(@types/node@20.12.2)): + vite-tsconfig-paths@6.1.1(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)): dependencies: debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.4.3) - optionalDependencies: - vite: 5.2.7(@types/node@20.12.2) + vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.8)): + vite-tsconfig-paths@6.1.1(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)): dependencies: debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.4.5) - optionalDependencies: - vite: 5.2.11(@types/node@20.12.8) + vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite@5.2.11(@types/node@20.12.2): + vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0): dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.13.2 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.62.0 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 20.12.2 fsevents: 2.3.3 + jiti: 1.21.0 + yaml: 2.9.0 - vite@5.2.11(@types/node@20.12.8): + vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0): dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.13.2 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.62.0 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 20.12.8 fsevents: 2.3.3 - - vite@5.2.7(@types/node@20.12.2): - dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.13.2 - optionalDependencies: - '@types/node': 20.12.2 - fsevents: 2.3.3 + jiti: 1.21.0 + yaml: 2.9.0 which-boxed-primitive@1.0.2: dependencies: @@ -5164,8 +6169,10 @@ snapshots: yaml@2.3.4: {} + yaml@2.9.0: {} + yocto-queue@0.1.0: {} - zod@3.22.4: {} + zod@3.25.76: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f39f71c..6117160 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,6 @@ packages: - "website" - "." - "test" +allowBuilds: + esbuild: true + sharp: true diff --git a/src/entry.dev.tsx b/src/entry.dev.tsx index f421db7..dba2a86 100644 --- a/src/entry.dev.tsx +++ b/src/entry.dev.tsx @@ -9,7 +9,7 @@ * - More code is transferred to the browser than in SSR mode. * - Optimizer/Serialization/Deserialization code is not exercised! */ -import { render, type RenderOptions } from "@builder.io/qwik"; +import { render, type RenderOptions } from "@qwik.dev/core"; import Root from "./root"; export default function (opts: RenderOptions) { diff --git a/src/entry.ssr.tsx b/src/entry.ssr.tsx index 3e6b49f..fb591da 100644 --- a/src/entry.ssr.tsx +++ b/src/entry.ssr.tsx @@ -13,7 +13,7 @@ import { renderToStream, type RenderToStreamOptions, -} from "@builder.io/qwik/server"; +} from "@qwik.dev/core/server"; import { manifest } from "@qwik-client-manifest"; import Root from "./root"; diff --git a/src/lib/headless/icons.tsx b/src/lib/headless/icons.tsx index 09abd4f..f4a07dc 100644 --- a/src/lib/headless/icons.tsx +++ b/src/lib/headless/icons.tsx @@ -1,5 +1,5 @@ "use client"; -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; import type { ToastTypes } from "./types"; export const getAsset = (type: ToastTypes) => { diff --git a/src/lib/headless/state.ts b/src/lib/headless/state.ts index f1ffd4f..d14ee29 100644 --- a/src/lib/headless/state.ts +++ b/src/lib/headless/state.ts @@ -1,4 +1,4 @@ -import { JSXOutput } from "@builder.io/qwik"; +import { JSXOutput } from "@qwik.dev/core"; import type { ExternalToast, ToastT, diff --git a/src/lib/headless/toast-wrapper.tsx b/src/lib/headless/toast-wrapper.tsx index 9da940f..6d2a33a 100644 --- a/src/lib/headless/toast-wrapper.tsx +++ b/src/lib/headless/toast-wrapper.tsx @@ -6,7 +6,7 @@ import { useOnDocument, useSignal, useTask$, -} from "@builder.io/qwik"; +} from "@qwik.dev/core"; import { HeightT, Theme, diff --git a/src/lib/headless/toast.tsx b/src/lib/headless/toast.tsx index b485a2c..701b1db 100644 --- a/src/lib/headless/toast.tsx +++ b/src/lib/headless/toast.tsx @@ -7,7 +7,7 @@ import { isSignal, useOnDocument, useVisibleTask$, -} from "@builder.io/qwik"; +} from "@qwik.dev/core"; import { isAction, ToastClassnames, ToastIcons, ToastProps } from "./types"; import { SWIPE_THRESHOLD, TIME_BEFORE_UNMOUNT, TOAST_LIFETIME } from "./const"; import { getAsset, Loader } from "./icons"; @@ -64,7 +64,7 @@ export const Toast = component$((props) => { const toastClass = toast.class ?? ""; const toastDescriptionClass = toast.descriptionClass ?? ""; const [y, x] = position.split("-"); - const invertChecked = isSignal(ToasterInvert) + const invertChecked = isSignal(ToasterInvert) ? ToasterInvert.value : ToasterInvert; const invert = useComputed$(() => toast.invert ?? invertChecked); @@ -167,7 +167,7 @@ export const Toast = component$((props) => { toast.type === "loading" ) return; - let timeoutId: number; + let timeoutId: ReturnType; // Pause the timer on each hover const pauseTimer = () => { @@ -227,10 +227,9 @@ export const Toast = component$((props) => { ...heights.value, ]; - cleanup( - () => - (heights.value = heights.value.filter((h) => h.toastId !== toast.id)) - ); + cleanup(() => { + heights.value = heights.value.filter((h) => h.toastId !== toast.id); + }); }); useTask$(({ track }) => { track(() => toast.delete); diff --git a/src/lib/headless/types.ts b/src/lib/headless/types.ts index 9e8c6e0..7ab1240 100644 --- a/src/lib/headless/types.ts +++ b/src/lib/headless/types.ts @@ -6,7 +6,7 @@ import { QRL, QRLEventHandlerMulti, Signal, -} from "@builder.io/qwik"; +} from "@qwik.dev/core"; export type ToastTypes = | "normal" diff --git a/src/lib/styled/index.tsx b/src/lib/styled/index.tsx index ee64c21..e45939d 100644 --- a/src/lib/styled/index.tsx +++ b/src/lib/styled/index.tsx @@ -1,4 +1,4 @@ -import { component$, useStyles$ } from "@builder.io/qwik"; +import { component$, useStyles$ } from "@qwik.dev/core"; import { ToasterProps } from "../headless/types"; import styles from "./styles.css?inline"; import { Toaster as RawToaster } from "../headless/toast-wrapper"; diff --git a/src/root.tsx b/src/root.tsx index d91435b..e9110d8 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -1,4 +1,4 @@ -import { $, component$, useSignal } from "@builder.io/qwik"; +import { $, component$, useSignal } from "@qwik.dev/core"; import { Toaster } from "./lib/styled"; import { toast } from "./lib"; diff --git a/test/.vscode/qwik-city.code-snippets b/test/.vscode/qwik-city.code-snippets index 878fcf6..2c1e516 100644 --- a/test/.vscode/qwik-city.code-snippets +++ b/test/.vscode/qwik-city.code-snippets @@ -26,7 +26,7 @@ "prefix": "qpage", "description": "Simple page component", "body": [ - "import { component$ } from '@builder.io/qwik';", + "import { component$ } from '@qwik.dev/core';", "", "export default component$(() => {", " $0", diff --git a/test/package.json b/test/package.json index a66671a..e2f64d4 100644 --- a/test/package.json +++ b/test/package.json @@ -27,19 +27,19 @@ "qwik": "qwik" }, "devDependencies": { - "@builder.io/qwik": "^1.5.3", - "@builder.io/qwik-city": "^1.5.3", + "@qwik.dev/core": "2.0.0-beta.37", + "@qwik.dev/router": "2.0.0-beta.37", "@types/eslint": "^8.56.10", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.7.1", "eslint": "^8.57.0", - "eslint-plugin-qwik": "^1.5.3", + "eslint-plugin-qwik": "2.0.0-beta.37", "prettier": "^3.2.5", "qwik-sonner": "workspace:*", "typescript": "5.4.5", "undici": "*", - "vite": "^5.2.10", - "vite-tsconfig-paths": "^4.2.1" + "vite": "^7.3.5", + "vite-tsconfig-paths": "^6.1.1" } } \ No newline at end of file diff --git a/test/src/components/router-head/router-head.tsx b/test/src/components/router-head/router-head.tsx index 51b6910..6c167ed 100644 --- a/test/src/components/router-head/router-head.tsx +++ b/test/src/components/router-head/router-head.tsx @@ -1,6 +1,6 @@ -import { useDocumentHead, useLocation } from "@builder.io/qwik-city"; +import { useDocumentHead, useLocation } from "@qwik.dev/router"; -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; /** * The RouterHead component is placed inside of the document `` element. diff --git a/test/src/entry.dev.tsx b/test/src/entry.dev.tsx index f421db7..dba2a86 100644 --- a/test/src/entry.dev.tsx +++ b/test/src/entry.dev.tsx @@ -9,7 +9,7 @@ * - More code is transferred to the browser than in SSR mode. * - Optimizer/Serialization/Deserialization code is not exercised! */ -import { render, type RenderOptions } from "@builder.io/qwik"; +import { render, type RenderOptions } from "@qwik.dev/core"; import Root from "./root"; export default function (opts: RenderOptions) { diff --git a/test/src/entry.preview.tsx b/test/src/entry.preview.tsx index 7d353d7..e014339 100644 --- a/test/src/entry.preview.tsx +++ b/test/src/entry.preview.tsx @@ -10,11 +10,10 @@ * - https://vitejs.dev/config/preview-options.html#preview-options * */ -import { createQwikCity } from "@builder.io/qwik-city/middleware/node"; -import qwikCityPlan from "@qwik-city-plan"; +import { createQwikRouter } from "@qwik.dev/router/middleware/node"; import render from "./entry.ssr"; /** - * The default export is the QwikCity adapter used by Vite preview. + * The default export is the Qwik Router adapter used by Vite preview. */ -export default createQwikCity({ render, qwikCityPlan }); +export default createQwikRouter({ render }); diff --git a/test/src/entry.ssr.tsx b/test/src/entry.ssr.tsx index d7a9839..b14cd28 100644 --- a/test/src/entry.ssr.tsx +++ b/test/src/entry.ssr.tsx @@ -13,7 +13,7 @@ import { renderToStream, type RenderToStreamOptions, -} from "@builder.io/qwik/server"; +} from "@qwik.dev/core/server"; import { manifest } from "@qwik-client-manifest"; import Root from "./root"; diff --git a/test/src/root.tsx b/test/src/root.tsx index 6da94ad..56fe4ab 100644 --- a/test/src/root.tsx +++ b/test/src/root.tsx @@ -1,21 +1,21 @@ -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; import { - QwikCityProvider, + QwikRouterProvider, RouterOutlet, ServiceWorkerRegister, -} from "@builder.io/qwik-city"; +} from "@qwik.dev/router"; import { RouterHead } from "./components/router-head/router-head"; export default component$(() => { /** - * The root of a QwikCity site always start with the component, + * The root of a QwikCity site always start with the component, * immediately followed by the document's and . * * Don't remove the `` and `` elements. */ return ( - + @@ -25,6 +25,6 @@ export default component$(() => { - + ); }); diff --git a/test/src/routes/index.tsx b/test/src/routes/index.tsx index ccb7340..4a2faba 100644 --- a/test/src/routes/index.tsx +++ b/test/src/routes/index.tsx @@ -1,5 +1,5 @@ -import { component$, useSignal, $ } from "@builder.io/qwik"; -import { useLocation, type DocumentHead } from "@builder.io/qwik-city"; +import { component$, useSignal, $ } from "@qwik.dev/core"; +import { useLocation, type DocumentHead } from "@qwik.dev/router"; import { toast, Toaster } from "qwik-sonner"; const promise = $( diff --git a/test/src/routes/layout.tsx b/test/src/routes/layout.tsx index 504ae73..da2c27c 100644 --- a/test/src/routes/layout.tsx +++ b/test/src/routes/layout.tsx @@ -1,6 +1,6 @@ -import { component$, Slot } from "@builder.io/qwik"; -import { routeLoader$ } from "@builder.io/qwik-city"; -import type { RequestHandler } from "@builder.io/qwik-city"; +import { component$, Slot } from "@qwik.dev/core"; +import { routeLoader$ } from "@qwik.dev/router"; +import type { RequestHandler } from "@qwik.dev/router"; export const onGet: RequestHandler = async ({ cacheControl }) => { // Control caching for this request for best performance and to reduce hosting costs: diff --git a/test/src/routes/service-worker.ts b/test/src/routes/service-worker.ts deleted file mode 100644 index a10ab36..0000000 --- a/test/src/routes/service-worker.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * WHAT IS THIS FILE? - * - * The service-worker.ts file is used to have state of the art prefetching. - * https://qwik.dev/qwikcity/prefetching/overview/ - * - * Qwik uses a service worker to speed up your site and reduce latency, ie, not used in the traditional way of offline. - * You can also use this file to add more functionality that runs in the service worker. - */ -import { setupServiceWorker } from "@builder.io/qwik-city/service-worker"; - -setupServiceWorker(); - -addEventListener("install", () => self.skipWaiting()); - -addEventListener("activate", () => self.clients.claim()); - -declare const self: ServiceWorkerGlobalScope; diff --git a/test/tsconfig.json b/test/tsconfig.json index fc804e6..af84829 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -5,7 +5,7 @@ "module": "ES2022", "lib": ["es2022", "DOM", "WebWorker", "DOM.Iterable"], "jsx": "react-jsx", - "jsxImportSource": "@builder.io/qwik", + "jsxImportSource": "@qwik.dev/core", "strict": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, diff --git a/test/vite.config.ts b/test/vite.config.ts index 59632d0..a746580 100644 --- a/test/vite.config.ts +++ b/test/vite.config.ts @@ -3,8 +3,8 @@ * When building, the adapter config is used which loads this file and extends it. */ import { defineConfig, type UserConfig } from "vite"; -import { qwikVite } from "@builder.io/qwik/optimizer"; -import { qwikCity } from "@builder.io/qwik-city/vite"; +import { qwikVite } from "@qwik.dev/core/optimizer"; +import { qwikRouter } from "@qwik.dev/router/vite"; import tsconfigPaths from "vite-tsconfig-paths"; import pkg from "./package.json"; @@ -15,11 +15,11 @@ const { dependencies = {}, devDependencies = {} } = pkg as any as { }; /** - * Note that Vite normally starts from `index.html` but the qwikCity plugin makes start at `src/entry.ssr.tsx` instead. + * Note that Vite normally starts from `index.html` but the qwikRouter plugin makes start at `src/entry.ssr.tsx` instead. */ export default defineConfig(({ command, mode }): UserConfig => { return { - plugins: [qwikCity(), qwikVite(), tsconfigPaths()], + plugins: [qwikRouter(), qwikVite(), tsconfigPaths()], // This tells Vite which dependencies to pre-build in dev mode. optimizeDeps: { // Put problematic deps that break bundling here, mostly those with binaries. diff --git a/tsconfig.json b/tsconfig.json index d447c15..236415f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "module": "ESNext", "lib": ["es2020", "DOM"], "jsx": "react-jsx", - "jsxImportSource": "@builder.io/qwik", + "jsxImportSource": "@qwik.dev/core", "strict": true, "declaration": true, "declarationDir": "lib-types", diff --git a/vite.config.ts b/vite.config.ts index 4e28071..9f67014 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from "vite"; import pkg from "./package.json"; -import { qwikVite } from "@builder.io/qwik/optimizer"; +import { qwikVite } from "@qwik.dev/core/optimizer"; import tsconfigPaths from "vite-tsconfig-paths"; const { dependencies = {}, peerDependencies = {} } = pkg as any; diff --git a/website/adapters/deno/vite.config.ts b/website/adapters/deno/vite.config.ts index bc45d6a..8f5e48b 100644 --- a/website/adapters/deno/vite.config.ts +++ b/website/adapters/deno/vite.config.ts @@ -1,5 +1,5 @@ -import { denoServerAdapter } from "@builder.io/qwik-city/adapters/deno-server/vite"; -import { extendConfig } from "@builder.io/qwik-city/vite"; +import { denoServerAdapter } from "@qwik.dev/router/adapters/deno-server/vite"; +import { extendConfig } from "@qwik.dev/router/vite"; import baseConfig from "../../vite.config"; export default extendConfig(baseConfig, () => { @@ -7,7 +7,7 @@ export default extendConfig(baseConfig, () => { build: { ssr: true, rollupOptions: { - input: ["src/entry.deno.ts", "@qwik-city-plan"], + input: ["src/entry.deno.ts", "@qwik-router-config"], }, minify: false, }, diff --git a/website/package.json b/website/package.json index 20c0d42..ae0202b 100644 --- a/website/package.json +++ b/website/package.json @@ -27,8 +27,8 @@ "qwik": "qwik" }, "devDependencies": { - "@builder.io/qwik": "1.5.1", - "@builder.io/qwik-city": "1.5.1", + "@qwik.dev/core": "2.0.0-beta.37", + "@qwik.dev/router": "2.0.0-beta.37", "@types/eslint": "8.56.1", "@types/node": "20.12.2", "@typescript-eslint/eslint-plugin": "7.5.0", @@ -36,7 +36,7 @@ "autoprefixer": "10.4.19", "copy-to-clipboard": "3.3.3", "eslint": "8.57.0", - "eslint-plugin-qwik": "1.5.1", + "eslint-plugin-qwik": "2.0.0-beta.37", "postcss": "8.4.38", "prettier": "3.2.5", "prettier-plugin-tailwindcss": "0.5.13", @@ -44,7 +44,7 @@ "tailwindcss": "3.4.3", "typescript": "5.4.3", "undici": "*", - "vite": "5.2.7", - "vite-tsconfig-paths": "4.3.2" + "vite": "^7.3.5", + "vite-tsconfig-paths": "^6.1.1" } } \ No newline at end of file diff --git a/website/src/components/CodeBlock.tsx b/website/src/components/CodeBlock.tsx index 39ecd5e..1086fef 100644 --- a/website/src/components/CodeBlock.tsx +++ b/website/src/components/CodeBlock.tsx @@ -1,4 +1,4 @@ -import { component$, useSignal } from "@builder.io/qwik"; +import { component$, useSignal } from "@qwik.dev/core"; import styles from "./codeblock.module.css"; import copy from "copy-to-clipboard"; diff --git a/website/src/components/ExpandModes.tsx b/website/src/components/ExpandModes.tsx index 74dcc92..49dec49 100644 --- a/website/src/components/ExpandModes.tsx +++ b/website/src/components/ExpandModes.tsx @@ -1,6 +1,6 @@ import { toast } from "qwik-sonner"; import { CodeBlock } from "./CodeBlock"; -import { type Signal } from "@builder.io/qwik"; +import { type Signal } from "@qwik.dev/core"; export const ExpandModes = ({ expand }: { expand: Signal }) => { return ( diff --git a/website/src/components/Footer.tsx b/website/src/components/Footer.tsx index 6a296d0..7f5bd3a 100644 --- a/website/src/components/Footer.tsx +++ b/website/src/components/Footer.tsx @@ -1,4 +1,4 @@ -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; import styles from "./footer.module.css"; export const Footer = component$(() => { diff --git a/website/src/components/Installation.tsx b/website/src/components/Installation.tsx index a69445a..4dd7c19 100644 --- a/website/src/components/Installation.tsx +++ b/website/src/components/Installation.tsx @@ -1,7 +1,7 @@ import copy from "copy-to-clipboard"; import styles from "./installation.module.css"; -import { component$, useSignal } from "@builder.io/qwik"; +import { component$, useSignal } from "@qwik.dev/core"; export const Installation = component$(() => { const copying = useSignal(0); diff --git a/website/src/components/Other.tsx b/website/src/components/Other.tsx index 4017da3..8a719cd 100644 --- a/website/src/components/Other.tsx +++ b/website/src/components/Other.tsx @@ -7,7 +7,7 @@ import { component$, useComputed$, useSignal, -} from "@builder.io/qwik"; +} from "@qwik.dev/core"; export const Other = component$( ({ diff --git a/website/src/components/Position.tsx b/website/src/components/Position.tsx index 7192cc4..92f2766 100644 --- a/website/src/components/Position.tsx +++ b/website/src/components/Position.tsx @@ -1,6 +1,6 @@ import { toast } from "qwik-sonner"; import { CodeBlock } from "./CodeBlock"; -import { type Signal, component$ } from "@builder.io/qwik"; +import { type Signal, component$ } from "@qwik.dev/core"; const positions = [ "top-left", diff --git a/website/src/components/Types.tsx b/website/src/components/Types.tsx index 70c7e11..2eca20f 100644 --- a/website/src/components/Types.tsx +++ b/website/src/components/Types.tsx @@ -1,4 +1,4 @@ -import { $, component$, useSignal } from "@builder.io/qwik"; +import { $, component$, useSignal } from "@qwik.dev/core"; import { toast } from "qwik-sonner"; import { CodeBlock } from "./CodeBlock"; diff --git a/website/src/components/Usage.tsx b/website/src/components/Usage.tsx index 10cffed..3f160ef 100644 --- a/website/src/components/Usage.tsx +++ b/website/src/components/Usage.tsx @@ -1,4 +1,4 @@ -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; import { CodeBlock } from "./CodeBlock"; export const Usage = component$(() => { diff --git a/website/src/components/router-head/router-head.tsx b/website/src/components/router-head/router-head.tsx index 0553837..1e3da3b 100644 --- a/website/src/components/router-head/router-head.tsx +++ b/website/src/components/router-head/router-head.tsx @@ -1,6 +1,6 @@ -import { useDocumentHead, useLocation } from "@builder.io/qwik-city"; +import { useDocumentHead, useLocation } from "@qwik.dev/router"; -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; const ogImage = "https://qwik-sonner.deno.dev/og.png"; /** * The RouterHead component is placed inside of the document `` element. diff --git a/website/src/entry.deno.ts b/website/src/entry.deno.ts index 84f220e..f826f84 100644 --- a/website/src/entry.deno.ts +++ b/website/src/entry.deno.ts @@ -8,17 +8,15 @@ * - https://deno.com/manual/examples/http_server * */ -import { createQwikCity } from "@builder.io/qwik-city/middleware/deno"; -import qwikCityPlan from "@qwik-city-plan"; +import { createQwikRouter } from "@qwik.dev/router/middleware/deno"; import { manifest } from "@qwik-client-manifest"; import render from "./entry.ssr"; // @ts-ignore import { serve } from "https://deno.land/std@0.192.0/http/server.ts"; -// Create the Qwik City Deno middleware -const { router, notFound, staticFile } = createQwikCity({ +// Create the Qwik Router Deno middleware +const { router, notFound, staticFile } = createQwikRouter({ render, - qwikCityPlan, manifest, }); diff --git a/website/src/entry.dev.tsx b/website/src/entry.dev.tsx index f421db7..dba2a86 100644 --- a/website/src/entry.dev.tsx +++ b/website/src/entry.dev.tsx @@ -9,7 +9,7 @@ * - More code is transferred to the browser than in SSR mode. * - Optimizer/Serialization/Deserialization code is not exercised! */ -import { render, type RenderOptions } from "@builder.io/qwik"; +import { render, type RenderOptions } from "@qwik.dev/core"; import Root from "./root"; export default function (opts: RenderOptions) { diff --git a/website/src/entry.preview.tsx b/website/src/entry.preview.tsx index 7d353d7..e014339 100644 --- a/website/src/entry.preview.tsx +++ b/website/src/entry.preview.tsx @@ -10,11 +10,10 @@ * - https://vitejs.dev/config/preview-options.html#preview-options * */ -import { createQwikCity } from "@builder.io/qwik-city/middleware/node"; -import qwikCityPlan from "@qwik-city-plan"; +import { createQwikRouter } from "@qwik.dev/router/middleware/node"; import render from "./entry.ssr"; /** - * The default export is the QwikCity adapter used by Vite preview. + * The default export is the Qwik Router adapter used by Vite preview. */ -export default createQwikCity({ render, qwikCityPlan }); +export default createQwikRouter({ render }); diff --git a/website/src/entry.ssr.tsx b/website/src/entry.ssr.tsx index d7a9839..b14cd28 100644 --- a/website/src/entry.ssr.tsx +++ b/website/src/entry.ssr.tsx @@ -13,7 +13,7 @@ import { renderToStream, type RenderToStreamOptions, -} from "@builder.io/qwik/server"; +} from "@qwik.dev/core/server"; import { manifest } from "@qwik-client-manifest"; import Root from "./root"; diff --git a/website/src/root.tsx b/website/src/root.tsx index 65ad337..177cdb4 100644 --- a/website/src/root.tsx +++ b/website/src/root.tsx @@ -1,23 +1,23 @@ -import { component$ } from "@builder.io/qwik"; +import { component$ } from "@qwik.dev/core"; import { - QwikCityProvider, + QwikRouterProvider, RouterOutlet, ServiceWorkerRegister, -} from "@builder.io/qwik-city"; +} from "@qwik.dev/router"; import { RouterHead } from "./components/router-head/router-head"; import "./global.css"; export default component$(() => { /** - * The root of a QwikCity site always start with the component, + * The root of a QwikCity site always start with the component, * immediately followed by the document's and . * * Don't remove the `` and `` elements. */ return ( - + @@ -27,6 +27,6 @@ export default component$(() => { - + ); }); diff --git a/website/src/routes/index.tsx b/website/src/routes/index.tsx index 2995d57..8b40605 100644 --- a/website/src/routes/index.tsx +++ b/website/src/routes/index.tsx @@ -1,4 +1,4 @@ -import { component$, useSignal } from "@builder.io/qwik"; +import { component$, useSignal } from "@qwik.dev/core"; import { Toaster, type ToasterProps } from "qwik-sonner"; import { Hero } from "../components/Hero"; import { Installation } from "../components/Installation"; diff --git a/website/src/routes/layout.tsx b/website/src/routes/layout.tsx index fb63874..60145c4 100644 --- a/website/src/routes/layout.tsx +++ b/website/src/routes/layout.tsx @@ -1,6 +1,6 @@ -import { component$, Slot, useStyles$ } from "@builder.io/qwik"; -import { routeLoader$ } from "@builder.io/qwik-city"; -import type { RequestHandler } from "@builder.io/qwik-city"; +import { component$, Slot, useStyles$ } from "@qwik.dev/core"; +import { routeLoader$ } from "@qwik.dev/router"; +import type { RequestHandler } from "@qwik.dev/router"; import styles from "./styles.css?inline"; diff --git a/website/src/routes/service-worker.ts b/website/src/routes/service-worker.ts deleted file mode 100644 index 6a0d3a0..0000000 --- a/website/src/routes/service-worker.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * WHAT IS THIS FILE? - * - * The service-worker.ts file is used to have state of the art prefetching. - * https://qwik.builder.io/qwikcity/prefetching/overview/ - * - * Qwik uses a service worker to speed up your site and reduce latency, ie, not used in the traditional way of offline. - * You can also use this file to add more functionality that runs in the service worker. - */ -import { setupServiceWorker } from "@builder.io/qwik-city/service-worker"; - -setupServiceWorker(); - -addEventListener("install", () => self.skipWaiting()); - -addEventListener("activate", () => self.clients.claim()); - -declare const self: ServiceWorkerGlobalScope; diff --git a/website/tsconfig.json b/website/tsconfig.json index 3d59706..01d6766 100644 --- a/website/tsconfig.json +++ b/website/tsconfig.json @@ -5,7 +5,7 @@ "module": "ESNext", "lib": ["es2022", "DOM", "WebWorker", "DOM.Iterable"], "jsx": "react-jsx", - "jsxImportSource": "@builder.io/qwik", + "jsxImportSource": "@qwik.dev/core", "strict": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, diff --git a/website/vite.config.ts b/website/vite.config.ts index 135539d..8393b03 100644 --- a/website/vite.config.ts +++ b/website/vite.config.ts @@ -1,11 +1,11 @@ import { defineConfig, type UserConfig } from "vite"; -import { qwikVite } from "@builder.io/qwik/optimizer"; -import { qwikCity } from "@builder.io/qwik-city/vite"; +import { qwikVite } from "@qwik.dev/core/optimizer"; +import { qwikRouter } from "@qwik.dev/router/vite"; import tsconfigPaths from "vite-tsconfig-paths"; export default defineConfig((): UserConfig => { return { - plugins: [qwikCity(), qwikVite(), tsconfigPaths()], + plugins: [qwikRouter(), qwikVite(), tsconfigPaths()], server: { headers: { "Cache-Control": "public, max-age=0", From d32138aef421ceef5815c426a250ab30fcfc8385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20D=C3=ADaz?= Date: Tue, 16 Jun 2026 17:45:55 -0500 Subject: [PATCH 02/36] =?UTF-8?q?docs:=20=F0=9F=93=9D=20add=20AI=20agent?= =?UTF-8?q?=20guides=20for=20Qwik=20v2=20(AGENTS.md=20+=20pointers)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add AGENTS.md as the single source of truth describing the project, the v1->v2 rename table, v2 gotchas, monorepo layout, public API and commands. Add thin pointers for Claude, Gemini, Codex, Cursor and Copilot. --- .cursorrules | 6 ++ .github/copilot-instructions.md | 8 ++ AGENTS.md | 132 ++++++++++++++++++++++++++++++++ CLAUDE.md | 9 +++ GEMINI.md | 7 ++ 5 files changed, 162 insertions(+) create mode 100644 .cursorrules create mode 100644 .github/copilot-instructions.md create mode 100644 AGENTS.md create mode 100644 CLAUDE.md create mode 100644 GEMINI.md diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000..0f18947 --- /dev/null +++ b/.cursorrules @@ -0,0 +1,6 @@ +The full guidance for this repository lives in AGENTS.md at the repo root. Read it before working. + +Key reminders: this is a published Qwik library on Qwik v2 beta (@qwik.dev/core / @qwik.dev/router). +Never reintroduce @builder.io/* imports. After changing src/, verify with `pnpm build.types` + +`pnpm build.lib` (root) and `pnpm build.types` in website/ and test/. Use pnpm only. TypeScript is +strict — fix types instead of using `any`. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..34179f0 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,8 @@ +# GitHub Copilot instructions + +The full guidance for this repository lives in [AGENTS.md](../AGENTS.md). Read it before working. + +Key reminders: this is a **published Qwik library** on **Qwik v2 beta** (`@qwik.dev/core` / +`@qwik.dev/router`). Never reintroduce `@builder.io/*` imports. After changing `src/`, verify with +`pnpm build.types` + `pnpm build.lib` (root) and `pnpm build.types` in `website/` and `test/`. +Use pnpm only. TypeScript is strict — fix types instead of using `any`. diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..f0bef04 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,132 @@ +# AGENTS.md — qwik-sonner + +Guidance for AI coding agents (Claude Code, Codex, Gemini, Cursor, etc.) working in this +repository. This is the single source of truth; `CLAUDE.md` and `GEMINI.md` point here. + +## What this project is + +`qwik-sonner` is an opinionated toast component for **Qwik**, ported from +[sonner](https://sonner.emilkowal.ski/) (React). It is a **published npm library**, so changes to +its public API, build output, or `package.json#exports` are user-facing — treat them carefully. + +It ships two entry points: + +- **Styled** (default): `import { Toaster, toast } from "qwik-sonner";` +- **Headless**: `import { ... } from "qwik-sonner/headless";` + +## ⚠️ This project targets Qwik v2 (beta) + +The codebase was migrated from Qwik 1.x to **Qwik 2.0 beta** (`@qwik.dev/core` / +`@qwik.dev/router`, `2.0.0-beta.37`). Qwik v2 is still in beta — APIs can shift between betas. +**Do not reintroduce v1 (`@builder.io/*`) packages or imports.** + +### v1 → v2 renames (memorize these) + +| Qwik v1 | Qwik v2 | +|---|---| +| `@builder.io/qwik` | `@qwik.dev/core` | +| `@builder.io/qwik/optimizer` | `@qwik.dev/core/optimizer` | +| `@builder.io/qwik/server` | `@qwik.dev/core/server` | +| `@builder.io/qwik-city` | `@qwik.dev/router` | +| `@builder.io/qwik-city/vite` → `qwikCity()` | `@qwik.dev/router/vite` → `qwikRouter()` | +| `createQwikCity()` (middleware) | `createQwikRouter()` | +| `` | `` | +| `@qwik-city-plan` (virtual module) | `@qwik-router-config` | +| `jsxImportSource: "@builder.io/qwik"` | `jsxImportSource: "@qwik.dev/core"` | +| `qwikVite()` from `/optimizer` | **unchanged** (still `qwikVite`) | +| `renderToStream`, `renderToString` (`/server`) | **unchanged** | +| `routeLoader$`, `useLocation`, `DocumentHead`, `RequestHandler`, `RouterOutlet` | **unchanged** (now from `@qwik.dev/router`) | +| Core APIs: `component$`, `useSignal`, `useStore`, `useComputed$`, `useTask$`, `useVisibleTask$`, `useStyles$`, `$`, `Slot`, `JSXOutput`, `Signal` | **unchanged** (from `@qwik.dev/core`) | + +### v2 behavioral gotchas already handled here (don't undo them) + +- **Service worker removed.** v2 uses `` for prefetching. The + `src/routes/service-worker.ts` files were deleted. Keep `` in + `root.tsx` — in v2 it exists only to *unregister* stale service workers from old visitors. +- **`createQwikRouter()` no longer takes `qwikCityPlan`/`qwikRouterConfig`.** The router config is + imported internally via `await import("@qwik-router-config")`. Pass only `{ render }` (and + `manifest` where applicable). Don't add a `qwikRouterConfig` option back. +- **`isSignal(x)` takes no type argument** in v2 (was `isSignal(x)` in v1). +- **`tsconfig` uses `moduleResolution: "bundler"`** and `jsxImportSource: "@qwik.dev/core"`. +- **Vite is v7** (peer range `>=6 <9`). Don't downgrade below 6. + +When in doubt about a v2 API, check the installed type defs under +`node_modules/.pnpm/@qwik.dev+*/node_modules/@qwik.dev/{core,router}/**/*.d.ts` — they are +authoritative for this beta. Official docs: (Qwik City is now "Qwik Router"). + +## Repository layout (pnpm monorepo) + +``` +. # root = the published library (package "qwik-sonner") +├── src/ +│ ├── index.ts # public entry (styled): exports Toaster, toast, types +│ ├── lib/ +│ │ ├── index.ts # alt entry barrel +│ │ ├── styled/ # styled Toaster + styles.css +│ │ └── headless/ # core logic: state, toast, toast-wrapper, types, icons, const +│ ├── root.tsx / entry.*.tsx # dev/SSR harness (not published) +├── website/ # demo + docs site (Qwik Router app, deployed to Deno Deploy) +├── test/ # Qwik Router app used by Playwright e2e tests +├── pnpm-workspace.yaml # workspaces: ".", "website", "test" +└── playwright.config.ts +``` + +`pnpm-workspace.yaml` also lists `onlyBuiltDependencies` / `allowBuilds` for `esbuild` and +`sharp` — these must stay approved or `pnpm install` blocks build scripts. + +## Public API of the library + +- `Toaster` — the styled component you render once near the app root. Props typed as `ToasterProps`. +- `toast` — callable + namespaced helpers: `toast.success`, `.error`, `.info`, `.warning`, + `.message`, `.loading`, `.promise`, `.dismiss`, `.custom`. +- Types: `Toast` (aliased from `ToastT`), `ExternalToast`, `ToasterProps`. + +Headless entry (`qwik-sonner/headless`) exposes the unstyled `Toaster` wrapper + `toast` for +consumers who bring their own styles. + +## Commands + +Run library commands from the repo root; site/e2e commands from their workspace. + +```bash +pnpm install # install all workspaces (build scripts for esbuild/sharp are approved) + +# Library (root) +pnpm build.types # tsc --emitDeclarationOnly -> lib-types/ (typecheck) +pnpm build.lib # vite lib build -> lib/ (styled + headless, esm + cjs) +pnpm lint # eslint src +pnpm fmt # prettier --write + +# Website (cd website) +pnpm build.types # tsc --noEmit (typecheck) +pnpm build.client # vite client build +pnpm dev # local dev server + +# e2e (cd test, then root) +pnpm --filter test build # build the test app +pnpm test # playwright (from root) +``` + +After any change to `src/`, the minimum green bar is: **`pnpm build.types` + `pnpm build.lib`** +pass at the root, and `pnpm build.types` passes in `website/` and `test/`. + +## Qwik authoring conventions (apply to all `.tsx` here) + +- Components are declared with `component$(() => { ... })`. Event handlers and inline closures that + cross the serialization boundary must be wrapped in `$(...)` (e.g. `onClick$={$(() => ...)}`). +- State: `useSignal` for single values, `useStore` for objects, `useComputed$` for derived values. +- Side effects: `useTask$` (runs on server+client, tracks signals) and `useVisibleTask$` + (client-only, after render). A task callback must return `void`/`Promise` — don't return a + value from it (v2 types are strict; assign inside a block instead). +- Styles via `useStyles$(stylesString)`. The styled entry imports `styles.css` as a string. +- Anything captured by a `$`-closure must be **serializable** (no class instances, DOM nodes, etc.). +- Prefer signals/`.value` over local mutable variables that need to survive re-renders. + +## Conventions & guardrails + +- **Package manager: pnpm only** (workspace protocol `workspace:*` links the site/test to the lib). +- TypeScript is `strict`. Keep it green; don't add `any` to silence errors — fix the type. +- Formatting is Prettier; linting is ESLint + `eslint-plugin-qwik`. Run `pnpm fmt` before finishing. +- Don't edit anything in `lib/`, `lib-types/`, `dist/`, or `tmp/` — they are build output. +- Keep `package.json#exports` intact (both `.` and `./headless`); breaking it breaks consumers. +- This is a published package — call out any change that affects the public API or build output. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..b400b49 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,9 @@ +# CLAUDE.md + +The full guidance for this repository lives in [AGENTS.md](./AGENTS.md). Read it before working. + +@AGENTS.md + +Key reminders: this is a **published Qwik library** on **Qwik v2 beta** (`@qwik.dev/core` / +`@qwik.dev/router`). Never reintroduce `@builder.io/*` imports. After changing `src/`, verify with +`pnpm build.types` + `pnpm build.lib` (root) and `pnpm build.types` in `website/` and `test/`. diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 0000000..a9aa2ef --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,7 @@ +# GEMINI.md + +The full guidance for this repository lives in [AGENTS.md](./AGENTS.md). Read it before working. + +Key reminders: this is a **published Qwik library** on **Qwik v2 beta** (`@qwik.dev/core` / +`@qwik.dev/router`). Never reintroduce `@builder.io/*` imports. After changing `src/`, verify with +`pnpm build.types` + `pnpm build.lib` (root) and `pnpm build.types` in `website/` and `test/`. From d1d04c13eadb012b726822626576404cca143a6f Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Tue, 16 Jun 2026 17:47:35 -0500 Subject: [PATCH 03/36] =?UTF-8?q?chore:=20=F0=9F=97=91=EF=B8=8F=20remove?= =?UTF-8?q?=20outdated=20cursor=20rules=20guidance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cursorrules | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .cursorrules diff --git a/.cursorrules b/.cursorrules deleted file mode 100644 index 0f18947..0000000 --- a/.cursorrules +++ /dev/null @@ -1,6 +0,0 @@ -The full guidance for this repository lives in AGENTS.md at the repo root. Read it before working. - -Key reminders: this is a published Qwik library on Qwik v2 beta (@qwik.dev/core / @qwik.dev/router). -Never reintroduce @builder.io/* imports. After changing src/, verify with `pnpm build.types` + -`pnpm build.lib` (root) and `pnpm build.types` in website/ and test/. Use pnpm only. TypeScript is -strict — fix types instead of using `any`. From 50a533a57087be042610f875ed7bfdc96b7d9df6 Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Tue, 16 Jun 2026 18:31:39 -0500 Subject: [PATCH 04/36] =?UTF-8?q?build:=20=E2=AC=86=EF=B8=8F=20migrate=20t?= =?UTF-8?q?o=20Vite=208=20and=20rework=20lib=20build=20(ESM-only)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upgrade Vite 7 → 8 across root, website, and test (within the Qwik v2 peer range vite >=6 <9; Vite 8 uses Rolldown). Build process overhaul (vite.config.ts): - Fix externalization. Root cause: package.json declared no dependencies / peerDependencies, so the config's dep-based externalization was a no-op and DOMPurify got inlined (~80 kB). Now @qwik.dev/core is a peerDependency and dompurify a dependency, so neither is bundled. - Single-pass multi-entry lib build (was two vite builds toggled by an ENTRY env var). Shared headless core is hoisted into one chunk instead of being duplicated across the index and headless entries. - ESM-only output (dropped CJS). exports now lists `types` first; added `module` and `sideEffects: false`. prepublishOnly runs build.types + build.lib. Result: index.qwik.mjs 99.6 kB → 17 kB. Dropped @types/dompurify (deprecated; DOMPurify 3.x ships its own types). --- AGENTS.md | 4 +- package.json | 28 +-- pnpm-lock.yaml | 481 +++++++++++++++++++++++++++++++++++++------ test/package.json | 4 +- vite.config.ts | 52 ++--- website/package.json | 2 +- 6 files changed, 461 insertions(+), 110 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index f0bef04..69946f0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -48,7 +48,7 @@ The codebase was migrated from Qwik 1.x to **Qwik 2.0 beta** (`@qwik.dev/core` / `manifest` where applicable). Don't add a `qwikRouterConfig` option back. - **`isSignal(x)` takes no type argument** in v2 (was `isSignal(x)` in v1). - **`tsconfig` uses `moduleResolution: "bundler"`** and `jsxImportSource: "@qwik.dev/core"`. -- **Vite is v7** (peer range `>=6 <9`). Don't downgrade below 6. +- **Vite is v8** (peer range `>=6 <9`; Vite 8 uses Rolldown). Don't downgrade below 6. When in doubt about a v2 API, check the installed type defs under `node_modules/.pnpm/@qwik.dev+*/node_modules/@qwik.dev/{core,router}/**/*.d.ts` — they are @@ -93,7 +93,7 @@ pnpm install # install all workspaces (build scripts for esbuild/sh # Library (root) pnpm build.types # tsc --emitDeclarationOnly -> lib-types/ (typecheck) -pnpm build.lib # vite lib build -> lib/ (styled + headless, esm + cjs) +pnpm build.lib # single-pass vite lib build -> lib/ (styled + headless, ESM-only, shared chunk) pnpm lint # eslint src pnpm fmt # prettier --write diff --git a/package.json b/package.json index 9a25eda..da8953e 100644 --- a/package.json +++ b/package.json @@ -25,22 +25,22 @@ "url": "git+https://github.com/diecodev/qwik-sonner.git" }, "main": "./lib/index.qwik.mjs", + "module": "./lib/index.qwik.mjs", "qwik": "./lib/index.qwik.mjs", "types": "./lib-types/index.d.ts", + "sideEffects": false, "files": [ "lib", "lib-types" ], "exports": { ".": { - "import": "./lib/index.qwik.mjs", - "require": "./lib/index.qwik.cjs", - "types": "./lib-types/index.d.ts" + "types": "./lib-types/index.d.ts", + "import": "./lib/index.qwik.mjs" }, "./headless": { - "import": "./lib/headless.qwik.mjs", - "require": "./lib/headless.qwik.cjs", - "types": "./lib-types/headless/toast-wrapper.d.ts" + "types": "./lib-types/headless/toast-wrapper.d.ts", + "import": "./lib/headless.qwik.mjs" } }, "engines": { @@ -50,7 +50,7 @@ "type": "module", "scripts": { "build": "qwik build", - "build.lib": "ENTRY=styled vite build --mode lib && ENTRY=headless vite build --mode lib", + "build.lib": "vite build --mode lib", "build.types": "tsc --emitDeclarationOnly -p tsconfig.lib.json", "dev": "vite --mode ssr", "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", @@ -58,27 +58,31 @@ "fmt.check": "prettier --check .", "lint": "eslint \"src/**/*.ts*\"", "release": "bumpp --commit --tag --push", - "prepublishOnly": "pnpm build", + "prepublishOnly": "pnpm run build.types && pnpm run build.lib", "start": "vite --open --mode ssr", "test": "playwright test", "qwik": "qwik" }, + "dependencies": { + "dompurify": "^3.4.10" + }, + "peerDependencies": { + "@qwik.dev/core": "^2.0.0-beta.37" + }, "devDependencies": { "@qwik.dev/core": "2.0.0-beta.37", "@playwright/test": "^1.38.1", - "@types/dompurify": "3.0.5", "@types/eslint": "^8.56.10", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.7.1", "bumpp": "9.4.0", - "dompurify": "3.1.2", "eslint-plugin-qwik": "2.0.0-beta.37", "eslint": "^8.57.0", "prettier": "^3.2.5", "typescript": "5.4.5", "undici": "*", - "vite": "^7.3.5", + "vite": "^8.0.16", "vite-tsconfig-paths": "^6.1.1" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd10257..6c26735 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,16 +7,17 @@ settings: importers: .: + dependencies: + dompurify: + specifier: ^3.4.10 + version: 3.4.10 devDependencies: '@playwright/test': specifier: ^1.38.1 version: 1.43.1 '@qwik.dev/core': specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) - '@types/dompurify': - specifier: 3.0.5 - version: 3.0.5 + version: 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@types/eslint': specifier: ^8.56.10 version: 8.56.10 @@ -32,9 +33,6 @@ importers: bumpp: specifier: 9.4.0 version: 9.4.0 - dompurify: - specifier: 3.1.2 - version: 3.1.2 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -51,20 +49,20 @@ importers: specifier: '*' version: 6.10.2 vite: - specifier: ^7.3.5 - version: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + specifier: ^8.0.16 + version: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + version: 6.1.1(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) test: devDependencies: '@qwik.dev/core': specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + version: 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@qwik.dev/router': specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@types/eslint': specifier: ^8.56.10 version: 8.56.10 @@ -96,20 +94,20 @@ importers: specifier: '*' version: 6.10.2 vite: - specifier: ^7.3.5 - version: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + specifier: ^8.0.16 + version: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + version: 6.1.1(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) website: devDependencies: '@qwik.dev/core': specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + version: 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@qwik.dev/router': specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@types/eslint': specifier: 8.56.1 version: 8.56.1 @@ -156,11 +154,11 @@ importers: specifier: '*' version: 6.3.0 vite: - specifier: ^7.3.5 - version: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + specifier: ^8.0.16 + version: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + version: 6.1.1(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) packages: @@ -175,9 +173,18 @@ packages: '@azure/functions@3.5.1': resolution: {integrity: sha512-6UltvJiuVpvHSwLcK/Zc6NfUwlkDLOFFx97BHCJzlWNsfiWwzwmTsxJXg4kE/LemKTHxPpfoPE+kOJ8hAdiKFQ==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} @@ -560,6 +567,12 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@netlify/edge-functions@3.0.8': resolution: {integrity: sha512-ml1oCDsRTTRmZS2nUj8XRD1b6+foEiZT3lPk7qQ4nv/jnxylHJ20ooPzPDH+cJmGjXFrMeR14/91W1o6D2ftBg==} engines: {node: '>=18.0.0'} @@ -580,6 +593,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -615,6 +631,104 @@ packages: '@qwik.dev/core': ^2.0.0-beta.37 vite: '>=6 <9' + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -762,15 +876,15 @@ packages: cpu: [x64] os: [win32] + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/dompurify@3.0.5': - resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} - '@types/eslint@8.56.1': resolution: {integrity: sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==} @@ -1294,8 +1408,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.1.2: - resolution: {integrity: sha512-hLGGBI1tw5N8qTELr3blKjAML/LY4ANxksbS612UiJyDfyf/2D092Pvm+S7pmeTGJRqvlJkFzBoHBQKgQlOQVg==} + dompurify@3.4.10: + resolution: {integrity: sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w==} domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -1830,6 +1944,80 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -2452,6 +2640,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.62.0: resolution: {integrity: sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2813,15 +3006,16 @@ packages: peerDependencies: vite: '*' - vite@7.3.5: - resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} + vite@8.0.16: + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.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' @@ -2832,12 +3026,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -2910,11 +3106,27 @@ snapshots: long: 4.0.0 uuid: 8.3.2 + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.6.2 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.6.2 + optional: true + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.6.2 optional: true + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.6.2 + optional: true + '@esbuild/aix-ppc64@0.27.7': optional: true @@ -3196,6 +3408,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + '@netlify/edge-functions@3.0.8': dependencies: '@netlify/types': 2.8.0 @@ -3214,6 +3433,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.16.0 + '@oxc-project/types@0.133.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -3221,36 +3442,36 @@ snapshots: dependencies: playwright: 1.43.1 - '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0))': + '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': dependencies: '@qwik.dev/optimizer': 2.1.0-beta.5 csstype: 3.2.3 launch-editor: 2.14.1 magic-string: 0.30.21 rollup: 4.62.0 - vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) optionalDependencies: prettier: 3.2.5 - '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0))': + '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': dependencies: '@qwik.dev/optimizer': 2.1.0-beta.5 csstype: 3.2.3 launch-editor: 2.14.1 magic-string: 0.30.21 rollup: 4.62.0 - vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) optionalDependencies: prettier: 3.2.5 '@qwik.dev/optimizer@2.1.0-beta.5': {} - '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0))': + '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': dependencies: '@azure/functions': 3.5.1 '@mdx-js/mdx': 3.1.1 '@netlify/edge-functions': 3.0.8 - '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@types/mdx': 2.0.13 estree-util-value-to-estree: 3.5.0 github-slugger: 2.0.0 @@ -3270,8 +3491,8 @@ snapshots: unist-util-visit: 5.0.0 valibot: 1.4.1(typescript@5.4.3) vfile: 6.0.3 - vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) - vite-imagetools: 10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)) + vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + vite-imagetools: 10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) yaml: 2.9.0 zod: 3.25.76 transitivePeerDependencies: @@ -3279,12 +3500,12 @@ snapshots: - supports-color - typescript - '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0))': + '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': dependencies: '@azure/functions': 3.5.1 '@mdx-js/mdx': 3.1.1 '@netlify/edge-functions': 3.0.8 - '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) '@types/mdx': 2.0.13 estree-util-value-to-estree: 3.5.0 github-slugger: 2.0.0 @@ -3304,8 +3525,8 @@ snapshots: unist-util-visit: 5.0.0 valibot: 1.4.1(typescript@5.4.5) vfile: 6.0.3 - vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) - vite-imagetools: 10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)) + vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + vite-imagetools: 10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) yaml: 2.9.0 zod: 3.25.76 transitivePeerDependencies: @@ -3313,6 +3534,57 @@ snapshots: - supports-color - typescript + '@rolldown/binding-android-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-x64@1.0.3': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.3': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.3': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.3': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.3': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.3': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.3': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + '@rollup/pluginutils@5.1.0(rollup@4.62.0)': dependencies: '@types/estree': 1.0.5 @@ -3396,6 +3668,11 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.0': optional: true + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.6.2 + optional: true + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.5 @@ -3404,10 +3681,6 @@ snapshots: dependencies: '@types/ms': 0.7.34 - '@types/dompurify@3.0.5': - dependencies: - '@types/trusted-types': 2.0.7 - '@types/eslint@8.56.1': dependencies: '@types/estree': 1.0.5 @@ -3458,7 +3731,8 @@ snapshots: '@types/semver@7.5.8': {} - '@types/trusted-types@2.0.7': {} + '@types/trusted-types@2.0.7': + optional: true '@types/unist@2.0.10': {} @@ -3958,12 +4232,12 @@ snapshots: css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@6.1.0: {} @@ -4037,7 +4311,9 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.1.2: {} + dompurify@3.4.10: + optionalDependencies: + '@types/trusted-types': 2.0.7 domutils@3.1.0: dependencies: @@ -4157,6 +4433,7 @@ snapshots: '@esbuild/win32-arm64': 0.27.7 '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 + optional: true escalade@3.1.2: {} @@ -4732,6 +5009,55 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lilconfig@2.1.0: {} lilconfig@3.0.0: {} @@ -5608,6 +5934,27 @@ snapshots: dependencies: glob: 7.2.3 + rolldown@1.0.3: + dependencies: + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + rollup@4.62.0: dependencies: '@types/estree': 1.0.9 @@ -6031,7 +6378,7 @@ snapshots: dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: @@ -6065,68 +6412,68 @@ snapshots: '@types/unist': 3.0.2 vfile-message: 4.0.2 - vite-imagetools@10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)): + vite-imagetools@10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.62.0) imagetools-core: 9.1.0 sharp: 0.34.5 - vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - rollup - vite-imagetools@10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)): + vite-imagetools@10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.62.0) imagetools-core: 9.1.0 sharp: 0.34.5 - vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - rollup - vite-tsconfig-paths@6.1.1(typescript@5.4.3)(vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0)): + vite-tsconfig-paths@6.1.1(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): dependencies: debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.4.3) - vite: 7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@6.1.1(typescript@5.4.5)(vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0)): + vite-tsconfig-paths@6.1.1(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): dependencies: debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.4.5) - vite: 7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0) + vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite@7.3.5(@types/node@20.12.2)(jiti@1.21.0)(yaml@2.9.0): + vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) + lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.15 - rollup: 4.62.0 + rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 20.12.2 + esbuild: 0.27.7 fsevents: 2.3.3 jiti: 1.21.0 yaml: 2.9.0 - vite@7.3.5(@types/node@20.12.8)(jiti@1.21.0)(yaml@2.9.0): + vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) + lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.15 - rollup: 4.62.0 + rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 20.12.8 + esbuild: 0.27.7 fsevents: 2.3.3 jiti: 1.21.0 yaml: 2.9.0 diff --git a/test/package.json b/test/package.json index e2f64d4..a2a75f6 100644 --- a/test/package.json +++ b/test/package.json @@ -39,7 +39,7 @@ "qwik-sonner": "workspace:*", "typescript": "5.4.5", "undici": "*", - "vite": "^7.3.5", + "vite": "^8.0.16", "vite-tsconfig-paths": "^6.1.1" } -} \ No newline at end of file +} diff --git a/vite.config.ts b/vite.config.ts index 9f67014..6c7e93f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,44 +1,44 @@ import { defineConfig } from "vite"; -import pkg from "./package.json"; import { qwikVite } from "@qwik.dev/core/optimizer"; import tsconfigPaths from "vite-tsconfig-paths"; +import pkg from "./package.json"; -const { dependencies = {}, peerDependencies = {} } = pkg as any; -const makeRegex = (dep) => new RegExp(`^${dep}(/.*)?$`); -const excludeAll = (obj) => Object.keys(obj).map(makeRegex); - -export default defineConfig(({ command }) => { - const env = process.env.ENTRY as "styled" | "headless" | undefined; - - if (!env && command === "build") throw new Error("ENTRY env var is required"); +type DepMap = Record; +const { dependencies = {}, peerDependencies = {} } = pkg as { + dependencies?: DepMap; + peerDependencies?: DepMap; +}; - const entry = - env === "headless" ? "src/lib/headless/toast-wrapper.tsx" : "src/lib"; +// Anything declared as a (peer)dependency must NOT be bundled into the library. +// Consumers install these themselves, which keeps the output small and +// dedupable (e.g. @qwik.dev/core, dompurify). +const makeRegex = (dep: string) => new RegExp(`^${dep}(/.*)?$`); +const external = [ + /^node:.*/, + ...Object.keys(dependencies).map(makeRegex), + ...Object.keys(peerDependencies).map(makeRegex), +]; +export default defineConfig(() => { return { build: { target: "es2020", outDir: "lib", + emptyOutDir: true, + // Single pass, two entry points. Code shared by both (the headless core) + // is hoisted into a shared chunk instead of being duplicated. lib: { - entry, - formats: ["es", "cjs"], - fileName: (format, file) => { - const ext = format === "es" ? "mjs" : "cjs"; - const name = env === "styled" ? "index" : "headless"; - return `${name}.qwik.${ext}`; + entry: { + index: "src/lib/index.ts", + headless: "src/lib/headless/toast-wrapper.tsx", }, + formats: ["es"], + fileName: (_format, entryName) => `${entryName}.qwik.mjs`, }, - emptyOutDir: env === "styled" ? true : false, rollupOptions: { - // externalize deps that shouldn't be bundled into the library - external: [ - /^node:.*/, - ...excludeAll(dependencies), - ...excludeAll(peerDependencies), - ], - // all the chunks created by vite shuold also have qwik in the name + external, output: { - chunkFileNames: "[name]-[format].qwik.js", + chunkFileNames: "[name]-[hash].qwik.mjs", }, }, }, diff --git a/website/package.json b/website/package.json index ae0202b..51ad3c4 100644 --- a/website/package.json +++ b/website/package.json @@ -44,7 +44,7 @@ "tailwindcss": "3.4.3", "typescript": "5.4.3", "undici": "*", - "vite": "^7.3.5", + "vite": "^8.0.16", "vite-tsconfig-paths": "^6.1.1" } } \ No newline at end of file From c91beb24c50d3e088d5506aeb35e775823766f21 Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Tue, 16 Jun 2026 18:41:36 -0500 Subject: [PATCH 05/36] =?UTF-8?q?feat!:=20=F0=9F=94=A5=20remove=20dompurif?= =?UTF-8?q?y,=20render=20title/description=20as=20text/JSX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the library's only runtime dependency. title/description are now rendered as text/JSX nodes (the sonner model) instead of being parsed as sanitized HTML via dangerouslySetInnerHTML + DOMPurify. The package is now dependency-free and fully tree-shakeable. BREAKING CHANGE: string title/description values that previously rendered as HTML markup now render as plain text. Pass JSX for rich content. --- package.json | 3 --- pnpm-lock.yaml | 17 --------------- src/lib/headless/toast.tsx | 44 ++++++++++++-------------------------- vite.config.ts | 2 +- 4 files changed, 15 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index da8953e..fef32fe 100644 --- a/package.json +++ b/package.json @@ -63,9 +63,6 @@ "test": "playwright test", "qwik": "qwik" }, - "dependencies": { - "dompurify": "^3.4.10" - }, "peerDependencies": { "@qwik.dev/core": "^2.0.0-beta.37" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c26735..f4b452c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,10 +7,6 @@ settings: importers: .: - dependencies: - dompurify: - specifier: ^3.4.10 - version: 3.4.10 devDependencies: '@playwright/test': specifier: ^1.38.1 @@ -933,9 +929,6 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -1408,9 +1401,6 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.4.10: - resolution: {integrity: sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w==} - domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -3731,9 +3721,6 @@ snapshots: '@types/semver@7.5.8': {} - '@types/trusted-types@2.0.7': - optional: true - '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} @@ -4311,10 +4298,6 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.4.10: - optionalDependencies: - '@types/trusted-types': 2.0.7 - domutils@3.1.0: dependencies: dom-serializer: 2.0.0 diff --git a/src/lib/headless/toast.tsx b/src/lib/headless/toast.tsx index 701b1db..50accf0 100644 --- a/src/lib/headless/toast.tsx +++ b/src/lib/headless/toast.tsx @@ -11,7 +11,6 @@ import { import { isAction, ToastClassnames, ToastIcons, ToastProps } from "./types"; import { SWIPE_THRESHOLD, TIME_BEFORE_UNMOUNT, TOAST_LIFETIME } from "./const"; import { getAsset, Loader } from "./icons"; -import DOMPurify from "dompurify"; export const Toast = component$((props) => { const { @@ -126,9 +125,6 @@ export const Toast = component$((props) => { } return ; } - function sanitizeHTML(html: string | Node): string { - return DOMPurify.sanitize(html); - } // tasks useTask$(({ track }) => { @@ -407,33 +403,21 @@ export const Toast = component$((props) => {
+ > + {toast.title} + {toast.description ? ( - typeof toast.description === "string" ? ( -
- ) : ( -
- {toast.description} -
- ) +
+ {toast.description} +
) : null}
{typeof toast.cancel === "function" ? ( diff --git a/vite.config.ts b/vite.config.ts index 6c7e93f..a46fa17 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -11,7 +11,7 @@ const { dependencies = {}, peerDependencies = {} } = pkg as { // Anything declared as a (peer)dependency must NOT be bundled into the library. // Consumers install these themselves, which keeps the output small and -// dedupable (e.g. @qwik.dev/core, dompurify). +// dedupable (e.g. @qwik.dev/core). const makeRegex = (dep: string) => new RegExp(`^${dep}(/.*)?$`); const external = [ /^node:.*/, From 5dfac286ed420cc4eded02b77136b2c28f3435dc Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Tue, 16 Jun 2026 23:57:20 -0500 Subject: [PATCH 06/36] =?UTF-8?q?feat:=20=E2=9C=A8=20expand=20headless=20t?= =?UTF-8?q?oast=20core,=20types,=20icons,=20and=20styles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refine the sonner port on Qwik v2: export useSonner and additional public types (ToastClassnames, ToastToDismiss, Action, Promise result types with JSX support), rework headless state/toast/toast-wrapper logic, icons, and styled CSS. Also wire tailwind + qwikRouter into the lib vite config, set rootDir in tsconfig.lib.json, drop the unused dev entry, and remove dead imports in root.tsx. --- src/entry.dev.tsx | 17 - src/entry.ssr.tsx | 42 +- src/index.ts | 4 + src/lib/headless/const.ts | 8 +- src/lib/headless/icons.tsx | 45 ++- src/lib/headless/state.ts | 233 +++++++---- src/lib/headless/toast-wrapper.tsx | 322 +++++++++------ src/lib/headless/toast.tsx | 602 ++++++++++++++++++----------- src/lib/headless/types.ts | 97 +++-- src/lib/index.ts | 9 +- src/lib/styled/styles.css | 357 ++++++++++------- src/root.tsx | 9 +- tsconfig.lib.json | 3 +- vite.config.ts | 4 +- 14 files changed, 1132 insertions(+), 620 deletions(-) delete mode 100644 src/entry.dev.tsx diff --git a/src/entry.dev.tsx b/src/entry.dev.tsx deleted file mode 100644 index dba2a86..0000000 --- a/src/entry.dev.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* - * WHAT IS THIS FILE? - * - * Development entry point using only client-side modules: - * - Do not use this mode in production! - * - No SSR - * - No portion of the application is pre-rendered on the server. - * - All of the application is running eagerly in the browser. - * - More code is transferred to the browser than in SSR mode. - * - Optimizer/Serialization/Deserialization code is not exercised! - */ -import { render, type RenderOptions } from "@qwik.dev/core"; -import Root from "./root"; - -export default function (opts: RenderOptions) { - return render(document, , opts); -} diff --git a/src/entry.ssr.tsx b/src/entry.ssr.tsx index fb591da..2bad927 100644 --- a/src/entry.ssr.tsx +++ b/src/entry.ssr.tsx @@ -1,25 +1,31 @@ /** * WHAT IS THIS FILE? * - * SSR entry point, in all cases the application is rendered outside the browser, this - * entry point will be the common one. - * - * - Server (express, cloudflare...) - * - npm run start - * - npm run preview - * - npm run build + * SSR renderer function, used by Qwik Router. * + * Note that this is the only place the Qwik renderer is called. + * On the client, containers resume and do not call render. */ -import { - renderToStream, - type RenderToStreamOptions, -} from "@qwik.dev/core/server"; -import { manifest } from "@qwik-client-manifest"; +import { createRenderer } from "@qwik.dev/router"; import Root from "./root"; -export default function (opts: RenderToStreamOptions) { - return renderToStream(, { - manifest, - ...opts, - }); -} +export default createRenderer((opts) => { + return { + jsx: , + options: { + ...opts, + // Use container attributes to set attributes on the html tag. + containerAttributes: { + lang: "en-us", + ...opts.containerAttributes, + }, + serverData: { + ...opts.serverData, + // These are the default values for the document head and are overridden by the `head` exports + // documentHead: { + // title: "My App", + // }, + }, + }, + }; +}); diff --git a/src/index.ts b/src/index.ts index 613d874..7d003f8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,11 @@ export { Toaster } from "./lib/styled/index"; export { toast } from "./lib/headless/state"; +export { useSonner } from "./lib/headless/toast-wrapper"; export { type ToastT as Toast, type ExternalToast, type ToasterProps, + type ToastClassnames, + type ToastToDismiss, + type Action, } from "./lib/headless/types"; diff --git a/src/lib/headless/const.ts b/src/lib/headless/const.ts index 124a7fe..d4fc8d6 100644 --- a/src/lib/headless/const.ts +++ b/src/lib/headless/const.ts @@ -1,7 +1,11 @@ +// Visible toasts amount export const VISIBLE_TOASTS_AMOUNT = 3; // Viewport padding -export const VIEWPORT_OFFSET = "32px"; +export const VIEWPORT_OFFSET = "24px"; + +// Mobile viewport padding +export const MOBILE_VIEWPORT_OFFSET = "16px"; // Default lifetime of a toasts (in ms) export const TOAST_LIFETIME = 4000; @@ -13,7 +17,7 @@ export const TOAST_WIDTH = 356; export const GAP = 14; // Threshold to dismiss a toast -export const SWIPE_THRESHOLD = 20; +export const SWIPE_THRESHOLD = 45; // Equal to exit animation duration export const TIME_BEFORE_UNMOUNT = 200; diff --git a/src/lib/headless/icons.tsx b/src/lib/headless/icons.tsx index f4a07dc..d927eca 100644 --- a/src/lib/headless/icons.tsx +++ b/src/lib/headless/icons.tsx @@ -1,5 +1,4 @@ -"use client"; -import { component$ } from "@qwik.dev/core"; +import { ClassList, component$ } from "@qwik.dev/core"; import type { ToastTypes } from "./types"; export const getAsset = (type: ToastTypes) => { @@ -23,17 +22,22 @@ export const getAsset = (type: ToastTypes) => { const bars = Array(12).fill(0); -export const Loader = component$(({ visible }: { visible: boolean }) => { - return ( -
-
- {bars.map((_, i) => ( -
- ))} +export const Loader = component$( + ({ visible, class: className }: { visible: boolean; class?: ClassList }) => { + return ( +
+
+ {bars.map((_, i) => ( +
+ ))} +
-
- ); -}); + ); + } +); const SuccessIcon = component$(() => ( ( /> )); + +export const CloseIcon = ( + + + + +); diff --git a/src/lib/headless/state.ts b/src/lib/headless/state.ts index d14ee29..487fd37 100644 --- a/src/lib/headless/state.ts +++ b/src/lib/headless/state.ts @@ -1,17 +1,59 @@ import { JSXOutput } from "@qwik.dev/core"; import type { ExternalToast, - ToastT, PromiseData, + PromiseIExtendedResult, PromiseT, + ToastT, ToastToDismiss, ToastTypes, } from "./types"; let toastsCounter = 1; +type titleT = (() => JSXOutput | string) | JSXOutput | string; + const subscribers: Array<(toast: ToastT | ToastToDismiss) => void> = []; let toasts: Array = []; +const dismissedToasts = new Set(); + +// `requestAnimationFrame` only exists in the browser; toasts are always +// triggered client-side, but guard anyway so the module is import-safe on SSR. +const scheduleRaf = (cb: () => void) => { + if (typeof requestAnimationFrame !== "undefined") { + requestAnimationFrame(cb); + } else { + cb(); + } +}; + +// Qwik does not expose a public `isJSXNode`, so detect a JSX node structurally +// (it carries `type`/`props`/`key`). Used only for the rare case of a promise +// resolving directly to a node. +const isJSXNode = (value: unknown): boolean => { + return ( + typeof value === "object" && + value !== null && + "type" in value && + "props" in value && + "key" in value + ); +}; + +// Resolve a value that may be a plain value, a sync function, or a QRL. +const resolveMaybe = async (value: unknown, arg: unknown) => + typeof value === "function" ? await (value as any)(arg) : value; + +const isHttpResponse = (data: any): data is Response => { + return ( + data && + typeof data === "object" && + "ok" in data && + typeof data.ok === "boolean" && + "status" in data && + typeof data.status === "number" + ); +}; // We use arrow functions to maintain the correct `this` reference const subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => { @@ -34,13 +76,18 @@ const addToast = (data: ToastT) => { const create = ( data: ExternalToast & { - message?: string | JSXOutput; + message?: titleT; type?: ToastTypes; promise?: PromiseT; jsx?: JSXOutput; } ) => { - const { message, ...rest } = data; + // NOTE: use native spread + delete instead of `const { message, ...rest }`. + // The Qwik optimizer rewrites object rest-destructuring into `_restProps()`, + // which drops the `jsx` property (breaking `toast.custom`). + const message = data.message; + const rest = { ...data }; + delete rest.message; const id = typeof data?.id === "number" || (data.id && data.id?.length > 0) ? data.id @@ -50,6 +97,10 @@ const create = ( }); const dismissible = data.dismissible === undefined ? true : data.dismissible; + if (dismissedToasts.has(id)) { + dismissedToasts.delete(id); + } + if (alreadyExists) { toasts = toasts.map((toast) => { if (toast.id === id) { @@ -73,39 +124,43 @@ const create = ( }; const dismiss = (id?: number | string) => { - if (!id) { - return toasts.forEach((toast) => { + if (id) { + dismissedToasts.add(id); + scheduleRaf(() => + subscribers.forEach((subscriber) => subscriber({ id, dismiss: true })) + ); + } else { + toasts.forEach((toast) => { subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }) ); }); } - subscribers.forEach((subscriber) => subscriber({ id, dismiss: true })); return id; }; -const message = (message: string | JSXOutput, data?: ExternalToast) => { +const message = (message: titleT, data?: ExternalToast) => { return create({ ...data, message }); }; -const error = (message: string | JSXOutput, data?: ExternalToast) => { +const error = (message: titleT, data?: ExternalToast) => { return create({ ...data, message, type: "error" }); }; -const success = (message: string | JSXOutput, data?: ExternalToast) => { +const success = (message: titleT, data?: ExternalToast) => { return create({ ...data, type: "success", message }); }; -const info = (message: string | JSXOutput, data?: ExternalToast) => { +const info = (message: titleT, data?: ExternalToast) => { return create({ ...data, type: "info", message }); }; -const warning = (message: string | JSXOutput, data?: ExternalToast) => { +const warning = (message: titleT, data?: ExternalToast) => { return create({ ...data, type: "warning", message }); }; -const loading = (message: string | JSXOutput, data?: ExternalToast) => { +const loading = (message: titleT, data?: ExternalToast) => { return create({ ...data, type: "loading", message }); }; @@ -130,55 +185,66 @@ const promise = ( }); } - const p = promise instanceof Promise ? promise : promise(); + const p = Promise.resolve(promise instanceof Function ? promise() : promise); let shouldDismiss = id !== undefined; + let result: ["resolve", ToastData] | ["reject", unknown]; + + // An "extended result" is a plain object carrying a `message` plus extra + // toast options; anything else (string, JSX node) becomes the message itself. + const buildSettings = (promiseData: unknown): PromiseIExtendedResult => { + const isExtendedResult = + typeof promiseData === "object" && + promiseData !== null && + "message" in promiseData && + !isJSXNode(promiseData); - p.then(async (response) => { - // TODO: Clean up TS here, response has incorrect type - // @ts-expect-error - if (response && typeof response.ok === "boolean" && !response.ok) { - shouldDismiss = false; - const message = - typeof data.error === "function" - ? await data.error({ - // @ts-expect-error - error: `HTTP error! status: ${response.status}`, - }) - : data.error; - const description = - typeof data.description === "function" - ? await data.description( - // @ts-expect-error - `HTTP error! status: ${response.status}` - ) - : data.description; - create({ id, type: "error", message, description }); - } else if (data.success !== undefined) { - shouldDismiss = false; - const message = - typeof data.success === "function" - ? await data.success(response) - : data.success; - const description = - typeof data.description === "function" - ? await data.description(response) - : data.description; - create({ id, type: "success", message, description }); - } - }) + return isExtendedResult + ? (promiseData as PromiseIExtendedResult) + : { message: promiseData as string | JSXOutput }; + }; + + const originalPromise = p + .then(async (response: any) => { + result = ["resolve", response]; + if (isJSXNode(response)) { + shouldDismiss = false; + create({ id, type: "default", message: response }); + } else if (isHttpResponse(response) && !response.ok) { + shouldDismiss = false; + const promiseData = await resolveMaybe( + data.error, + `HTTP error! status: ${response.status}` + ); + const description = await resolveMaybe( + data.description, + `HTTP error! status: ${response.status}` + ); + create({ id, type: "error", description, ...buildSettings(promiseData) }); + } else if (response instanceof Error) { + shouldDismiss = false; + const promiseData = await resolveMaybe(data.error, response); + const description = await resolveMaybe(data.description, response); + create({ id, type: "error", description, ...buildSettings(promiseData) }); + } else if (data.success !== undefined) { + shouldDismiss = false; + const promiseData = await resolveMaybe(data.success, response); + const description = await resolveMaybe(data.description, response); + create({ + id, + type: "success", + description, + ...buildSettings(promiseData), + }); + } + }) .catch(async (error) => { + result = ["reject", error]; if (data.error !== undefined) { shouldDismiss = false; - const message = - typeof data.error === "function" - ? await data.error(error) - : data.error; - const description = - typeof data.description === "function" - ? await data.description(error) - : data.description; - create({ id, type: "error", message, description }); + const promiseData = await resolveMaybe(data.error, error); + const description = await resolveMaybe(data.description, error); + create({ id, type: "error", description, ...buildSettings(promiseData) }); } }) .finally(() => { @@ -191,7 +257,21 @@ const promise = ( data.finally?.(); }); - return id; + const unwrap = () => + new Promise((resolve, reject) => + originalPromise + .then(() => + result[0] === "reject" ? reject(result[1]) : resolve(result[1]) + ) + .catch(reject) + ); + + if (typeof id !== "string" && typeof id !== "number") { + // cannot Object.assign on undefined + return { unwrap }; + } else { + return Object.assign(id, { unwrap }); + } }; const custom = ( @@ -199,10 +279,14 @@ const custom = ( data?: ExternalToast ) => { const id = data?.id || toastsCounter++; - create({ jsx: jsx(id), id, ...data }); + create({ jsx: jsx(id), ...data, id }); return id; }; +const getActiveToasts = () => { + return toasts.filter((toast) => !dismissedToasts.has(toast.id)); +}; + export const ToastState = { subscribe, addToast, @@ -216,10 +300,14 @@ export const ToastState = { loading, promise, custom, + getActiveToasts, + get toasts() { + return toasts; + }, }; // bind this to the toast function -const toastFunction = (message: string | JSXOutput, data?: ExternalToast) => { +const toastFunction = (message: titleT, data?: ExternalToast) => { const id = data?.id || toastsCounter++; ToastState.addToast({ @@ -232,15 +320,22 @@ const toastFunction = (message: string | JSXOutput, data?: ExternalToast) => { const basicToast = toastFunction; +const getHistory = () => ToastState.toasts; +const getToasts = () => ToastState.getActiveToasts(); + // We use `Object.assign` to maintain the correct types as we would lose them otherwise -export const toast = Object.assign(basicToast, { - success: ToastState.success, - info: ToastState.info, - warning: ToastState.warning, - error: ToastState.error, - custom: ToastState.custom, - message: ToastState.message, - promise: ToastState.promise, - dismiss: ToastState.dismiss, - loading: ToastState.loading, -}); +export const toast = Object.assign( + basicToast, + { + success: ToastState.success, + info: ToastState.info, + warning: ToastState.warning, + error: ToastState.error, + custom: ToastState.custom, + message: ToastState.message, + promise: ToastState.promise, + dismiss: ToastState.dismiss, + loading: ToastState.loading, + }, + { getHistory, getToasts } +); diff --git a/src/lib/headless/toast-wrapper.tsx b/src/lib/headless/toast-wrapper.tsx index 6d2a33a..5e4ede0 100644 --- a/src/lib/headless/toast-wrapper.tsx +++ b/src/lib/headless/toast-wrapper.tsx @@ -1,15 +1,21 @@ import { $, component$, + isBrowser, QwikVisibleEvent, useComputed$, + useOn, useOnDocument, useSignal, useTask$, } from "@qwik.dev/core"; import { + Action, + ExternalToast, HeightT, + Offset, Theme, + ToastClassnames, ToasterProps, ToastT, ToastToDismiss, @@ -17,6 +23,7 @@ import { } from "./types"; import { GAP, + MOBILE_VIEWPORT_OFFSET, TOAST_WIDTH, VIEWPORT_OFFSET, VISIBLE_TOASTS_AMOUNT, @@ -24,46 +31,145 @@ import { TIME_BEFORE_UNMOUNT, TOAST_LIFETIME, } from "./const"; -import { ToastState } from "./state"; +import { ToastState, toast } from "./state"; import { Toast } from "./toast"; -import { toast } from "./state"; + +function getDocumentDirection(): NonNullable { + if (typeof window === "undefined") return "ltr"; + if (typeof document === "undefined") return "ltr"; // For Fresh purpose + + const dirAttribute = document.documentElement.getAttribute("dir"); + + if (dirAttribute === "auto" || !dirAttribute) { + return window.getComputedStyle(document.documentElement) + .direction as NonNullable; + } + + return dirAttribute as NonNullable; +} + +function assignOffset(defaultOffset?: Offset, mobileOffset?: Offset) { + const styles: Record = {}; + + [defaultOffset, mobileOffset].forEach((offset, index) => { + const isMobile = index === 1; + const prefix = isMobile ? "--mobile-offset" : "--offset"; + const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET; + + const assignAll = (value: string | number) => { + ["top", "right", "bottom", "left"].forEach((key) => { + styles[`${prefix}-${key}`] = + typeof value === "number" ? `${value}px` : value; + }); + }; + + if (typeof offset === "number" || typeof offset === "string") { + assignAll(offset); + } else if (typeof offset === "object" && offset !== null) { + ["top", "right", "bottom", "left"].forEach((key) => { + const value = (offset as Record)[ + key + ]; + if (value === undefined) { + styles[`${prefix}-${key}`] = defaultValue; + } else { + styles[`${prefix}-${key}`] = + typeof value === "number" ? `${value}px` : value; + } + }); + } else { + assignAll(defaultValue); + } + }); + + return styles; +} + +/** + * Reactive view of the currently active toasts — the Qwik equivalent of + * sonner's `useSonner()`. Returns a `Signal` of the active toasts. + */ +export function useSonner() { + const activeToasts = useSignal([]); + + const subscribe = $(() => { + // Seed with anything already active when this component becomes visible. + activeToasts.value = ToastState.getActiveToasts() as ToastT[]; + + return ToastState.subscribe((incoming) => { + if ((incoming as ToastToDismiss).dismiss) { + activeToasts.value = activeToasts.value.filter( + (t) => t.id !== incoming.id + ); + return; + } + + const indexOfExistingToast = activeToasts.value.findIndex( + (t) => t.id === incoming.id + ); + + if (indexOfExistingToast !== -1) { + activeToasts.value = [ + ...activeToasts.value.slice(0, indexOfExistingToast), + { ...activeToasts.value[indexOfExistingToast], ...incoming }, + ...activeToasts.value.slice(indexOfExistingToast + 1), + ]; + return; + } + + activeToasts.value = [incoming as ToastT, ...activeToasts.value]; + }); + }); + + useOn("qvisible", subscribe); + + return { toasts: activeToasts }; +} const Toaster = component$((props) => { const { - invert = false, position = "bottom-right", hotkey = ["altKey", "KeyT"], expand, - closeButton, class: localClass, offset, + mobileOffset, theme = "light", - richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, - dir, + dir = getDocumentDirection(), gap = GAP, loadingIcon, icons, + customAriaLabel, containerAriaLabel = "Notifications", - pauseWhenPageIsHidden, } = props; const toasts = useSignal([]); const heights = useSignal([]); const expanded = useSignal(false); const interacting = useSignal(false); + const actualTheme = useSignal<"light" | "dark">( + theme !== "system" ? theme : "light" + ); const listRef = useSignal(); const lastFocusedElementRef = useSignal(null); const isFocusWithinRef = useSignal(false); + const filteredToasts = useComputed$(() => { + if (props.id) { + return toasts.value.filter((t) => t.toasterId === props.id); + } + return toasts.value.filter((t) => !t.toasterId); + }); + const possiblePositions = useComputed$(() => { return Array.from( new Set( [position].concat( - toasts.value + filteredToasts.value .filter((toast) => toast.position) .map((toast) => toast.position!) ) @@ -76,88 +182,70 @@ const Toaster = component$((props) => { .replace(/Key/g, "") .replace(/Digit/g, ""); - const removeToast = $( - (toast: ToastT) => - (toasts.value = toasts.value.filter(({ id }) => id !== toast.id)) - ); + const removeToast = $((toastToRemove: ToastT) => { + const existing = toasts.value.find((t) => t.id === toastToRemove.id); + if (existing && !existing.delete) { + ToastState.dismiss(toastToRemove.id); + } + toasts.value = toasts.value.filter(({ id }) => id !== toastToRemove.id); + }); const onMountHandler = $((_: QwikVisibleEvent, _1: HTMLElement) => { - return ToastState.subscribe((toast) => { - if ((toast as ToastToDismiss).dismiss) { + return ToastState.subscribe((incoming) => { + if ((incoming as ToastToDismiss).dismiss) { toasts.value = toasts.value.map((t) => - t.id === toast.id ? { ...t, delete: true } : t + t.id === incoming.id ? { ...t, delete: true } : t ); return; } const indexOfExistingToast = toasts.value.findIndex( - (t) => t.id === toast.id + (t) => t.id === incoming.id ); if (indexOfExistingToast !== -1) { - return (toasts.value = [ + toasts.value = [ ...toasts.value.slice(0, indexOfExistingToast), - { ...toasts.value[indexOfExistingToast], ...toast }, + { ...toasts.value[indexOfExistingToast], ...incoming }, ...toasts.value.slice(indexOfExistingToast + 1), - ]); + ]; + return; } - return (toasts.value = [toast, ...toasts.value]); + toasts.value = [incoming as ToastT, ...toasts.value]; }); }); - const onMountThemeHandler = $((_: QwikVisibleEvent, _1: HTMLElement) => { - const selectedTheme = listRef.value?.getAttribute("data-theme") as Theme; - - if (selectedTheme !== "system") return; + // Resolve the system color scheme (and listen for changes) on the client. + const onMountTheme = $((_: QwikVisibleEvent, _1: HTMLElement) => { + if (props.theme !== "system") return; - const themeFromLocalStorage = localStorage.getItem("theme") as Theme; - - if (themeFromLocalStorage) { - return listRef.value?.setAttribute("data-theme", themeFromLocalStorage); - } - - const themeFromMediaQuery = - window.matchMedia && - window.matchMedia("(prefers-color-scheme: dark)").matches + const mql = window.matchMedia("(prefers-color-scheme: dark)"); + actualTheme.value = mql.matches ? "dark" : "light"; + mql.addEventListener("change", (event) => { + actualTheme.value = (event as MediaQueryListEvent).matches ? "dark" : "light"; - - listRef.value?.setAttribute("data-theme", themeFromMediaQuery); - localStorage.setItem("theme", themeFromMediaQuery); - }); - - const onMountDirHandler = $((_: QwikVisibleEvent, _1: HTMLElement) => { - if (dir && dir !== "auto") return; - - const newDir = window.getComputedStyle(document.documentElement).direction; - listRef.value?.setAttribute("dir", newDir); - - const observer = new MutationObserver((mutations) => { - mutations.forEach((mutation) => { - if ( - mutation.type === "attributes" && - mutation.attributeName === "dir" - ) { - const value = (mutation.target as HTMLElement).getAttribute("dir"); - if (value === "auto" || !value) { - return listRef.value!.setAttribute("dir", newDir); - } - listRef.value!.setAttribute("dir", value); - } - }); }); + }); - observer.observe(document.documentElement, { - attributes: true, - attributeFilter: ["dir"], - }); + // Keep `actualTheme` in sync with an explicit `theme` prop (incl. SSR). + useTask$(({ track }) => { + const t = track(() => props.theme) as Theme | undefined; + if (t !== "system") { + actualTheme.value = t === "dark" ? "dark" : "light"; + return; + } + if (!isBrowser) return; + actualTheme.value = window.matchMedia("(prefers-color-scheme: dark)").matches + ? "dark" + : "light"; }); useTask$(({ track }) => { - track(() => toasts.value); + const list = track(() => toasts.value); // Ensure expanded is always false when no toasts are present / only one left - if (toasts.value.length <= 1) { + if (list.length <= 1) { expanded.value = false; } }); @@ -165,9 +253,10 @@ const Toaster = component$((props) => { useOnDocument( "keydown", $((ev) => { - const isHotkeyPressed = hotkey.every( - (key) => (ev as any)[key] || ev.code === key - ); + const event = ev as KeyboardEvent; + const isHotkeyPressed = + hotkey.length > 0 && + hotkey.every((key) => (event as any)[key] || event.code === key); if (isHotkeyPressed) { expanded.value = true; @@ -175,7 +264,7 @@ const Toaster = component$((props) => { } if ( - ev.code === "Escape" && + event.code === "Escape" && (document.activeElement === listRef.value || listRef.value?.contains(document.activeElement)) ) { @@ -184,52 +273,54 @@ const Toaster = component$((props) => { }) ); - useTask$(({ track, cleanup }) => { - track(() => listRef.value); - - if (!listRef.value) return; - - cleanup(() => { - if (lastFocusedElementRef.value) { - lastFocusedElementRef.value.focus({ preventScroll: true }); - lastFocusedElementRef.value = null; - isFocusWithinRef.value = false; - } - }); + // Return focus to the previously-focused element once the toaster empties. + // (Qwik doesn't reset refs on unmount, so React's "ol unmount" cleanup can't + // be replicated via the ref — key off the toast count instead.) + useTask$(({ track }) => { + const count = track(() => toasts.value.length); + if (count === 0 && isFocusWithinRef.value) { + const last = lastFocusedElementRef.value; + lastFocusedElementRef.value = null; + isFocusWithinRef.value = false; + if (last) last.focus({ preventScroll: true }); + } }); return ( // Remove item from normal navigation flow, only available via hotkey
- {possiblePositions.value.map((position, index) => { - const [y, x] = position.split("-"); + {possiblePositions.value.map((pos, index) => { + const [y, x] = pos.split("-"); + + if (!filteredToasts.value.length) return null; + return (
    { + onFocusOut$={(event, target) => { if ( isFocusWithinRef.value && !target.contains(event.relatedTarget as HTMLElement) @@ -243,10 +334,11 @@ const Toaster = component$((props) => { } } }} - onFocusIn$={(event, target) => { + onFocusIn$={(event) => { + const focused = event.target; const isNotDismissible = - target instanceof HTMLElement && - target.dataset.dismissible === "false"; + focused instanceof HTMLElement && + focused.dataset.dismissible === "false"; if (isNotDismissible) return; @@ -264,7 +356,9 @@ const Toaster = component$((props) => { expanded.value = false; } }} - onPointerDown$={(_, target) => { + onDragEnd$={() => (expanded.value = false)} + onPointerDown$={(event) => { + const target = event.target; const isNotDismissible = target instanceof HTMLElement && target.dataset.dismissible === "false"; @@ -274,43 +368,43 @@ const Toaster = component$((props) => { }} onPointerUp$={() => (interacting.value = false)} > - {toasts.value + {filteredToasts.value .filter( - (toast) => - (!toast.position && index === 0) || - toast.position === position + (t) => (!t.position && index === 0) || t.position === pos ) - .map((toast, index) => ( + .map((t, i) => ( t.position === toast.position + toasts={filteredToasts.value.filter( + (item) => item.position === t.position )} heights={heights} expandByDefault={expand ?? false} gap={gap} loadingIcon={loadingIcon} expanded={expanded} - pauseWhenPageIsHidden={pauseWhenPageIsHidden ?? false} + swipeDirections={props.swipeDirections} /> ))}
@@ -325,10 +419,16 @@ export { toast, type ToasterProps, type ToastProps, + type ToastT, + type ExternalToast, + type ToastClassnames, + type ToastToDismiss, + type Action, Toast, GAP, TOAST_WIDTH, VIEWPORT_OFFSET, + MOBILE_VIEWPORT_OFFSET, VISIBLE_TOASTS_AMOUNT, SWIPE_THRESHOLD, TIME_BEFORE_UNMOUNT, diff --git a/src/lib/headless/toast.tsx b/src/lib/headless/toast.tsx index 50accf0..e2762c5 100644 --- a/src/lib/headless/toast.tsx +++ b/src/lib/headless/toast.tsx @@ -1,54 +1,84 @@ import { $, component$, + isBrowser, + isSignal, useComputed$, + useOnDocument, useSignal, useTask$, - isSignal, - useOnDocument, - useVisibleTask$, } from "@qwik.dev/core"; -import { isAction, ToastClassnames, ToastIcons, ToastProps } from "./types"; +import { + isAction, + SwipeDirection, + ToastClassnames, + ToastIcons, + ToastProps, +} from "./types"; import { SWIPE_THRESHOLD, TIME_BEFORE_UNMOUNT, TOAST_LIFETIME } from "./const"; -import { getAsset, Loader } from "./icons"; +import { CloseIcon, getAsset, Loader } from "./icons"; + +function getDefaultSwipeDirections(position: string): Array { + const [y, x] = position.split("-"); + const directions: Array = []; + + if (y) { + directions.push(y as SwipeDirection); + } + + if (x) { + directions.push(x as SwipeDirection); + } + + return directions; +} export const Toast = component$((props) => { + // Stable props (do not change during a toast's lifetime) — safe to destructure. const { - invert: ToasterInvert, - toast, unstyled, - interacting, visibleToasts, heights, - index, - toasts, expanded, removeToast, - closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, class: localClass = "", descriptionClass = "", - duration: durationFromToaster, position, gap, loadingIcon: loadingIconProp, - expandByDefault, classes, icons, closeButtonAriaLabel = "Close toast", - pauseWhenPageIsHidden, } = props; + // Volatile props (`toast`, `index`, `toasts`, `interacting`, `closeButton`, + // `duration`, `invert`, `expandByDefault`, `defaultRichColors`) are read via + // `props.*` so render re-runs and tasks/computeds stay reactive. + const toast = props.toast; + const index = props.index; + const toasts = props.toasts; + const expandByDefault = props.expandByDefault; + const defaultRichColors = props.defaultRichColors; + // signals + const swipeDirection = useSignal<"x" | "y" | null>(null); + const swipeOutDirection = useSignal< + "left" | "right" | "up" | "down" | null + >(null); const mounted = useSignal(false); const removed = useSignal(false); const swiping = useSignal(false); const swipeOut = useSignal(false); + const isSwiped = useSignal(false); const offsetBeforeRemove = useSignal(0); const initialHeight = useSignal(0); - const dragStartTime = useSignal(null); + const remainingTime = useSignal( + props.toast.duration || props.duration || TOAST_LIFETIME + ); + const dragStartTime = useSignal(null); const toastRef = useSignal(); const closeTimerStartTimeRef = useSignal(0); const lastCloseTimerStartTimeRef = useSignal(0); @@ -63,32 +93,35 @@ export const Toast = component$((props) => { const toastClass = toast.class ?? ""; const toastDescriptionClass = toast.descriptionClass ?? ""; const [y, x] = position.split("-"); - const invertChecked = isSignal(ToasterInvert) - ? ToasterInvert.value - : ToasterInvert; - const invert = useComputed$(() => toast.invert ?? invertChecked); + + // computed values — read volatile props via `props.*` so they recompute. + const invert = useComputed$(() => { + const toasterInvert = props.invert; + const invertChecked = isSignal(toasterInvert) + ? toasterInvert.value + : toasterInvert; + return Boolean(props.toast.invert ?? invertChecked ?? false); + }); const disabled = toastType === "loading"; - // computed values - // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster. + // Height index is used to calculate the offset as it gets updated before the + // toast array, which means we can calculate the new layout faster. const heightIndex = useComputed$(() => { - const hSet = Array.from(new Set(heights.value.map((h) => h.toastId))); - const idx = hSet.findIndex((id) => id === toast.id) || 0; + const idx = heights.value.findIndex((h) => h.toastId === props.toast.id); return idx === -1 ? 0 : idx; }); const closeButton = useComputed$( - () => toast.closeButton ?? closeButtonFromToaster + () => props.toast.closeButton ?? props.closeButton ); const duration = useComputed$( - () => toast.duration ?? durationFromToaster ?? TOAST_LIFETIME + () => props.toast.duration || props.duration || TOAST_LIFETIME ); const toastsHeightBefore = useComputed$(() => { return heights.value.reduce((prev, curr, reducerIndex) => { - // Calculate offset up until current toast + // Calculate offset up until current toast if (reducerIndex >= heightIndex.value) { return prev; } - return prev + curr.height; }, 0); }); @@ -107,10 +140,14 @@ export const Toast = component$((props) => { removeToast(toast); }, TIME_BEFORE_UNMOUNT); }); + function getLoadingIcon() { if (icons?.loading) { return ( -
+
{icons.loading}
); @@ -118,85 +155,148 @@ export const Toast = component$((props) => { if (loadingIconProp) { return ( -
+
{loadingIconProp}
); } - return ; + + return ( + + ); } + const iconFromIcons = toastType + ? icons?.[toastType as keyof ToastIcons] + : undefined; + const icon = + toast.icon || + iconFromIcons || + (toastType ? getAsset(toastType) : null); + // tasks + // Keep `remainingTime` in sync with the (possibly changing) duration. + useTask$(({ track }) => { + const d = track(() => duration.value); + remainingTime.value = d; + }); + + // Trigger enter animation without using a visible task: defer the + // `mounted` flip to the next animation frame so the CSS transition runs. + useTask$(() => { + if (!isBrowser) return; + requestAnimationFrame(() => { + mounted.value = true; + }); + }); + + // Add toast height to the heights array after it mounts; clean up on unmount. + useTask$(({ track, cleanup }) => { + const node = track(() => toastRef.value); + track(() => props.toast.id); + + if (!node) return; + + const height = node.getBoundingClientRect().height; + initialHeight.value = height; + heights.value = [ + { + toastId: props.toast.id, + height, + position: props.toast.position ?? position, + }, + ...heights.value, + ]; + + cleanup(() => { + heights.value = heights.value.filter( + (h) => h.toastId !== props.toast.id + ); + }); + }); + + // Keep height up to date with the content in case it updates. useTask$(({ track }) => { - track(() => toastRef.value); + const mountedNow = track(() => mounted.value); + track(() => props.toast.title); + track(() => props.toast.description); + track(() => props.toast.jsx); + track(() => props.toast.action); + track(() => props.toast.cancel); - if (!toastRef.value) return; + const node = toastRef.value; + if (!mountedNow || !node) return; - const originalHeight = toastRef.value.style.height; - toastRef.value.style.height = "auto"; - const newHeight = toastRef.value.getBoundingClientRect().height; - toastRef.value.style.height = originalHeight; + const originalHeight = node.style.height; + node.style.height = "auto"; + const newHeight = node.getBoundingClientRect().height; + node.style.height = originalHeight; initialHeight.value = newHeight; - const exists = heights.value.find((h) => h.toastId === toast.id); + const exists = heights.value.find((h) => h.toastId === props.toast.id); heights.value = exists ? heights.value.map((h) => - h.toastId === toast.id ? { ...h, height: newHeight } : h + h.toastId === props.toast.id ? { ...h, height: newHeight } : h ) - : [{ toastId: toast.id, height: newHeight, position }, ...heights.value]; + : [ + { + toastId: props.toast.id, + height: newHeight, + position: props.toast.position ?? position, + }, + ...heights.value, + ]; }); + + // Auto-close timer (pauses on hover/interaction or while the page is hidden). useTask$(({ track, cleanup }) => { track(() => expanded.value); - track(() => interacting); - track(() => expandByDefault); - track(() => toast); - let remainingTime = track(() => duration.value); - track(() => toast.promise); - track(() => toastType); - track(() => pauseWhenPageIsHidden); + track(() => props.interacting); track(() => isDocumentHidden.value); + track(() => duration.value); + const currentToast = track(() => props.toast); + const currentType = currentToast.type; if ( - (toast.promise && toastType === "loading") || - toast.duration === Infinity || - toast.type === "loading" - ) + (currentToast.promise && currentType === "loading") || + currentToast.duration === Infinity || + currentType === "loading" + ) { return; + } + let timeoutId: ReturnType; // Pause the timer on each hover const pauseTimer = () => { if (lastCloseTimerStartTimeRef.value < closeTimerStartTimeRef.value) { // Get the elapsed time since the timer started - const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.value; - - remainingTime = remainingTime - elapsedTime; + const elapsedTime = Date.now() - closeTimerStartTimeRef.value; + remainingTime.value = remainingTime.value - elapsedTime; } - - lastCloseTimerStartTimeRef.value = new Date().getTime(); + lastCloseTimerStartTimeRef.value = Date.now(); }; const startTimer = () => { // setTimeout(, Infinity) behaves as if the delay is 0. - // As a result, the toast would be closed immediately, giving the appearance that it was never rendered. - // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout - if (remainingTime === Infinity) return; - - closeTimerStartTimeRef.value = new Date().getTime(); + if (remainingTime.value === Infinity) return; + closeTimerStartTimeRef.value = Date.now(); // Let the toast know it has started timeoutId = setTimeout(() => { - toast.onAutoClose$?.(toast); + props.toast.onAutoClose$?.(props.toast); deleteToast(); - }, remainingTime); + }, remainingTime.value); }; - if ( - expanded.value || - interacting || - (pauseWhenPageIsHidden && isDocumentHidden.value) - ) { + if (expanded.value || props.interacting || isDocumentHidden.value) { pauseTimer(); } else { startTimer(); @@ -204,35 +304,13 @@ export const Toast = component$((props) => { cleanup(() => clearTimeout(timeoutId)); }); - useTask$(({ track, cleanup }) => { - track(() => toastRef.value); - track(() => toast.id); - - if (!toastRef.value) return; - const height = toastRef.value.getBoundingClientRect().height; - - // Add toast height tot heights array after the toast is mounted - initialHeight.value = height; - heights.value = [ - { - toastId: toast.id, - height, - position: toast.position ?? "bottom-right", - }, - ...heights.value, - ]; - - cleanup(() => { - heights.value = heights.value.filter((h) => h.toastId !== toast.id); - }); - }); + // Programmatic dismissal: the Toaster marks `delete` and we animate out. useTask$(({ track }) => { - track(() => toast.delete); - track(() => deleteToast); - - if (toast.delete) { + const shouldDelete = track(() => props.toast.delete); + if (shouldDelete) { deleteToast(); + props.toast.onDismiss$?.(props.toast); } }); @@ -243,20 +321,9 @@ export const Toast = component$((props) => { }) ); - // I shoudl not use visible task but I don't found a better way to do it - useVisibleTask$(({ track }) => { - const localMount = track(() => mounted.value); - if (!localMount) { - mounted.value = true; - } - }); - return (
  • ((props) => { classes?.[toastType as keyof ToastClassnames], toast?.classes?.[toastType as keyof ToastClassnames], ]} - data-qwik-toast="" - data-styled={String(!Boolean(toast.jsx || toast.unstyled || unstyled))} + data-sonner-toast="" + data-rich-colors={String(Boolean(toast.richColors ?? defaultRichColors))} + data-styled={String(!(toast.jsx || toast.unstyled || unstyled))} data-mounted={String(mounted.value)} data-promise={String(Boolean(toast.promise))} + data-swiped={String(isSwiped.value)} data-removed={String(removed.value)} data-visible={String(isVisible)} data-y-position={y} @@ -282,9 +351,11 @@ export const Toast = component$((props) => { data-type={toastType} data-invert={String(invert.value)} data-swipe-out={String(swipeOut.value)} + data-swipe-direction={swipeOutDirection.value ?? undefined} data-expanded={String( Boolean(expanded.value || (expandByDefault && mounted.value)) )} + data-testid={toast.testId} style={{ "--index": index, "--toasts-before": index, @@ -296,62 +367,150 @@ export const Toast = component$((props) => { ...style, ...toast.style, }} - onPointerDown$={(event, target) => { - if (disabled || !dismissible) return; - dragStartTime.value = new Date(); + onDragEnd$={() => { + swiping.value = false; + swipeDirection.value = null; + pointerStartRef.value = null; + }} + onPointerDown$={(event) => { + const current = props.toast; + if (event.button === 2) return; // Return early on right click + if (current.type === "loading" || current.dismissible === false) return; + dragStartTime.value = Date.now(); offsetBeforeRemove.value = offset.value; - // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping) + // Maintain pointer capture even when going outside of the toast. (event.target as HTMLElement).setPointerCapture(event.pointerId); - if (target.tagName === "BUTTON") return; + if ((event.target as HTMLElement).tagName === "BUTTON") return; swiping.value = true; pointerStartRef.value = { x: event.clientX, y: event.clientY }; }} onPointerUp$={() => { - if (swipeOut.value || !dismissible) return; + if (swipeOut.value || props.toast.dismissible === false) return; pointerStartRef.value = null; - const swipeAmount = Number( + const swipeAmountX = Number( + toastRef.value?.style + .getPropertyValue("--swipe-amount-x") + .replace("px", "") || 0 + ); + const swipeAmountY = Number( toastRef.value?.style - .getPropertyValue("--swipe-amount") - .replace("px", "") ?? 0 + .getPropertyValue("--swipe-amount-y") + .replace("px", "") || 0 ); - const timeTaken = - new Date().getTime() - (dragStartTime.value as Date)?.getTime(); + const timeTaken = Date.now() - (dragStartTime.value ?? Date.now()); + + const swipeAmount = + swipeDirection.value === "x" ? swipeAmountX : swipeAmountY; const velocity = Math.abs(swipeAmount) / timeTaken; - // Remove only if threshold is met if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) { offsetBeforeRemove.value = offset.value; - toast.onDismiss$?.(toast); + props.toast.onDismiss$?.(props.toast); + + if (swipeDirection.value === "x") { + swipeOutDirection.value = swipeAmountX > 0 ? "right" : "left"; + } else { + swipeOutDirection.value = swipeAmountY > 0 ? "down" : "up"; + } + deleteToast(); swipeOut.value = true; return; + } else { + toastRef.value?.style.setProperty("--swipe-amount-x", "0px"); + toastRef.value?.style.setProperty("--swipe-amount-y", "0px"); } - - toastRef.value?.style.setProperty("--swipe-amount", "0px"); + isSwiped.value = false; swiping.value = false; + swipeDirection.value = null; }} onPointerMove$={(event) => { - if (!pointerStartRef.value || !dismissible) return; - - const yPosition = event.clientY - pointerStartRef.value.y; - const xPosition = event.clientX - pointerStartRef.value.x; - - const clamp = y === "top" ? Math.min : Math.max; - const clampedY = clamp(0, yPosition); - const swipeStartThreshold = event.pointerType === "touch" ? 10 : 2; - const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold; - - if (isAllowedToSwipe) { - toastRef.value?.style.setProperty("--swipe-amount", `${yPosition}px`); - } else if (Math.abs(xPosition) > swipeStartThreshold) { - // User is swiping in wrong direction so we disable swipe gesture - // for the current pointer down interaction - pointerStartRef.value = null; + if (!pointerStartRef.value || props.toast.dismissible === false) return; + + const isHighlighted = + (window.getSelection()?.toString().length ?? 0) > 0; + if (isHighlighted) return; + + const yDelta = event.clientY - pointerStartRef.value.y; + const xDelta = event.clientX - pointerStartRef.value.x; + + const swipeDirections = + props.swipeDirections ?? getDefaultSwipeDirections(props.position); + + // Determine swipe direction if not already locked + if ( + !swipeDirection.value && + (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1) + ) { + swipeDirection.value = + Math.abs(xDelta) > Math.abs(yDelta) ? "x" : "y"; + } + + const swipeAmount = { x: 0, y: 0 }; + + const getDampening = (delta: number) => { + const factor = Math.abs(delta) / 20; + return 1 / (1.5 + factor); + }; + + // Only apply swipe in the locked direction + if (swipeDirection.value === "y") { + if ( + swipeDirections.includes("top") || + swipeDirections.includes("bottom") + ) { + if ( + (swipeDirections.includes("top") && yDelta < 0) || + (swipeDirections.includes("bottom") && yDelta > 0) + ) { + swipeAmount.y = yDelta; + } else { + // Smoothly transition to dampened movement + const dampenedDelta = yDelta * getDampening(yDelta); + swipeAmount.y = + Math.abs(dampenedDelta) < Math.abs(yDelta) + ? dampenedDelta + : yDelta; + } + } + } else if (swipeDirection.value === "x") { + if ( + swipeDirections.includes("left") || + swipeDirections.includes("right") + ) { + if ( + (swipeDirections.includes("left") && xDelta < 0) || + (swipeDirections.includes("right") && xDelta > 0) + ) { + swipeAmount.x = xDelta; + } else { + // Smoothly transition to dampened movement + const dampenedDelta = xDelta * getDampening(xDelta); + swipeAmount.x = + Math.abs(dampenedDelta) < Math.abs(xDelta) + ? dampenedDelta + : xDelta; + } + } } + + if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) { + isSwiped.value = true; + } + + // Apply transform using both x and y values + toastRef.value?.style.setProperty( + "--swipe-amount-x", + `${swipeAmount.x}px` + ); + toastRef.value?.style.setProperty( + "--swipe-amount-y", + `${swipeAmount.y}px` + ); }} > - {closeButton.value && !toast.jsx ? ( + {closeButton.value && !toast.jsx && toastType !== "loading" ? ( ) : null} - {toast.jsx ?? typeof toast.title === "object" ? ( - toast.jsx ?? toast.title - ) : ( - <> - {toastType || toast.icon || toast.promise ? ( -
    - {toast.promise || (toast.type === "loading" && !toast.icon) - ? toast.icon ?? getLoadingIcon() - : null} - {toast.type !== "loading" - ? toast.icon ?? - icons?.[toastType as keyof ToastIcons] ?? - getAsset(toastType!) - : null} -
    - ) : null} + {(toastType || toast.icon || toast.promise) && + toast.icon !== null && + (iconFromIcons !== null || toast.icon) ? ( +
    + {toast.promise || (toastType === "loading" && !toast.icon) + ? toast.icon || getLoadingIcon() + : null} + {toastType !== "loading" ? icon : null} +
    + ) : null} + +
    +
    + {toast.jsx + ? toast.jsx + : typeof toast.title === "function" + ? toast.title() + : toast.title} +
    + {toast.description ? (
    -
    - {toast.title} -
    - {toast.description ? ( -
    - {toast.description} -
    - ) : null} + {typeof toast.description === "function" + ? toast.description() + : toast.description}
    - {typeof toast.cancel === "function" ? ( - toast.cancel - ) : toast.cancel && isAction(toast.cancel) ? ( - - ) : null} - {typeof toast.action === "function" ? ( - toast.action - ) : toast.action && isAction(toast.action) ? ( - - ) : null} - - )} + ) : null} +
    + + {toast.cancel && isAction(toast.cancel) ? ( + + ) : toast.cancel ? ( + toast.cancel + ) : null} + + {toast.action && isAction(toast.action) ? ( + + ) : toast.action ? ( + toast.action + ) : null}
  • ); }); diff --git a/src/lib/headless/types.ts b/src/lib/headless/types.ts index 7ab1240..490639c 100644 --- a/src/lib/headless/types.ts +++ b/src/lib/headless/types.ts @@ -1,10 +1,8 @@ import { ClassList, - Component, CSSProperties, JSXOutput, QRL, - QRLEventHandlerMulti, Signal, } from "@qwik.dev/core"; @@ -20,14 +18,35 @@ export type ToastTypes = export type PromiseT = Promise | (() => Promise); +/** + * A node, or a (possibly async) function returning a node. Functions may be + * plain (invoked during client render) or QRLs (resolved in `toast.promise`). + */ +export type PromiseTResult = + | string + | JSXOutput + | QRL<(data: Data) => JSXOutput | string | Promise> + | ((data: Data) => JSXOutput | string | Promise); + +export interface PromiseIExtendedResult extends ExternalToast { + message: string | JSXOutput; +} + +export type PromiseTExtendedResult = + | PromiseIExtendedResult + | QRL< + (data: Data) => PromiseIExtendedResult | Promise + > + | ((data: Data) => PromiseIExtendedResult | Promise); + export type PromiseExternalToast = Omit; export type PromiseData = PromiseExternalToast & { - loading?: string; - success?: string | JSXOutput | QRL<(data: ToastData) => JSXOutput | string>; - error?: string | QRL<(error: any) => JSXOutput | string> | JSXOutput; - description?: string | QRL<(data: any) => JSXOutput | string> | JSXOutput; - finally?: () => void | Promise; + loading?: string | JSXOutput; + success?: PromiseTResult | PromiseTExtendedResult; + error?: PromiseTResult | PromiseTExtendedResult; + description?: PromiseTResult; + finally?: QRL<() => void | Promise> | (() => void | Promise); }; export interface ToastClassnames { @@ -49,30 +68,37 @@ export interface ToastClassnames { } export interface ToastIcons { - success?: Component; - info?: Component; - warning?: Component; - error?: Component; - loading?: Component; + success?: JSXOutput; + info?: JSXOutput; + warning?: JSXOutput; + error?: JSXOutput; + loading?: JSXOutput; + close?: JSXOutput; } -interface Action { - label: string; +export interface Action { + label: string | JSXOutput; onClick$: QRL<(ev: PointerEvent, target: HTMLButtonElement) => any>; actionButtonStyle?: CSSProperties; + /** + * Qwik adaptation of sonner's `event.preventDefault()` behaviour: when `true` + * the toast is not dismissed after the action runs. + */ preventDefault?: boolean; } export interface ToastT { id: number | string; - title?: string | JSXOutput; + toasterId?: string; + title?: string | JSXOutput | (() => JSXOutput | string); type?: ToastTypes; - icon?: Component; + icon?: JSXOutput; jsx?: JSXOutput; + richColors?: boolean; invert?: boolean; closeButton?: boolean; dismissible?: boolean; - description?: JSXOutput | string; + description?: string | JSXOutput | (() => JSXOutput | string); duration?: number; delete?: boolean; important?: boolean; @@ -89,6 +115,7 @@ export interface ToastT { classes?: ToastClassnames; descriptionClass?: string; position?: Position; + testId?: string; } export function isAction(action: Action | JSXOutput): action is Action { @@ -105,6 +132,9 @@ export type Position = | "bottom-right" | "top-center" | "bottom-center"; + +export type SwipeDirection = "top" | "right" | "bottom" | "left"; + export interface HeightT { height: number; toastId: number | string; @@ -121,9 +151,22 @@ interface ToastOptions { duration?: number; unstyled?: boolean; classes?: ToastClassnames; + closeButtonAriaLabel?: string; + toasterId?: string; } +export type Offset = + | { + top?: string | number; + right?: string | number; + bottom?: string | number; + left?: string | number; + } + | string + | number; + export interface ToasterProps { + id?: string; invert?: Signal | boolean; theme?: "light" | "dark" | "system"; position?: Position; @@ -137,8 +180,10 @@ export interface ToasterProps { toastOptions?: ToastOptions; class?: string; style?: CSSProperties; - offset?: string | number; + offset?: Offset; + mobileOffset?: Offset; dir?: "rtl" | "ltr" | "auto"; + swipeDirections?: SwipeDirection[]; /** * @deprecated Please use the `icons` prop instead: * ```jsx @@ -147,9 +192,15 @@ export interface ToasterProps { * /> * ``` */ - loadingIcon?: Component; + loadingIcon?: JSXOutput; icons?: ToastIcons; + customAriaLabel?: string; containerAriaLabel?: string; + /** + * @deprecated In parity with sonner 2.x the timer always pauses while the + * page is hidden; this prop is accepted for backwards compatibility but no + * longer changes behaviour. + */ pauseWhenPageIsHidden?: boolean; } @@ -157,10 +208,11 @@ export interface ToastProps { toast: ToastT; toasts: ToastT[]; index: number; + swipeDirections?: SwipeDirection[]; expanded: Signal; invert: Signal | boolean; heights: Signal; - removeToast: (toast: ToastT) => void; + removeToast: QRL<(toast: ToastT) => void>; gap: number; position: Position; visibleToasts: number; @@ -174,11 +226,11 @@ export interface ToastProps { class?: string; unstyled?: boolean; descriptionClass?: string; - loadingIcon?: Component; + loadingIcon?: JSXOutput; classes?: ToastClassnames; icons?: ToastIcons; closeButtonAriaLabel?: string; - pauseWhenPageIsHidden: boolean; + defaultRichColors?: boolean; } export enum SwipeStateTypes { @@ -199,4 +251,5 @@ export type ExternalToast = Omit< "id" | "type" | "title" | "jsx" | "delete" | "promise" > & { id?: number | string; + toasterId?: string; }; diff --git a/src/lib/index.ts b/src/lib/index.ts index be44c15..3b9cf64 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,2 +1,9 @@ export { Toaster } from "./styled"; -export { toast, type ToasterProps } from "./headless/toast-wrapper"; +export { toast, useSonner, type ToasterProps } from "./headless/toast-wrapper"; +export { + type ToastT as Toast, + type ExternalToast, + type ToastClassnames, + type ToastToDismiss, + type Action, +} from "./headless/types"; diff --git a/src/lib/styled/styles.css b/src/lib/styled/styles.css index 95afae4..ae63e40 100644 --- a/src/lib/styled/styles.css +++ b/src/lib/styled/styles.css @@ -1,5 +1,5 @@ -:where(html[dir='ltr']), -:where([data-qwik-toaster][dir='ltr']) { +html[dir='ltr'], +[data-sonner-toaster][dir='ltr'] { --toast-icon-margin-start: -3px; --toast-icon-margin-end: 4px; --toast-svg-margin-start: -1px; @@ -11,8 +11,8 @@ --toast-close-button-transform: translate(-35%, -35%); } -:where(html[dir='rtl']), -:where([data-qwik-toaster][dir='rtl']) { +html[dir='rtl'], +[data-sonner-toaster][dir='rtl'] { --toast-icon-margin-start: 4px; --toast-icon-margin-end: -3px; --toast-svg-margin-start: 0px; @@ -24,7 +24,7 @@ --toast-close-button-transform: translate(35%, -35%); } -:where([data-qwik-toaster]) { +[data-sonner-toaster] { position: fixed; width: var(--width); font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, @@ -48,38 +48,43 @@ list-style: none; outline: none; z-index: 999999999; + transition: transform 400ms ease; } -:where([data-qwik-toaster][data-x-position='right']) { - right: max(var(--offset), env(safe-area-inset-right)); +@media (hover: none) and (pointer: coarse) { + [data-sonner-toaster][data-lifted='true'] { + transform: none; + } } -:where([data-qwik-toaster][data-x-position='left']) { - left: max(var(--offset), env(safe-area-inset-left)); +[data-sonner-toaster][data-x-position='right'] { + right: var(--offset-right); } -:where([data-qwik-toaster][data-x-position='center']) { +[data-sonner-toaster][data-x-position='left'] { + left: var(--offset-left); +} + +[data-sonner-toaster][data-x-position='center'] { left: 50%; transform: translateX(-50%); } -:where([data-qwik-toaster][data-y-position='top']) { - top: max(var(--offset), env(safe-area-inset-top)); +[data-sonner-toaster][data-y-position='top'] { + top: var(--offset-top); } -:where([data-qwik-toaster][data-y-position='bottom']) { - bottom: max(var(--offset), env(safe-area-inset-bottom)); +[data-sonner-toaster][data-y-position='bottom'] { + bottom: var(--offset-bottom); } -:where([data-qwik-toast]) { +[data-sonner-toast] { --y: translateY(100%); --lift-amount: calc(var(--lift) * var(--gap)); z-index: var(--z-index); position: absolute; opacity: 0; transform: var(--y); - filter: blur(0); - /* https://stackoverflow.com/questions/48124372/pointermove-event-not-working-with-touch-why-not */ touch-action: none; transition: transform 400ms, opacity 400ms, height 400ms, box-shadow 200ms; box-sizing: border-box; @@ -87,7 +92,7 @@ overflow-wrap: anywhere; } -:where([data-qwik-toast][data-styled='true']) { +[data-sonner-toast][data-styled='true'] { padding: 16px; background: var(--normal-bg); border: 1px solid var(--normal-border); @@ -101,37 +106,45 @@ gap: 6px; } -:where([data-qwik-toast]:focus-visible) { +[data-sonner-toast]:focus-visible { box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(0, 0, 0, 0.2); } -:where([data-qwik-toast][data-y-position='top']) { +[data-sonner-toast][data-y-position='top'] { top: 0; --y: translateY(-100%); --lift: 1; --lift-amount: calc(1 * var(--gap)); } -:where([data-qwik-toast][data-y-position='bottom']) { +[data-sonner-toast][data-y-position='bottom'] { bottom: 0; --y: translateY(100%); --lift: -1; --lift-amount: calc(var(--lift) * var(--gap)); } -:where([data-qwik-toast]) :where([data-description]) { +[data-sonner-toast][data-styled='true'] [data-description] { font-weight: 400; line-height: 1.4; + color: #3f3f3f; +} + +[data-rich-colors='true'][data-sonner-toast][data-styled='true'] [data-description] { color: inherit; } -:where([data-qwik-toast]) :where([data-title]) { +[data-sonner-toaster][data-sonner-theme='dark'] [data-description] { + color: hsl(0, 0%, 91%); +} + +[data-sonner-toast][data-styled='true'] [data-title] { font-weight: 500; line-height: 1.5; color: inherit; } -:where([data-qwik-toast]) :where([data-icon]) { +[data-sonner-toast][data-styled='true'] [data-icon] { display: flex; height: 16px; width: 16px; @@ -143,29 +156,29 @@ margin-right: var(--toast-icon-margin-end); } -:where([data-qwik-toast][data-promise='true']) :where([data-icon])>svg { +[data-sonner-toast][data-promise='true'] [data-icon] > svg { opacity: 0; transform: scale(0.8); transform-origin: center; - animation: qwik-fade-in 300ms ease forwards; + animation: sonner-fade-in 300ms ease forwards; } -:where([data-qwik-toast]) :where([data-icon])>* { +[data-sonner-toast][data-styled='true'] [data-icon] > * { flex-shrink: 0; } -:where([data-qwik-toast]) :where([data-icon]) svg { +[data-sonner-toast][data-styled='true'] [data-icon] svg { margin-left: var(--toast-svg-margin-start); margin-right: var(--toast-svg-margin-end); } -:where([data-qwik-toast]) :where([data-content]) { +[data-sonner-toast][data-styled='true'] [data-content] { display: flex; flex-direction: column; gap: 2px; } -[data-qwik-toast][data-styled="true"] [data-button] { +[data-sonner-toast][data-styled='true'] [data-button] { border-radius: 4px; padding-left: 8px; padding-right: 8px; @@ -176,6 +189,7 @@ margin-left: var(--toast-button-margin-start); margin-right: var(--toast-button-margin-end); border: none; + font-weight: 500; cursor: pointer; outline: none; display: flex; @@ -184,25 +198,25 @@ transition: opacity 400ms, box-shadow 200ms; } -:where([data-qwik-toast]) :where([data-button]):focus-visible { +[data-sonner-toast][data-styled='true'] [data-button]:focus-visible { box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.4); } -:where([data-qwik-toast]) :where([data-button]):first-of-type { +[data-sonner-toast][data-styled='true'] [data-button]:first-of-type { margin-left: var(--toast-button-margin-start); margin-right: var(--toast-button-margin-end); } -:where([data-qwik-toast]) :where([data-cancel]) { +[data-sonner-toast][data-styled='true'] [data-cancel] { color: var(--normal-text); background: rgba(0, 0, 0, 0.08); } -:where([data-qwik-toast][data-theme='dark']) :where([data-cancel]) { +[data-sonner-toaster][data-sonner-theme='dark'] [data-sonner-toast][data-styled='true'] [data-cancel] { background: rgba(255, 255, 255, 0.3); } -:where([data-qwik-toast]) :where([data-close-button]) { +[data-sonner-toast][data-styled='true'] [data-close-button] { position: absolute; left: var(--toast-close-button-start); right: var(--toast-close-button-end); @@ -213,9 +227,9 @@ justify-content: center; align-items: center; padding: 0; - background: var(--gray1); - color: var(--gray12); - border: 1px solid var(--gray4); + color: var(--normal-text); + background: var(--normal-bg); + border: 1px solid var(--normal-border); transform: var(--toast-close-button-transform); border-radius: 50%; cursor: pointer; @@ -223,51 +237,46 @@ transition: opacity 100ms, background 200ms, border-color 200ms; } -:where([data-qwik-toast]) :where([data-close-button]):focus-visible { +[data-sonner-toast][data-styled='true'] [data-close-button]:focus-visible { box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(0, 0, 0, 0.2); } -:where([data-qwik-toast]) :where([data-disabled='true']) { +[data-sonner-toast][data-styled='true'] [data-disabled='true'] { cursor: not-allowed; } -:where([data-qwik-toast]):hover :where([data-close-button]):hover { +[data-sonner-toast][data-styled='true']:hover [data-close-button]:hover { background: var(--gray2); border-color: var(--gray5); } -/* Leave a ghost div to avoid setting hover to false when swiping out */ -:where([data-qwik-toast][data-swiping='true'])::before { +[data-sonner-toast][data-swiping='true']::before { content: ''; position: absolute; - left: 0; - right: 0; + left: -100%; + right: -100%; height: 100%; z-index: -1; } -:where([data-qwik-toast][data-y-position='top'][data-swiping='true'])::before { - /* y 50% needed to distribute height additional height evenly */ +[data-sonner-toast][data-y-position='top'][data-swiping='true']::before { bottom: 50%; transform: scaleY(3) translateY(50%); } -:where([data-qwik-toast][data-y-position='bottom'][data-swiping='true'])::before { - /* y -50% needed to distribute height additional height evenly */ +[data-sonner-toast][data-y-position='bottom'][data-swiping='true']::before { top: 50%; transform: scaleY(3) translateY(-50%); } -/* Leave a ghost div to avoid setting hover to false when transitioning out */ -:where([data-qwik-toast][data-swiping='false'][data-removed='true'])::before { +[data-sonner-toast][data-swiping='false'][data-removed='true']::before { content: ''; position: absolute; inset: 0; transform: scaleY(2); } -/* Needed to avoid setting hover to false when inbetween toasts */ -:where([data-qwik-toast])::after { +[data-sonner-toast][data-expanded='true']::after { content: ''; position: absolute; left: 0; @@ -276,127 +285,196 @@ width: 100%; } -:where([data-qwik-toast][data-mounted='true']) { +[data-sonner-toast][data-mounted='true'] { --y: translateY(0); opacity: 1; } -:where([data-qwik-toast][data-expanded='false'][data-front='false']) { +[data-sonner-toast][data-expanded='false'][data-front='false'] { --scale: var(--toasts-before) * 0.05 + 1; --y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale))); height: var(--front-toast-height); } -:where([data-qwik-toast])>* { +[data-sonner-toast] > * { transition: opacity 400ms; } -:where([data-qwik-toast][data-expanded='false'][data-front='false'][data-styled='true'])>* { +[data-sonner-toast][data-x-position='right'] { + right: 0; +} + +[data-sonner-toast][data-x-position='left'] { + left: 0; +} + +[data-sonner-toast][data-expanded='false'][data-front='false'][data-styled='true'] > * { opacity: 0; } -:where([data-qwik-toast][data-visible='false']) { +[data-sonner-toast][data-visible='false'] { opacity: 0; pointer-events: none; } -:where([data-qwik-toast][data-mounted='true'][data-expanded='true']) { +[data-sonner-toast][data-mounted='true'][data-expanded='true'] { --y: translateY(calc(var(--lift) * var(--offset))); height: var(--initial-height); } -:where([data-qwik-toast][data-removed='true'][data-front='true'][data-swipe-out='false']) { +[data-sonner-toast][data-removed='true'][data-front='true'][data-swipe-out='false'] { --y: translateY(calc(var(--lift) * -100%)); opacity: 0; } -:where([data-qwik-toast][data-removed='true'][data-front='false'][data-swipe-out='false'][data-expanded='true']) { +[data-sonner-toast][data-removed='true'][data-front='false'][data-swipe-out='false'][data-expanded='true'] { --y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%)); opacity: 0; } -:where([data-qwik-toast][data-removed='true'][data-front='false'][data-swipe-out='false'][data-expanded='false']) { +[data-sonner-toast][data-removed='true'][data-front='false'][data-swipe-out='false'][data-expanded='false'] { --y: translateY(40%); opacity: 0; transition: transform 500ms, opacity 200ms; } -/* Bump up the height to make sure hover state doesn't get set to false */ -:where([data-qwik-toast][data-removed='true'][data-front='false'])::before { +[data-sonner-toast][data-removed='true'][data-front='false']::before { height: calc(var(--initial-height) + 20%); } -[data-qwik-toast][data-swiping='true'] { - transform: var(--y) translateY(var(--swipe-amount, 0px)); +[data-sonner-toast][data-swiping='true'] { + transform: var(--y) translateY(var(--swipe-amount-y, 0px)) translateX(var(--swipe-amount-x, 0px)); transition: none; } -[data-qwik-toast][data-swipe-out='true'][data-y-position='bottom'], -[data-qwik-toast][data-swipe-out='true'][data-y-position='top'] { - animation: swipe-out 200ms ease-out forwards; +[data-sonner-toast][data-swiped='true'] { + -webkit-user-select: none; /* Safari 3+ */ + user-select: none; +} + +[data-sonner-toast][data-swipe-out='true'][data-y-position='bottom'], +[data-sonner-toast][data-swipe-out='true'][data-y-position='top'] { + animation-duration: 200ms; + animation-timing-function: ease-out; + animation-fill-mode: forwards; +} + +[data-sonner-toast][data-swipe-out='true'][data-swipe-direction='left'] { + animation-name: swipe-out-left; +} + +[data-sonner-toast][data-swipe-out='true'][data-swipe-direction='right'] { + animation-name: swipe-out-right; +} + +[data-sonner-toast][data-swipe-out='true'][data-swipe-direction='up'] { + animation-name: swipe-out-up; +} + +[data-sonner-toast][data-swipe-out='true'][data-swipe-direction='down'] { + animation-name: swipe-out-down; +} + +@keyframes swipe-out-left { + from { + transform: var(--y) translateX(var(--swipe-amount-x)); + opacity: 1; + } + + to { + transform: var(--y) translateX(calc(var(--swipe-amount-x) - 100%)); + opacity: 0; + } +} + +@keyframes swipe-out-right { + from { + transform: var(--y) translateX(var(--swipe-amount-x)); + opacity: 1; + } + + to { + transform: var(--y) translateX(calc(var(--swipe-amount-x) + 100%)); + opacity: 0; + } } -@keyframes swipe-out { +@keyframes swipe-out-up { from { - transform: translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount))); + transform: var(--y) translateY(var(--swipe-amount-y)); opacity: 1; } to { - transform: translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%)); + transform: var(--y) translateY(calc(var(--swipe-amount-y) - 100%)); + opacity: 0; + } +} + +@keyframes swipe-out-down { + from { + transform: var(--y) translateY(var(--swipe-amount-y)); + opacity: 1; + } + + to { + transform: var(--y) translateY(calc(var(--swipe-amount-y) + 100%)); opacity: 0; } } @media (max-width: 600px) { - [data-qwik-toaster] { + [data-sonner-toaster] { position: fixed; - --mobile-offset: 16px; - right: var(--mobile-offset); - left: var(--mobile-offset); + right: var(--mobile-offset-right); + left: var(--mobile-offset-left); width: 100%; } - [data-qwik-toaster] [data-qwik-toast] { + [data-sonner-toaster][dir='rtl'] { + left: calc(var(--mobile-offset-left) * -1); + } + + [data-sonner-toaster] [data-sonner-toast] { left: 0; right: 0; - width: calc(100% - var(--mobile-offset) * 2); + width: calc(100% - var(--mobile-offset-left) * 2); } - [data-qwik-toaster][data-x-position='left'] { - left: var(--mobile-offset); + [data-sonner-toaster][data-x-position='left'] { + left: var(--mobile-offset-left); } - [data-qwik-toaster][data-y-position='bottom'] { - bottom: 20px; + [data-sonner-toaster][data-y-position='bottom'] { + bottom: var(--mobile-offset-bottom); } - [data-qwik-toaster][data-y-position='top'] { - top: 20px; + [data-sonner-toaster][data-y-position='top'] { + top: var(--mobile-offset-top); } - [data-qwik-toaster][data-x-position='center'] { - left: var(--mobile-offset); - right: var(--mobile-offset); + [data-sonner-toaster][data-x-position='center'] { + left: var(--mobile-offset-left); + right: var(--mobile-offset-right); transform: none; } } -[data-qwik-toaster][data-theme='light'] { +[data-sonner-toaster][data-sonner-theme='light'] { --normal-bg: #fff; --normal-border: var(--gray4); --normal-text: var(--gray12); --success-bg: hsl(143, 85%, 96%); - --success-border: hsl(145, 92%, 91%); + --success-border: hsl(145, 92%, 87%); --success-text: hsl(140, 100%, 27%); --info-bg: hsl(208, 100%, 97%); - --info-border: hsl(221, 91%, 91%); + --info-border: hsl(221, 91%, 93%); --info-text: hsl(210, 92%, 45%); --warning-bg: hsl(49, 100%, 97%); - --warning-border: hsl(49, 91%, 91%); + --warning-border: hsl(49, 91%, 84%); --warning-text: hsl(31, 92%, 45%); --error-bg: hsl(359, 100%, 97%); @@ -404,21 +482,23 @@ --error-text: hsl(360, 100%, 45%); } -[data-qwik-toaster][data-theme='light'] [data-qwik-toast][data-invert='true'] { +[data-sonner-toaster][data-sonner-theme='light'] [data-sonner-toast][data-invert='true'] { --normal-bg: #000; --normal-border: hsl(0, 0%, 20%); --normal-text: var(--gray1); } -[data-qwik-toaster][data-theme='dark'] [data-qwik-toast][data-invert='true'] { +[data-sonner-toaster][data-sonner-theme='dark'] [data-sonner-toast][data-invert='true'] { --normal-bg: #fff; --normal-border: var(--gray3); --normal-text: var(--gray12); } -[data-qwik-toaster][data-theme='dark'] { +[data-sonner-toaster][data-sonner-theme='dark'] { --normal-bg: #000; + --normal-bg-hover: hsl(0, 0%, 12%); --normal-border: hsl(0, 0%, 20%); + --normal-border-hover: hsl(0, 0%, 25%); --normal-text: var(--gray1); --success-bg: hsl(150, 100%, 6%); @@ -426,11 +506,11 @@ --success-text: hsl(150, 86%, 65%); --info-bg: hsl(215, 100%, 6%); - --info-border: hsl(223, 100%, 12%); + --info-border: hsl(223, 43%, 17%); --info-text: hsl(216, 87%, 65%); --warning-bg: hsl(64, 100%, 6%); - --warning-border: hsl(60, 100%, 12%); + --warning-border: hsl(60, 100%, 9%); --warning-text: hsl(46, 87%, 65%); --error-bg: hsl(358, 76%, 10%); @@ -438,55 +518,66 @@ --error-text: hsl(358, 100%, 81%); } -[data-rich-colors='true'] [data-qwik-toast][data-type='success'] { +[data-sonner-toaster][data-sonner-theme='dark'] [data-sonner-toast] [data-close-button] { + background: var(--normal-bg); + border-color: var(--normal-border); + color: var(--normal-text); +} + +[data-sonner-toaster][data-sonner-theme='dark'] [data-sonner-toast] [data-close-button]:hover { + background: var(--normal-bg-hover); + border-color: var(--normal-border-hover); +} + +[data-rich-colors='true'][data-sonner-toast][data-type='success'] { background: var(--success-bg); border-color: var(--success-border); color: var(--success-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='success'] [data-close-button] { +[data-rich-colors='true'][data-sonner-toast][data-type='success'] [data-close-button] { background: var(--success-bg); border-color: var(--success-border); color: var(--success-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='info'] { +[data-rich-colors='true'][data-sonner-toast][data-type='info'] { background: var(--info-bg); border-color: var(--info-border); color: var(--info-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='info'] [data-close-button] { +[data-rich-colors='true'][data-sonner-toast][data-type='info'] [data-close-button] { background: var(--info-bg); border-color: var(--info-border); color: var(--info-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='warning'] { +[data-rich-colors='true'][data-sonner-toast][data-type='warning'] { background: var(--warning-bg); border-color: var(--warning-border); color: var(--warning-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='warning'] [data-close-button] { +[data-rich-colors='true'][data-sonner-toast][data-type='warning'] [data-close-button] { background: var(--warning-bg); border-color: var(--warning-border); color: var(--warning-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='error'] { +[data-rich-colors='true'][data-sonner-toast][data-type='error'] { background: var(--error-bg); border-color: var(--error-border); color: var(--error-text); } -[data-rich-colors='true'] [data-qwik-toast][data-type='error'] [data-close-button] { +[data-rich-colors='true'][data-sonner-toast][data-type='error'] [data-close-button] { background: var(--error-bg); border-color: var(--error-border); color: var(--error-text); } -.qwik-loading-wrapper { +.sonner-loading-wrapper { --size: 16px; height: var(--size); width: var(--size); @@ -495,12 +586,12 @@ z-index: 10; } -.qwik-loading-wrapper[data-visible='false'] { +.sonner-loading-wrapper[data-visible='false'] { transform-origin: center; - animation: qwik-fade-out 0.2s ease forwards; + animation: sonner-fade-out 0.2s ease forwards; } -.qwik-spinner { +.sonner-spinner { position: relative; top: 50%; left: 50%; @@ -508,8 +599,8 @@ width: var(--size); } -.qwik-loading-bar { - animation: qwik-spin 1.2s linear infinite; +.sonner-loading-bar { + animation: sonner-spin 1.2s linear infinite; background: var(--gray11); border-radius: 6px; height: 8%; @@ -519,111 +610,107 @@ width: 24%; } -.qwik-loading-bar:nth-child(1) { +.sonner-loading-bar:nth-child(1) { animation-delay: -1.2s; transform: rotate(0.0001deg) translate(146%); } -.qwik-loading-bar:nth-child(2) { +.sonner-loading-bar:nth-child(2) { animation-delay: -1.1s; transform: rotate(30deg) translate(146%); } -.qwik-loading-bar:nth-child(3) { +.sonner-loading-bar:nth-child(3) { animation-delay: -1s; transform: rotate(60deg) translate(146%); } -.qwik-loading-bar:nth-child(4) { +.sonner-loading-bar:nth-child(4) { animation-delay: -0.9s; transform: rotate(90deg) translate(146%); } -.qwik-loading-bar:nth-child(5) { +.sonner-loading-bar:nth-child(5) { animation-delay: -0.8s; transform: rotate(120deg) translate(146%); } -.qwik-loading-bar:nth-child(6) { +.sonner-loading-bar:nth-child(6) { animation-delay: -0.7s; transform: rotate(150deg) translate(146%); } -.qwik-loading-bar:nth-child(7) { +.sonner-loading-bar:nth-child(7) { animation-delay: -0.6s; transform: rotate(180deg) translate(146%); } -.qwik-loading-bar:nth-child(8) { +.sonner-loading-bar:nth-child(8) { animation-delay: -0.5s; transform: rotate(210deg) translate(146%); } -.qwik-loading-bar:nth-child(9) { +.sonner-loading-bar:nth-child(9) { animation-delay: -0.4s; transform: rotate(240deg) translate(146%); } -.qwik-loading-bar:nth-child(10) { +.sonner-loading-bar:nth-child(10) { animation-delay: -0.3s; transform: rotate(270deg) translate(146%); } -.qwik-loading-bar:nth-child(11) { +.sonner-loading-bar:nth-child(11) { animation-delay: -0.2s; transform: rotate(300deg) translate(146%); } -.qwik-loading-bar:nth-child(12) { +.sonner-loading-bar:nth-child(12) { animation-delay: -0.1s; transform: rotate(330deg) translate(146%); } -@keyframes qwik-fade-in { +@keyframes sonner-fade-in { 0% { opacity: 0; transform: scale(0.8); } - 100% { opacity: 1; transform: scale(1); } } -@keyframes qwik-fade-out { +@keyframes sonner-fade-out { 0% { opacity: 1; transform: scale(1); } - 100% { opacity: 0; transform: scale(0.8); } } -@keyframes qwik-spin { +@keyframes sonner-spin { 0% { opacity: 1; } - 100% { opacity: 0.15; } } @media (prefers-reduced-motion) { - - [data-qwik-toast], - [data-qwik-toast]>*, - .qwik-loading-bar { + [data-sonner-toast], + [data-sonner-toast] > *, + .sonner-loading-bar { transition: none !important; animation: none !important; } } -.qwik-loader { +.sonner-loader { position: absolute; top: 50%; left: 50%; @@ -632,7 +719,7 @@ transition: opacity 200ms, transform 200ms; } -.qwik-loader[data-visible='false'] { +.sonner-loader[data-visible='false'] { opacity: 0; transform: scale(0.8) translate(-50%, -50%); -} \ No newline at end of file +} diff --git a/src/root.tsx b/src/root.tsx index e9110d8..b04c273 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -1,14 +1,21 @@ import { $, component$, useSignal } from "@qwik.dev/core"; import { Toaster } from "./lib/styled"; import { toast } from "./lib"; +import { useQwikRouter } from "@qwik.dev/router"; export default component$(() => { + useQwikRouter(); + const tId = useSignal(0); + /** + * This is the root of a QwikRouter site. It contains the document's `` and ``. You can adjust them as you see fit. + */ + return ( <> - + Qwik Blank App diff --git a/tsconfig.lib.json b/tsconfig.lib.json index f92f52d..593068a 100644 --- a/tsconfig.lib.json +++ b/tsconfig.lib.json @@ -4,6 +4,7 @@ "src/lib" ], "compilerOptions": { - "incremental": false + "incremental": false, + "rootDir": "src/lib" } } \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index a46fa17..9cad4b2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,6 +2,8 @@ import { defineConfig } from "vite"; import { qwikVite } from "@qwik.dev/core/optimizer"; import tsconfigPaths from "vite-tsconfig-paths"; import pkg from "./package.json"; +import tailwindcss from '@tailwindcss/vite' +import { qwikRouter } from "@qwik.dev/router/vite"; type DepMap = Record; const { dependencies = {}, peerDependencies = {} } = pkg as { @@ -42,6 +44,6 @@ export default defineConfig(() => { }, }, }, - plugins: [qwikVite(), tsconfigPaths()], + plugins: [qwikVite(), qwikRouter(), tsconfigPaths(), tailwindcss()], }; }); From 2d11c7debad9053a6f9ba082f734bff8a80e29d1 Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Tue, 16 Jun 2026 23:57:28 -0500 Subject: [PATCH 07/36] =?UTF-8?q?test:=20=E2=9C=85=20expand=20e2e=20suite?= =?UTF-8?q?=20and=20update=20test/website=20demo=20harness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Broaden the Playwright e2e coverage and the test app routes/entries, run the suite against chromium + webkit, and refresh the website demo layout. Drop the unused test dev entry and the website postcss config (tailwind v4 needs none). --- playwright.config.ts | 77 ++++++--- test/src/entry.dev.tsx | 17 -- test/src/entry.preview.tsx | 2 +- test/src/entry.ssr.tsx | 45 +++--- test/src/routes/index.tsx | 197 ++++++++++++++++++++++- test/tests/basic.spec.ts | 295 +++++++++++++++++++++++++++++----- test/vite.config.ts | 86 +++++++--- website/postcss.config.cjs | 6 - website/src/routes/layout.tsx | 16 +- website/vite.config.ts | 3 +- 10 files changed, 608 insertions(+), 136 deletions(-) delete mode 100644 test/src/entry.dev.tsx delete mode 100644 website/postcss.config.cjs diff --git a/playwright.config.ts b/playwright.config.ts index b574649..fb03cd1 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,11 +1,18 @@ -import type { PlaywrightTestConfig } from "@playwright/test"; -import { devices } from "@playwright/test"; +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); /** * See https://playwright.dev/docs/test-configuration. */ -const config: PlaywrightTestConfig = { - testDir: "./test", +export default defineConfig({ + testDir: './test', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, expect: { /** * Maximum time expect() should wait for the condition to be met. @@ -15,36 +22,60 @@ const config: PlaywrightTestConfig = { }, /* Run tests in files in parallel */ fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, + /* Retry on CI only */ retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, - reporter: "html", + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { - actionTimeout: 0, trace: "on-first-retry", baseURL: "http://localhost:5173", }, + webServer: { + command: "pnpm run dev", + cwd: "./test", + url: "http://localhost:5173", + reuseExistingServer: !process.env.CI, + }, + /* Configure projects for major browsers */ projects: [ { - name: "chromium", - use: { - ...devices["Desktop Chrome"], - }, + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, }, + + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + { - name: "webkit", - use: { - ...devices["Desktop Safari"], - }, + name: 'webkit', + use: { ...devices['Desktop Safari'] }, }, - ], - webServer: { - command: "npm run dev", - cwd: "./test", - url: "http://localhost:5173", - reuseExistingServer: !process.env.CI, - }, -}; + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, -export default config; + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { channel: 'chrome' }, + // }, + ], +}); \ No newline at end of file diff --git a/test/src/entry.dev.tsx b/test/src/entry.dev.tsx deleted file mode 100644 index dba2a86..0000000 --- a/test/src/entry.dev.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* - * WHAT IS THIS FILE? - * - * Development entry point using only client-side modules: - * - Do not use this mode in production! - * - No SSR - * - No portion of the application is pre-rendered on the server. - * - All of the application is running eagerly in the browser. - * - More code is transferred to the browser than in SSR mode. - * - Optimizer/Serialization/Deserialization code is not exercised! - */ -import { render, type RenderOptions } from "@qwik.dev/core"; -import Root from "./root"; - -export default function (opts: RenderOptions) { - return render(document, , opts); -} diff --git a/test/src/entry.preview.tsx b/test/src/entry.preview.tsx index e014339..860ecac 100644 --- a/test/src/entry.preview.tsx +++ b/test/src/entry.preview.tsx @@ -14,6 +14,6 @@ import { createQwikRouter } from "@qwik.dev/router/middleware/node"; import render from "./entry.ssr"; /** - * The default export is the Qwik Router adapter used by Vite preview. + * The default export is the QwikRouter adapter used by Vite preview. */ export default createQwikRouter({ render }); diff --git a/test/src/entry.ssr.tsx b/test/src/entry.ssr.tsx index b14cd28..2bad927 100644 --- a/test/src/entry.ssr.tsx +++ b/test/src/entry.ssr.tsx @@ -1,30 +1,31 @@ /** * WHAT IS THIS FILE? * - * SSR entry point, in all cases the application is rendered outside the browser, this - * entry point will be the common one. - * - * - Server (express, cloudflare...) - * - npm run start - * - npm run preview - * - npm run build + * SSR renderer function, used by Qwik Router. * + * Note that this is the only place the Qwik renderer is called. + * On the client, containers resume and do not call render. */ -import { - renderToStream, - type RenderToStreamOptions, -} from "@qwik.dev/core/server"; -import { manifest } from "@qwik-client-manifest"; +import { createRenderer } from "@qwik.dev/router"; import Root from "./root"; -export default function (opts: RenderToStreamOptions) { - return renderToStream(, { - manifest, - ...opts, - // Use container attributes to set attributes on the html tag. - containerAttributes: { - lang: "en-us", - ...opts.containerAttributes, +export default createRenderer((opts) => { + return { + jsx: , + options: { + ...opts, + // Use container attributes to set attributes on the html tag. + containerAttributes: { + lang: "en-us", + ...opts.containerAttributes, + }, + serverData: { + ...opts.serverData, + // These are the default values for the document head and are overridden by the `head` exports + // documentHead: { + // title: "My App", + // }, + }, }, - }); -} + }; +}); diff --git a/test/src/routes/index.tsx b/test/src/routes/index.tsx index 4a2faba..486b8d6 100644 --- a/test/src/routes/index.tsx +++ b/test/src/routes/index.tsx @@ -18,6 +18,8 @@ export default component$(() => { const isFinally = useSignal(false); const showAutoClose = useSignal(false); const showDismiss = useSignal(false); + const showAriaLabels = useSignal(false); + const unwrapError = useSignal(""); const position = (params.get("position") as any) ?? "bottom-right"; const dir = (params.get("dir") as any) ?? "auto"; @@ -109,6 +111,98 @@ export default component$(() => { > Render Promise Toast + + + + + +
    + ), + { id: undefined } + ) + } + > + Render Custom Toast with empty id + + + + + + + {showAutoClose.value ?
    : null} {showDismiss.value ?
    : null} + {unwrapError.value ? ( +
    {unwrapError.value}
    + ) : null} + ); diff --git a/test/tests/basic.spec.ts b/test/tests/basic.spec.ts index 27927be..2de14cd 100644 --- a/test/tests/basic.spec.ts +++ b/test/tests/basic.spec.ts @@ -9,8 +9,8 @@ test.describe("Basic functionality", () => { page, }) => { await page.getByTestId("default-button").click(); - await expect(page.locator("[data-qwik-toast]")).toHaveCount(1); - await expect(page.locator("[data-qwik-toast]")).toHaveCount(0); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(1); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(0); }); test("various toast types are rendered correctly", async ({ page }) => { @@ -36,23 +36,90 @@ test.describe("Basic functionality", () => { await expect(page.getByText("Loaded")).toHaveCount(1); }); + // Upstream (`sonner`) runs `toast.promise(...).unwrap()` directly in the Node + // test context. Here `qwik-sonner` resolves to a Qwik prod bundle + // (`lib/index.qwik.mjs`) that can't be imported into Playwright's Node runner, + // so the same scenario is exercised in the browser: the page awaits + // `.unwrap()` and surfaces the rejection into `[data-testid="unwrap-error"]`. + test("handle toast promise rejections", async ({ page }) => { + await page.getByTestId("unwrap-reject").click(); + await expect(page.getByTestId("unwrap-error")).toHaveText( + "Promise rejected" + ); + }); + + test("promise toast with extended configuration", async ({ page }) => { + await page.getByTestId("extended-promise").click(); + + // Check loading state + await expect(page.getByText("Loading...")).toHaveCount(1); + + // Check success state with custom message and description + await expect(page.getByText("Sonner toast has been added")).toHaveCount(1); + await expect( + page.getByText("Custom description for the Success state") + ).toHaveCount(1); + + // Verify global description is not shown (overridden by success description) + await expect(page.getByText("Global description")).toHaveCount(0); + }); + + test("promise toast with extended error configuration", async ({ page }) => { + await page.getByTestId("extended-promise-error").click(); + + // Check loading state + await expect(page.getByText("Loading...")).toHaveCount(1); + + // Check error state + await expect(page.getByText("An error occurred")).toHaveCount(1); + + // Verify action button is present + const actionButton = page.getByText("Retry"); + await expect(actionButton).toHaveCount(1); + + // Click retry button and verify it doesn't close the toast (due to preventDefault) + await actionButton.click(); + await expect(page.getByText("An error occurred")).toHaveCount(1); + }); + + test("promise toast with Error object rejection", async ({ page }) => { + await page.getByTestId("error-promise").click(); + + // Check error state shows the error message correctly + await expect( + page.getByText("Error Raise: Error: Not implemented") + ).toHaveCount(1); + }); + test("render custom jsx in toast", async ({ page }) => { await page.getByTestId("custom").click(); await expect(page.getByText("jsx")).toHaveCount(1); }); + // Upstream uses `mouse.move(0, 800)`. With multi-direction swipe, that path is + // dominated by the leftward delta on a bottom-right toast, so the gesture locks + // to the (disallowed) horizontal axis and gets damped instead of dismissing. + // An axis-aligned vertical drag (the same style as upstream's own + // dismiss-callback test) expresses the intended gesture and dismisses. test("toast is removed after swiping down", async ({ page }) => { await page.getByTestId("default-button").click(); - await page.hover("[data-qwik-toast]"); + const toast = page.locator("[data-sonner-toast]"); + await toast.waitFor({ state: "visible" }); + const box = await toast.boundingBox(); + if (!box) return; + const startX = box.x + box.width / 2; + const startY = box.y + box.height / 2; + await page.mouse.move(startX, startY); await page.mouse.down(); - await page.mouse.move(0, 800); + await page.mouse.move(startX, startY + 20, { steps: 5 }); + await page.mouse.move(startX, startY + 300, { steps: 10 }); await page.mouse.up(); - await expect(page.locator("[data-qwik-toast]")).toHaveCount(0); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(0); }); test("dismissible toast is not removed when dragged", async ({ page }) => { await page.getByTestId("non-dismissible-toast").click(); - const toast = page.locator("[data-qwik-toast]"); + const toast = page.locator("[data-sonner-toast]"); const dragBoundingBox = await toast.boundingBox(); if (!dragBoundingBox) return; @@ -68,32 +135,60 @@ test.describe("Basic functionality", () => { await expect(page.getByTestId("non-dismissible-toast")).toHaveCount(1); }); + // See the swipe-down note above: axis-aligned vertical drag toward the top. test("toast is removed after swiping up", async ({ page }) => { await page.goto("/?position=top-left"); await page.getByTestId("default-button").click(); - await page.hover("[data-qwik-toast]"); + const toast = page.locator("[data-sonner-toast]"); + await toast.waitFor({ state: "visible" }); + const box = await toast.boundingBox(); + if (!box) return; + const startX = box.x + box.width / 2; + const startY = box.y + box.height / 2; + await page.mouse.move(startX, startY); await page.mouse.down(); - await page.mouse.move(0, -800); + await page.mouse.move(startX, startY - 20, { steps: 5 }); + await page.mouse.move(startX, startY - 300, { steps: 10 }); await page.mouse.up(); - await expect(page.locator("[data-qwik-toast]")).toHaveCount(0); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(0); }); test("toast is not removed when hovered", async ({ page }) => { await page.getByTestId("default-button").click(); - await page.hover("[data-qwik-toast]"); - const timeout = new Promise((resolve) => setTimeout(resolve, 5000)); - await timeout; - await expect(page.locator("[data-qwik-toast]")).toHaveCount(1); + + // Wait for toast to be visible first + await expect(page.locator("[data-sonner-toast]")).toBeVisible(); + + // Hover the toast + await page.hover("[data-sonner-toast]"); + + // Wait a bit to ensure hover is registered + await page.waitForTimeout(100); + + // Create a longer timeout to verify toast persists + await page.waitForTimeout(5000); + + // Verify toast is still visible + await expect(page.locator("[data-sonner-toast]")).toBeVisible(); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(1); }); test("toast is not removed if duration is set to infinity", async ({ page, }) => { await page.getByTestId("infinity-toast").click(); - await page.hover("[data-qwik-toast]"); - const timeout = new Promise((resolve) => setTimeout(resolve, 5000)); - await timeout; - await expect(page.locator("[data-qwik-toast]")).toHaveCount(1); + + await expect(page.locator("[data-sonner-toast]")).toBeVisible(); + + const toast = page.locator("[data-sonner-toast]"); + await toast.hover({ force: true }); + + await page.waitForTimeout(100); + + await page.waitForTimeout(5000); + + await expect(toast).toBeVisible(); + await expect(toast).toHaveCount(1); }); test("toast is not removed when event prevented in action", async ({ @@ -101,7 +196,7 @@ test.describe("Basic functionality", () => { }) => { await page.getByTestId("action-prevent").click(); await page.locator("[data-button]").click(); - await expect(page.locator("[data-qwik-toast]")).toHaveCount(1); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(1); }); test("toast's auto close callback gets executed correctly", async ({ @@ -113,26 +208,33 @@ test.describe("Basic functionality", () => { test("toast's dismiss callback gets executed correctly", async ({ page }) => { await page.getByTestId("dismiss-toast-callback").click(); - const toast = page.locator("[data-qwik-toast]"); - const dragBoundingBox = await toast.boundingBox(); + const toast = page.locator("[data-sonner-toast]"); - if (!dragBoundingBox) return; - await page.mouse.move( - dragBoundingBox.x + dragBoundingBox.width / 2, - dragBoundingBox.y - ); + await toast.waitFor({ state: "visible" }); + + const box = await toast.boundingBox(); + if (!box) return; + + const startX = box.x + box.width / 2; + const startY = box.y + box.height / 2; + await page.mouse.move(startX, startY); await page.mouse.down(); - await page.mouse.move(0, dragBoundingBox.y + 300); + // Small initial movement to trigger drag + await page.mouse.move(startX, startY + 20, { steps: 5 }); + + // Main swipe movement + await page.mouse.move(startX, startY + 300, { steps: 10 }); await page.mouse.up(); + await expect(page.getByTestId("dismiss-el")).toHaveCount(1); }); test("toaster's theme should be light", async ({ page }) => { await page.getByTestId("infinity-toast").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( - "data-theme", + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( + "data-sonner-theme", "light" ); }); @@ -140,29 +242,39 @@ test.describe("Basic functionality", () => { test("toaster's theme should be dark", async ({ page }) => { await page.goto("/?theme=dark"); await page.getByTestId("infinity-toast").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( - "data-theme", + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( + "data-sonner-theme", "dark" ); }); test("toaster's theme should be changed", async ({ page }) => { await page.getByTestId("infinity-toast").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( - "data-theme", + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( + "data-sonner-theme", "light" ); await page.getByTestId("theme-button").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( - "data-theme", + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( + "data-sonner-theme", "dark" ); }); + test("return focus to the previous focused element", async ({ page }) => { + await page.getByTestId("custom").focus(); + await page.keyboard.press("Enter"); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(1); + await page.getByTestId("dismiss-button").focus(); + await page.keyboard.press("Enter"); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(0); + await expect(page.getByTestId("custom")).toBeFocused(); + }); + test("toaster's dir prop is reflected correctly", async ({ page }) => { await page.goto("/?dir=rtl"); await page.getByTestId("default-button").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( "dir", "rtl" ); @@ -173,7 +285,7 @@ test.describe("Basic functionality", () => { document.documentElement.setAttribute("dir", "rtl"); }); await page.getByTestId("default-button").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( "dir", "rtl" ); @@ -187,7 +299,7 @@ test.describe("Basic functionality", () => { document.documentElement.setAttribute("dir", "rtl"); }); await page.getByTestId("default-button").click(); - await expect(page.locator("[data-qwik-toaster]")).toHaveAttribute( + await expect(page.locator("[data-sonner-toaster]")).toHaveAttribute( "dir", "ltr" ); @@ -199,6 +311,28 @@ test.describe("Basic functionality", () => { await expect(page.getByText("My Updated Toast")).toHaveCount(1); }); + test("should update toast content and duration after 3 seconds", async ({ + page, + }) => { + await page.getByTestId("update-toast-duration").click(); + + const initialToast = page.getByText( + "My Unupdated Toast, Updated After 3 Seconds" + ); + await expect(initialToast).toBeVisible(); + + await page.waitForTimeout(3000); + const updatedToast = page.getByText( + "My Updated Toast, Close After 1 Second" + ); + await expect(updatedToast).toBeVisible(); + + await expect(initialToast).not.toBeVisible(); + + await page.waitForTimeout(1200); + await expect(updatedToast).not.toBeVisible(); + }); + test("cancel button is rendered with custom styles", async ({ page }) => { await page.getByTestId("custom-cancel-button-toast").click(); const button = await page.locator("[data-cancel]"); @@ -206,6 +340,16 @@ test.describe("Basic functionality", () => { await expect(button).toHaveCSS("background-color", "rgb(254, 226, 226)"); }); + test("cancel button dismisses the custom toast with empty id", async ({ + page, + }) => { + await page.getByTestId("custom-with-empty-id").click(); + + await expect(page.locator("[data-sonner-toast]")).toHaveCount(1); + await page.locator("[data-dismiss]").click(); + await expect(page.locator("[data-sonner-toast]")).toHaveCount(0); + }); + test("action button is rendered with custom styles", async ({ page }) => { await page.getByTestId("action").click(); const button = await page.locator("[data-button]"); @@ -224,4 +368,81 @@ test.describe("Basic functionality", () => { page.getByText("This is my custom ReactNode description") ).toHaveCount(1); }); + + test("aria labels are custom", async ({ page }) => { + await page.getByRole("button", { name: "With custom ARIA labels" }).click(); + await expect(page.getByText("Toast with custom ARIA labels")).toHaveCount( + 1 + ); + await expect(page.getByLabel("Notices")).toHaveCount(1); + await expect( + page.getByLabel("Yeet the notice", { exact: true }) + ).toHaveCount(1); + }); + + test("toast with toasterId only appears in the correct Toaster", async ({ + page, + }) => { + await page.getByTestId("toast-secondary").click(); + const secondaryToaster = page.locator( + '[data-sonner-toaster][data-x-position="left"][data-y-position="top"]' + ); + await expect( + secondaryToaster.getByText("Secondary Toaster Toast") + ).toHaveCount(1); + const globalToaster = page.locator( + '[data-sonner-toaster][data-x-position="right"][data-y-position="bottom"]' + ); + await expect( + globalToaster.getByText("Secondary Toaster Toast") + ).toHaveCount(0); + }); + + test("toast without toasterId only appears in the global Toaster", async ({ + page, + }) => { + await page.getByTestId("toast-global").click(); + const globalToaster = page.locator( + '[data-sonner-toaster][data-x-position="right"][data-y-position="bottom"]' + ); + await expect(globalToaster.getByText("Global Toaster Toast")).toHaveCount( + 1 + ); + const secondaryToaster = page.locator( + '[data-sonner-toaster][data-x-position="left"][data-y-position="top"]' + ); + await expect( + secondaryToaster.getByText("Global Toaster Toast") + ).toHaveCount(0); + }); + + test("toast with testId renders data-testid attribute correctly", async ({ + page, + }) => { + await page.getByTestId("testid-toast-button").click(); + await expect(page.getByTestId("my-test-toast")).toBeVisible(); + await expect(page.getByTestId("my-test-toast")).toHaveText( + "Toast with test ID" + ); + }); + + test("toast without testId does not have data-testid attribute", async ({ + page, + }) => { + await page.getByTestId("default-button").click(); + const toast = page.locator("[data-sonner-toast]"); + await expect(toast).toBeVisible(); + await expect(toast).not.toHaveAttribute("data-testid"); + }); + + test("promise toast with testId maintains testId through state changes", async ({ + page, + }) => { + await page.getByTestId("testid-promise-toast-button").click(); + await expect(page.getByTestId("promise-test-toast")).toBeVisible(); + await expect(page.getByTestId("promise-test-toast")).toHaveText( + "Loading..." + ); + await expect(page.getByTestId("promise-test-toast")).toHaveText("Loaded"); + }); }); diff --git a/test/vite.config.ts b/test/vite.config.ts index a746580..5c4267d 100644 --- a/test/vite.config.ts +++ b/test/vite.config.ts @@ -2,44 +2,50 @@ * This is the base config for vite. * When building, the adapter config is used which loads this file and extends it. */ -import { defineConfig, type UserConfig } from "vite"; import { qwikVite } from "@qwik.dev/core/optimizer"; import { qwikRouter } from "@qwik.dev/router/vite"; +import { defineConfig, type UserConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; import pkg from "./package.json"; +type PkgDep = Record; const { dependencies = {}, devDependencies = {} } = pkg as any as { - dependencies: Record; - devDependencies: Record; + dependencies: PkgDep; + devDependencies: PkgDep; [key: string]: unknown; }; +errorOnDuplicatesPkgDeps(devDependencies, dependencies); /** * Note that Vite normally starts from `index.html` but the qwikRouter plugin makes start at `src/entry.ssr.tsx` instead. */ export default defineConfig(({ command, mode }): UserConfig => { return { - plugins: [qwikRouter(), qwikVite(), tsconfigPaths()], + plugins: [qwikRouter(), qwikVite(), tsconfigPaths({ root: "." })], // This tells Vite which dependencies to pre-build in dev mode. optimizeDeps: { // Put problematic deps that break bundling here, mostly those with binaries. // For example ['better-sqlite3'] if you use that in server functions. exclude: [], }, - // This tells Vite how to bundle the server code. - ssr: - command === "build" && mode === "production" - ? { - // All dev dependencies should be bundled in the server build - noExternal: Object.keys(devDependencies), - // Anything marked as a dependency will not be bundled - // These should only be production binary deps (including deps of deps), CLI deps, and their module graph - // If a dep-of-dep needs to be external, add it here - // For example, if something uses `bcrypt` but you don't have it as a dep, you can write - // external: [...Object.keys(dependencies), 'bcrypt'] - external: Object.keys(dependencies), - } - : undefined, + + /** + * This is an advanced setting. It improves the bundling of your server code. To use it, make sure you understand when your consumed packages are dependencies or dev dependencies. (otherwise things will break in production) + */ + // ssr: + // command === "build" && mode === "production" + // ? { + // // All dev dependencies should be bundled in the server build + // noExternal: Object.keys(devDependencies), + // // Anything marked as a dependency will not be bundled + // // These should only be production binary deps (including deps of deps), CLI deps, and their module graph + // // If a dep-of-dep needs to be external, add it here + // // For example, if something uses `bcrypt` but you don't have it as a dep, you can write + // // external: [...Object.keys(dependencies), 'bcrypt'] + // external: Object.keys(dependencies), + // } + // : undefined, + server: { headers: { // Don't cache the server response in dev mode @@ -54,3 +60,47 @@ export default defineConfig(({ command, mode }): UserConfig => { }, }; }); + +// *** utils *** + +/** + * Function to identify duplicate dependencies and throw an error + * @param {Object} devDependencies - List of development dependencies + * @param {Object} dependencies - List of production dependencies + */ +function errorOnDuplicatesPkgDeps( + devDependencies: PkgDep, + dependencies: PkgDep, +) { + let msg = ""; + // Create an array 'duplicateDeps' by filtering devDependencies. + // If a dependency also exists in dependencies, it is considered a duplicate. + const duplicateDeps = Object.keys(devDependencies).filter( + (dep) => dependencies[dep], + ); + + // include any known qwik packages + const qwikPkg = Object.keys(dependencies).filter((value) => + /qwik/i.test(value), + ); + + // any errors for missing "qwik-router-config" + // [PLUGIN_ERROR]: Invalid module "@qwik-router-config" is not a valid package + msg = `Move qwik packages ${qwikPkg.join(", ")} to devDependencies`; + + if (qwikPkg.length > 0) { + throw new Error(msg); + } + + // Format the error message with the duplicates list. + // The `join` function is used to represent the elements of the 'duplicateDeps' array as a comma-separated string. + msg = ` + Warning: The dependency "${duplicateDeps.join(", ")}" is listed in both "devDependencies" and "dependencies". + Please move the duplicated dependencies to "devDependencies" only and remove it from "dependencies" + `; + + // Throw an error with the constructed message. + if (duplicateDeps.length > 0) { + throw new Error(msg); + } +} diff --git a/website/postcss.config.cjs b/website/postcss.config.cjs deleted file mode 100644 index 33ad091..0000000 --- a/website/postcss.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/website/src/routes/layout.tsx b/website/src/routes/layout.tsx index 60145c4..52a9672 100644 --- a/website/src/routes/layout.tsx +++ b/website/src/routes/layout.tsx @@ -4,16 +4,12 @@ import type { RequestHandler } from "@qwik.dev/router"; import styles from "./styles.css?inline"; -export const onGet: RequestHandler = async ({ - cacheControl, - url, - redirect, -}) => { - const { host } = url; - - if (host === "qwik-sonner.deno.dev" || host === "localhost:5173") { - throw redirect(301, "https://qwik-sonner.dieco.dev"); - } +export const onGet: RequestHandler = async ({ cacheControl }) => { + // To redirect based on host, also destructure `url` and `redirect` from the args: + // const { host } = url; + // if (host === "qwik-sonner.deno.dev" || host === "localhost:5173") { + // throw redirect(301, "https://qwik-sonner.dieco.dev"); + // } cacheControl({ staleWhileRevalidate: 60 * 60 * 24 * 7, diff --git a/website/vite.config.ts b/website/vite.config.ts index 8393b03..89bcc9e 100644 --- a/website/vite.config.ts +++ b/website/vite.config.ts @@ -2,10 +2,11 @@ import { defineConfig, type UserConfig } from "vite"; import { qwikVite } from "@qwik.dev/core/optimizer"; import { qwikRouter } from "@qwik.dev/router/vite"; import tsconfigPaths from "vite-tsconfig-paths"; +import tailwindcss from '@tailwindcss/vite' export default defineConfig((): UserConfig => { return { - plugins: [qwikRouter(), qwikVite(), tsconfigPaths()], + plugins: [qwikRouter(), qwikVite(), tsconfigPaths(), tailwindcss()], server: { headers: { "Cache-Control": "public, max-age=0", From 2218e793b019ff1b96d52a5df81e95f99e17ab9f Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Tue, 16 Jun 2026 23:57:44 -0500 Subject: [PATCH 08/36] =?UTF-8?q?build:=20=F0=9F=94=A7=20pnpm=20catalogs,?= =?UTF-8?q?=20migrate=20to=20oxlint/oxfmt,=20pin=20Vite=207?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adopt a pnpm catalog for shared dependency versions across all workspaces. - Replace ESLint + Prettier with oxlint + oxfmt. eslint-plugin-qwik is loaded via oxlint's jsPlugins (.oxlintrc.json); the two type-aware Qwik rules (valid-lexical-scope, use-async-top) can't run under the JS-plugin runtime and are omitted. Remove all eslint/prettier configs and their tsconfig references, and point the VS Code extension recommendation at oxc. - Pin vite to ^7 in the catalog. Vite 8 switches to Rolldown, under which the Qwik optimizer fails to register internal runtime QRL symbols (_run/_task) in production builds, throwing Q14 (qrlMissingChunk) during prod SSR. Vite 7 (Rollup) builds clean; verified pnpm preview renders with 0 errors. - Track remaining follow-ups in todos.md. --- .eslintignore | 31 - .eslintrc.cjs | 40 - .oxfmtrc.json | 4 + .oxlintrc.json | 22 + .prettierignore | 6 - .vscode/extensions.json | 3 +- AGENTS.md | 17 +- package.json | 38 +- pnpm-lock.yaml | 5437 ++++++++++++++++----------------------- pnpm-workspace.yaml | 12 + test/.eslintignore | 38 - test/.eslintrc.cjs | 42 - test/.oxfmtrc.json | 4 + test/.oxlintrc.json | 7 + test/.prettierignore | 37 - test/package.json | 31 +- test/tsconfig.json | 1 - todos.md | 137 + website/.eslintignore | 38 - website/.eslintrc.cjs | 42 - website/.oxfmtrc.json | 4 + website/.oxlintrc.json | 7 + website/.prettierignore | 37 - website/.prettierrc.js | 3 - website/package.json | 38 +- website/tsconfig.json | 1 - 26 files changed, 2461 insertions(+), 3616 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs create mode 100644 .oxfmtrc.json create mode 100644 .oxlintrc.json delete mode 100644 .prettierignore delete mode 100644 test/.eslintignore delete mode 100644 test/.eslintrc.cjs create mode 100644 test/.oxfmtrc.json create mode 100644 test/.oxlintrc.json delete mode 100644 test/.prettierignore create mode 100644 todos.md delete mode 100644 website/.eslintignore delete mode 100644 website/.eslintrc.cjs create mode 100644 website/.oxfmtrc.json create mode 100644 website/.oxlintrc.json delete mode 100644 website/.prettierignore delete mode 100644 website/.prettierrc.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 039dbd2..0000000 --- a/.eslintignore +++ /dev/null @@ -1,31 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 32abdc8..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:qwik/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - ecmaVersion: 2021, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ["@typescript-eslint"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "prefer-spread": "off", - "no-case-declarations": "off", - "no-console": "off", - "@typescript-eslint/no-unused-vars": ["error"], - }, -}; diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..55c15df --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "ignorePatterns": [] +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..18c14d7 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,22 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "oxc"], + "jsPlugins": ["eslint-plugin-qwik"], + "rules": { + "no-unused-vars": "error", + "qwik/use-method-usage": "error", + "qwik/no-react-props": "error", + "qwik/unused-server": "error", + "qwik/serializer-signal-usage": "error", + "qwik/scope-use-task": "error", + "qwik/loader-location": "warn", + "qwik/prefer-classlist": "warn", + "qwik/jsx-no-script-url": "warn", + "qwik/jsx-key": "warn", + "qwik/jsx-img": "warn", + "qwik/jsx-a": "warn", + "qwik/no-use-visible-task": "warn", + "qwik/no-async-prevent-default": "warn", + "qwik/no-await-navigate-in-use-task": "warn" + } +} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 1592248..0000000 --- a/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -# Files Prettier should not format -**/*.log -**/.DS_Store -*. -dist -node_modules diff --git a/.vscode/extensions.json b/.vscode/extensions.json index f2b5a14..c70dc8a 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,6 @@ { "recommendations": [ - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint", + "oxc.oxc-vscode", "seatonjiang.gitmoji-vscode", "vivaxy.vscode-conventional-commits", ] diff --git a/AGENTS.md b/AGENTS.md index 69946f0..04cc04d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -48,7 +48,13 @@ The codebase was migrated from Qwik 1.x to **Qwik 2.0 beta** (`@qwik.dev/core` / `manifest` where applicable). Don't add a `qwikRouterConfig` option back. - **`isSignal(x)` takes no type argument** in v2 (was `isSignal(x)` in v1). - **`tsconfig` uses `moduleResolution: "bundler"`** and `jsxImportSource: "@qwik.dev/core"`. -- **Vite is v8** (peer range `>=6 <9`; Vite 8 uses Rolldown). Don't downgrade below 6. +- **Vite is pinned to v7** (Qwik's peer range is `>=6 <9`, so v8 installs, but **do not use it**). + Vite 8 switches the bundler to **Rolldown**, and under Rolldown the Qwik optimizer fails to + register its internal runtime QRL symbols (`_run`, `_task`) in the **production** build. The + result is `QWIK ERROR Code(Q14)` (`qrlMissingChunk`) during production SSR for *every* event + handler that captures lexical scope — i.e. `pnpm preview` and any real deploy throw, while + `pnpm dev` works (dev has a `_`-symbol fallback). e2e tests also pass because Playwright runs + against `pnpm dev`. **Keep `vite` on `^7` in the catalog** until Qwik v2 fixes Rolldown support. When in doubt about a v2 API, check the installed type defs under `node_modules/.pnpm/@qwik.dev+*/node_modules/@qwik.dev/{core,router}/**/*.d.ts` — they are @@ -94,8 +100,8 @@ pnpm install # install all workspaces (build scripts for esbuild/sh # Library (root) pnpm build.types # tsc --emitDeclarationOnly -> lib-types/ (typecheck) pnpm build.lib # single-pass vite lib build -> lib/ (styled + headless, ESM-only, shared chunk) -pnpm lint # eslint src -pnpm fmt # prettier --write +pnpm lint # oxlint src (loads eslint-plugin-qwik via jsPlugins) +pnpm fmt # oxfmt # Website (cd website) pnpm build.types # tsc --noEmit (typecheck) @@ -126,7 +132,10 @@ pass at the root, and `pnpm build.types` passes in `website/` and `test/`. - **Package manager: pnpm only** (workspace protocol `workspace:*` links the site/test to the lib). - TypeScript is `strict`. Keep it green; don't add `any` to silence errors — fix the type. -- Formatting is Prettier; linting is ESLint + `eslint-plugin-qwik`. Run `pnpm fmt` before finishing. +- Formatting is **oxfmt**; linting is **oxlint**, which loads `eslint-plugin-qwik` through oxlint's + `jsPlugins` (see `.oxlintrc.json`). Run `pnpm fmt` before finishing. Note: oxlint's JS-plugin + runtime has no type information, so the type-aware Qwik rules `valid-lexical-scope` and + `use-async-top` are intentionally omitted — TypeScript `strict` still covers types. - Don't edit anything in `lib/`, `lib-types/`, `dist/`, or `tmp/` — they are build output. - Keep `package.json#exports` intact (both `.` and `./headless`); breaking it breaks consumers. - This is a published package — call out any change that affects the public API or build output. diff --git a/package.json b/package.json index fef32fe..c03149f 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ } }, "engines": { - "node": "22.x" + "node": ">=22.x" }, "private": false, "type": "module", @@ -54,32 +54,32 @@ "build.types": "tsc --emitDeclarationOnly -p tsconfig.lib.json", "dev": "vite --mode ssr", "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", - "fmt": "prettier --write .", - "fmt.check": "prettier --check .", - "lint": "eslint \"src/**/*.ts*\"", + "fmt": "oxfmt", + "fmt.check": "oxfmt --check", + "lint": "oxlint src", "release": "bumpp --commit --tag --push", "prepublishOnly": "pnpm run build.types && pnpm run build.lib", "start": "vite --open --mode ssr", "test": "playwright test", + "test:ui": "playwright test --ui", "qwik": "qwik" }, "peerDependencies": { "@qwik.dev/core": "^2.0.0-beta.37" }, "devDependencies": { - "@qwik.dev/core": "2.0.0-beta.37", - "@playwright/test": "^1.38.1", - "@types/eslint": "^8.56.10", - "@types/node": "^20.12.7", - "@typescript-eslint/eslint-plugin": "^7.7.1", - "@typescript-eslint/parser": "^7.7.1", - "bumpp": "9.4.0", - "eslint-plugin-qwik": "2.0.0-beta.37", - "eslint": "^8.57.0", - "prettier": "^3.2.5", - "typescript": "5.4.5", - "undici": "*", - "vite": "^8.0.16", - "vite-tsconfig-paths": "^6.1.1" + "@tailwindcss/vite": "catalog:", + "@playwright/test": "^1.61.0", + "@qwik.dev/core": "catalog:", + "@qwik.dev/router": "catalog:", + "@types/node": "catalog:", + "bumpp": "11.1.0", + "eslint-plugin-qwik": "catalog:", + "oxlint": "catalog:", + "oxfmt": "catalog:", + "typescript": "catalog:", + "undici": "catalog:", + "vite": "catalog:", + "vite-tsconfig-paths": "catalog:" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4b452c..f64473b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,183 +4,178 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + '@qwik.dev/core': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37 + '@qwik.dev/router': + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37 + '@tailwindcss/vite': + specifier: ^4.3.1 + version: 4.3.1 + '@types/node': + specifier: ^25.9.3 + version: 25.9.3 + eslint-plugin-qwik: + specifier: 2.0.0-beta.37 + version: 2.0.0-beta.37 + oxfmt: + specifier: ^0.55.0 + version: 0.55.0 + oxlint: + specifier: ^1.70.0 + version: 1.70.0 + typescript: + specifier: 6.0.3 + version: 6.0.3 + undici: + specifier: ^8.5.0 + version: 8.5.0 + vite: + specifier: ^7.3.5 + version: 7.3.5 + vite-tsconfig-paths: + specifier: ^6.1.1 + version: 6.1.1 + importers: .: devDependencies: '@playwright/test': - specifier: ^1.38.1 - version: 1.43.1 + specifier: ^1.61.0 + version: 1.61.0 '@qwik.dev/core': - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - '@types/eslint': - specifier: ^8.56.10 - version: 8.56.10 + specifier: 'catalog:' + version: 2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) + '@qwik.dev/router': + specifier: 'catalog:' + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) + '@tailwindcss/vite': + specifier: 'catalog:' + version: 4.3.1(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) '@types/node': - specifier: ^20.12.7 - version: 20.12.8 - '@typescript-eslint/eslint-plugin': - specifier: ^7.7.1 - version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: ^7.7.1 - version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) + specifier: 'catalog:' + version: 25.9.3 bumpp: - specifier: 9.4.0 - version: 9.4.0 - eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: 11.1.0 + version: 11.1.0 eslint-plugin-qwik: - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.5) - prettier: - specifier: ^3.2.5 - version: 3.2.5 + specifier: 'catalog:' + version: 2.0.0-beta.37(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + oxfmt: + specifier: 'catalog:' + version: 0.55.0 + oxlint: + specifier: 'catalog:' + version: 1.70.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 'catalog:' + version: 6.0.3 undici: - specifier: '*' - version: 6.10.2 + specifier: 'catalog:' + version: 8.5.0 vite: - specifier: ^8.0.16 - version: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + specifier: 'catalog:' + version: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) vite-tsconfig-paths: - specifier: ^6.1.1 - version: 6.1.1(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) + specifier: 'catalog:' + version: 6.1.1(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) test: devDependencies: '@qwik.dev/core': - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) + specifier: 'catalog:' + version: 2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) '@qwik.dev/router': - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - '@types/eslint': - specifier: ^8.56.10 - version: 8.56.10 + specifier: 'catalog:' + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) '@types/node': - specifier: ^20.12.7 - version: 20.12.8 - '@typescript-eslint/eslint-plugin': - specifier: ^7.7.1 - version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: ^7.7.1 - version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) - eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: 'catalog:' + version: 25.9.3 eslint-plugin-qwik: - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.5) - prettier: - specifier: ^3.2.5 - version: 3.2.5 + specifier: 'catalog:' + version: 2.0.0-beta.37(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + oxfmt: + specifier: 'catalog:' + version: 0.55.0 + oxlint: + specifier: 'catalog:' + version: 1.70.0 qwik-sonner: specifier: workspace:* version: link:.. typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 'catalog:' + version: 6.0.3 undici: - specifier: '*' - version: 6.10.2 + specifier: 'catalog:' + version: 8.5.0 vite: - specifier: ^8.0.16 - version: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + specifier: 'catalog:' + version: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) vite-tsconfig-paths: - specifier: ^6.1.1 - version: 6.1.1(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) + specifier: 'catalog:' + version: 6.1.1(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) website: devDependencies: '@qwik.dev/core': - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) + specifier: 'catalog:' + version: 2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) '@qwik.dev/router': - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - '@types/eslint': - specifier: 8.56.1 - version: 8.56.1 + specifier: 'catalog:' + version: 2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) + '@tailwindcss/vite': + specifier: 'catalog:' + version: 4.3.1(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) '@types/node': - specifier: 20.12.2 - version: 20.12.2 - '@typescript-eslint/eslint-plugin': - specifier: 7.5.0 - version: 7.5.0(@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.3))(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/parser': - specifier: 7.5.0 - version: 7.5.0(eslint@8.57.0)(typescript@5.4.3) + specifier: 'catalog:' + version: 25.9.3 autoprefixer: - specifier: 10.4.19 - version: 10.4.19(postcss@8.4.38) + specifier: 10.5.0 + version: 10.5.0(postcss@8.5.15) copy-to-clipboard: - specifier: 3.3.3 - version: 3.3.3 - eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 4.0.2 + version: 4.0.2 eslint-plugin-qwik: - specifier: 2.0.0-beta.37 - version: 2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.3) - postcss: - specifier: 8.4.38 - version: 8.4.38 - prettier: - specifier: 3.2.5 - version: 3.2.5 - prettier-plugin-tailwindcss: - specifier: 0.5.13 - version: 0.5.13(prettier@3.2.5) + specifier: 'catalog:' + version: 2.0.0-beta.37(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + oxfmt: + specifier: 'catalog:' + version: 0.55.0 + oxlint: + specifier: 'catalog:' + version: 1.70.0 qwik-sonner: specifier: workspace:* version: link:.. tailwindcss: - specifier: 3.4.3 - version: 3.4.3 + specifier: 4.3.1 + version: 4.3.1 typescript: - specifier: 5.4.3 - version: 5.4.3 + specifier: 'catalog:' + version: 6.0.3 undici: - specifier: '*' - version: 6.3.0 + specifier: 'catalog:' + version: 8.5.0 vite: - specifier: ^8.0.16 - version: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + specifier: 'catalog:' + version: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) vite-tsconfig-paths: - specifier: ^6.1.1 - version: 6.1.1(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) + specifier: 'catalog:' + version: 6.1.1(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - '@azure/functions@3.5.1': resolution: {integrity: sha512-6UltvJiuVpvHSwLcK/Zc6NfUwlkDLOFFx97BHCJzlWNsfiWwzwmTsxJXg4kE/LemKTHxPpfoPE+kOJ8hAdiKFQ==} - '@emnapi/core@1.10.0': - resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} @@ -337,46 +332,55 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@fastify/busboy@2.1.0': - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} @@ -531,44 +535,25 @@ packages: cpu: [x64] os: [win32] - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.21': - resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} - - '@jsdevtools/ez-spawn@3.0.4': - resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} - engines: {node: '>=10'} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@napi-rs/wasm-runtime@1.1.5': - resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@netlify/edge-functions@3.0.8': resolution: {integrity: sha512-ml1oCDsRTTRmZS2nUj8XRD1b6+foEiZT3lPk7qQ4nv/jnxylHJ20ooPzPDH+cJmGjXFrMeR14/91W1o6D2ftBg==} engines: {node: '>=18.0.0'} @@ -577,156 +562,285 @@ packages: resolution: {integrity: sha512-8/g0Pt6y6wXj5Ia5eeYLiXhRfWeqZXGXpGFeCiiQdUOem+FPtXdA4+YdGxqzWc7D0AvptKSO01KGeeVWHSu8Kg==} engines: {node: ^18.14.0 || >=20} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@oxfmt/binding-android-arm-eabi@0.55.0': + resolution: {integrity: sha512-+rFDOqQe5LOWgxrAJaZgLRudr6GQm0wGI6gtu7vVkrdLGjNMUSGbAlaCr8j7F2H2Er97vYQCU8WDb30onqMM1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@oxfmt/binding-android-arm64@0.55.0': + resolution: {integrity: sha512-ctulLq8s3x8Zmvw6+iccB09TIKERAklRSmbJ10gk8mlAn05qZxoyo52dj3Hi9IJcmDSwF54fQaTVh2CbL6PInw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@oxfmt/binding-darwin-arm64@0.55.0': + resolution: {integrity: sha512-xDQczLH9pw/RBk1h/GH0qcGMm8hQtmtVHBNLSH3lk1gEIR09hZ4L+mJQl4VqiVAvPK9VG9PYrWWuSQLt7xTbiA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxfmt/binding-darwin-x64@0.55.0': + resolution: {integrity: sha512-JaNoFCkF2CJdGgpPSMbuO9HVyXyoNGIhMHPvp6NYAjeVKw9XEYc0HcUWJLPQa3Q69WV5wMa9m5jPMJPtbLtcRg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@oxfmt/binding-freebsd-x64@0.55.0': + resolution: {integrity: sha512-DNbszhpg6S2MIzax5azdHFTTBIVkR5xr8yyRZuA4yoDAwOkzIp3tmldgKZM2+VlT+hJIG0xUksA+elISzMEAfA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] - '@playwright/test@1.43.1': - resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} - engines: {node: '>=16'} - deprecated: Please update to the latest version of Playwright to test up-to-date browsers. - hasBin: true + '@oxfmt/binding-linux-arm-gnueabihf@0.55.0': + resolution: {integrity: sha512-2snoaoRfFFyGnbOcKUK36rREBYxe/Xgz3uHbiA5zbCB/s6R4DQj4mHqYAaWWhgizCUSDxV8cE9zAZ0XleNpKGw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] - '@qwik.dev/core@2.0.0-beta.37': - resolution: {integrity: sha512-8BAe/70kjUNmt6CCGGFHuqcmSUb8o9s5R9LhzhW2rcVDMbkVxtKByVGFVPQnTrZFU584UJDVwb8Tdaz6hrtQew==} - engines: {node: ^20.3.0 || >=21.0.0} - hasBin: true - peerDependencies: - prettier: '*' - vite: '>=6 <9' - vitest: '>=2 <4' - peerDependenciesMeta: - prettier: - optional: true - vitest: - optional: true + '@oxfmt/binding-linux-arm-musleabihf@0.55.0': + resolution: {integrity: sha512-q1aktHF/WRpSK81BX1dE/9vWrS2jGw1Nax2kb4DBLGAewubCLcoNyp4Zl/NSMgbv3vUS46Z33wIQkBVYOP3PYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] - '@qwik.dev/optimizer@2.1.0-beta.5': - resolution: {integrity: sha512-ygrROBg8/lqyvfig78lAEtxHLmLJLNcncMWLguIK4vmruuYpYXQVMMHklsbcTDj9tEvhL1B/MfclDsiG5E4XOA==} - engines: {node: ^20.3.0 || >=21.0.0} + '@oxfmt/binding-linux-arm64-gnu@0.55.0': + resolution: {integrity: sha512-VD0y36aENezl/3tsclA/4G53Cc7iV+7Uoh7gz4yvcOTaEYBtJpQsE6PKDGTtUtOvGS4kv51ybfXY/nWZejO5IA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@qwik.dev/router@2.0.0-beta.37': - resolution: {integrity: sha512-YIF4GjdghEaTbL0bTPnhHngAITbDlc7K19R1UbGfGjhKFkA1cLrmZp2xaFPwKUDXUVyu+LTAvBkTx8nLgwIebQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - peerDependencies: - '@qwik.dev/core': ^2.0.0-beta.37 - vite: '>=6 <9' + '@oxfmt/binding-linux-arm64-musl@0.55.0': + resolution: {integrity: sha512-r8xlKJFcsRmn0H5jZrdORae6RX9jDBrZVvOoxF+bCQtampQJClv80aZEHsv+NsLsp2KCE5ql79O7DpPVzYWpXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.55.0': + resolution: {integrity: sha512-GRKv/HXHcwIVld/WU61rF0g0R16hl5EJ+ScKdpjevT57lnLnagj/U2YUbXf2mT+2Pg1uCzWC+mvGicPV3CDdLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.55.0': + resolution: {integrity: sha512-rdv57enTiPtpSYRMKfAiEbQb0Puw5t9N7isVinDoo5qeLDScro2gznmZqSgSWbVZRzLisTeCTW8Qwgw0bOHv3A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.55.0': + resolution: {integrity: sha512-7v1nNrlD43VY6+sYQ6efYyb3lE6QY182304PD/768ZxTjOmFd/3dQa3u/nGBUAXYdGSWOQc5N3PnS0QzUXyEIA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.55.0': + resolution: {integrity: sha512-f4lJLUSPOgScjFl9LiflKCTocyNRwE25JmTMbN4XQdDjoZzEHjqf3wA3VESF1/csg7i8m7+EQLbrZyYDqe10UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.55.0': + resolution: {integrity: sha512-MihqiPziJNoWy4MqNSV+jVA1g+07iQDjZiR0vaCaDoPgFEiJpCMsxamktzLV07cEeQsSJ04vQaU4CzCQwIvtDA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.55.0': + resolution: {integrity: sha512-Yqghym7KYAVjP9MmSrNZiDeerMuoejNjo0r3ox5H3GDKk8eAfl8VyJm9i+pWCLDCTnAbcTUMMN2ZKjUYXH1v3g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.55.0': + resolution: {integrity: sha512-s5SDvVVSbyQl1V5UU3Yl12M+XLUQ3rl5SglNqgAA2K4PXUtQhyNSS00wivONPEnNo5W01rCou8WkDNyvI/RGHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] - '@rolldown/binding-android-arm64@1.0.3': - resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + '@oxfmt/binding-win32-arm64-msvc@0.55.0': + resolution: {integrity: sha512-7p9FB5R32tw2KyyNX3wpQrR2WHwEHvMEiBlGXxeTCaRMCVNx3UtFMAUbaQ/pRNWIrEUZmYhJ6tcUH52uPTRYjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.55.0': + resolution: {integrity: sha512-ZYqj3fDnOT1IaVGMP5kpmkQl4F3tQIm2ZyAxvqkJYmI0xgWWak4ss4XYwv3VDfM+TWXeC9K4uQ/wW5jm/5XABA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.55.0': + resolution: {integrity: sha512-eEYT5tivGnGbPHuOHuQpi6CGLObhh0re/5jcNQHihD2GRYkTM85dyi5a19zjP8Q00t1uqAx+/QGLUGdHeqzWyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.70.0': + resolution: {integrity: sha512-zFh0P4cswmRvw6nkyb89dr18rRanuaCPAsEXsFDoQY8WdaquI8Pt4NWFjaMJg6L23cy5NeN8J9cBnREbWzZhaw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.70.0': + resolution: {integrity: sha512-qI8o4HZjeGiBrWv+pJv4lH0Yi2Gl/JSp/EumBUApezJprIKa5PS4nU0lQsQngtky8k+SplQIOjv6hwu0SSxeyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.3': - resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + '@oxlint/binding-darwin-arm64@1.70.0': + resolution: {integrity: sha512-8KjgVVHI5F9nVwHCRwwA78Ty7zNKP4Wd9OeN5PSv3iu/F/u1RVXoOCgLhWqust6HmwQG6xc8c+RCyaWENy24+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.3': - resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + '@oxlint/binding-darwin-x64@1.70.0': + resolution: {integrity: sha512-WVydssv5PSUBXFJTdNBWlmGkbNmvPGaFt/2SUT/EZRB6bq6bEOHmMlbnupZD5jmlEvi9+mZJHi8TCw15lyfSfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.3': - resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + '@oxlint/binding-freebsd-x64@1.70.0': + resolution: {integrity: sha512-hJucmUf8OlinHNb1R7fI4Fw6WsAstOz7i8nmkWQfiHoZXtbufNm+MxiDTIMk1ggh2Ro4vLzgQ+bKvRY54MZoRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': - resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + '@oxlint/binding-linux-arm-gnueabihf@1.70.0': + resolution: {integrity: sha512-1BnS7wbCYDSXwWzJJ+mc3NURoha6m6m6RT5c6vgAY3oz7C3OVXP+S0awo2mRq97arrJkVvO3qRQfyAHL+76xtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.3': - resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + '@oxlint/binding-linux-arm-musleabihf@1.70.0': + resolution: {integrity: sha512-yKy/UdbR55+M2yEcuiV5DCNC/gdQAjr/GioUy50QwBzSrKm8ueWADqyRLS9Xk+qjNeCYGg6A8FvUBds56ttfqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.70.0': + resolution: {integrity: sha512-0A5XJ4alvmqFUFP/4oYSyaO+qLto/HrKEWTSaegiVl+HOufFngK2BjYw9x4RbwBt/du5QG6l5q1zeWiJYYG5yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.3': - resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + '@oxlint/binding-linux-arm64-musl@1.70.0': + resolution: {integrity: sha512-JiylyurlB0CLSedNtx1gzv3FvfWPF1h/2Y3BJszPLNt5XQFlBsH5ke0Jle3iJb3uqu5m2e7A/DwzpuCAHdiU+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.3': - resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + '@oxlint/binding-linux-ppc64-gnu@1.70.0': + resolution: {integrity: sha512-J8VPG7I3/HmgaU4u8pNU2kFx2+0U+vPLS1dXFxXOaR/2TQ0f8AC7DRz0SRGRI1bfphnX2hVYTTtLuhL4nYKL+Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.3': - resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + '@oxlint/binding-linux-riscv64-gnu@1.70.0': + resolution: {integrity: sha512-N2+4lV2KLN+oXTIIIwmWDhwkrnvqf5oX7Hw0zPjk+RuIVgiBQSOlJWF7uQoFx2siEYX0ZQ5cfSbEAHm+J3t7Wg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.70.0': + resolution: {integrity: sha512-1e2L7cFCvx9QDzq6NPP+0tABKb5z6nWHyddWTNKprEsjO9xNrAtPowuCGpjNXxkTdsMiZ4jc8YQ5SstZd4XK6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.70.0': + resolution: {integrity: sha512-Kwu/l/8GcYibCWA9m9N5pRXMIKVSsL/YbgpLzYkqDhWTiqdRfnNJ/+nqIKRKQiFbHWsdlHEhzMwruJK+qcEruA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.3': - resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + '@oxlint/binding-linux-x64-gnu@1.70.0': + resolution: {integrity: sha512-tap04CsHYOl0nSAQJfPNIuBxqEPB2HnhQqwaOXLg1jnp2XfRo8Fa814dA4QC4zpvTWXCjAAaCY1W5LOORkEQuQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.3': - resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + '@oxlint/binding-linux-x64-musl@1.70.0': + resolution: {integrity: sha512-hzJa/WgvtJpbBD9rgfy0qe+MjbxOXNUT0bfR1S6EQQzfTtBFA9xg5q8KSwRrQ2QfSS+TaP4j+4mVPQrfNc6UNg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.3': - resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + '@oxlint/binding-openharmony-arm64@1.70.0': + resolution: {integrity: sha512-xbsaNSNzVSnaJACCUYr1HQMyY/Q/Q1LkePmHG3UvZPvGCYGNxrsZp9OmtA6ick8xH47ltRRbRrPCM1YXYcyC+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.3': - resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + '@oxlint/binding-win32-arm64-msvc@1.70.0': + resolution: {integrity: sha512-icAEsUI7JbW1TMRdEXV83mVAInhRVQYuuAlPpxdGwJ95chNdnCzjloRW8GglT0WvzOEZSio6fnYSk2DJ2Hv7LQ==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] + cpu: [arm64] + os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.3': - resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + '@oxlint/binding-win32-ia32-msvc@1.70.0': + resolution: {integrity: sha512-FHMSWbVsPVs/f+Jcl04ws4JJ2wUnauyTzlpxWRG/lSO/8GpX08Fo2gQZqdA6CrRFI+zvkxl+N/KwJGWfUwYVZA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.3': - resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + '@oxlint/binding-win32-x64-msvc@1.70.0': + resolution: {integrity: sha512-ptOlKwCz7n4AKs5VweMqG6DAg677FmKOK+vBkkL9DMNgFATIQ+upqUYBTOEwRQyRAx1ncGlPlXleV2hIcm3z4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@playwright/test@1.61.0': + resolution: {integrity: sha512-cKA5B6lpFEMyMGjxF54QihfYpB4FkEGH+qZhtArDEG+wezQAJY8Pq6C7T1SjWz+FFzt3TbyoXBQYk/0292TdJA==} + engines: {node: '>=18'} + hasBin: true + + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + + '@qwik.dev/core@2.0.0-beta.37': + resolution: {integrity: sha512-8BAe/70kjUNmt6CCGGFHuqcmSUb8o9s5R9LhzhW2rcVDMbkVxtKByVGFVPQnTrZFU584UJDVwb8Tdaz6hrtQew==} + engines: {node: ^20.3.0 || >=21.0.0} + hasBin: true + peerDependencies: + prettier: '*' + vite: '>=6 <9' + vitest: '>=2 <4' + peerDependenciesMeta: + prettier: + optional: true + vitest: + optional: true + + '@qwik.dev/optimizer@2.1.0-beta.5': + resolution: {integrity: sha512-ygrROBg8/lqyvfig78lAEtxHLmLJLNcncMWLguIK4vmruuYpYXQVMMHklsbcTDj9tEvhL1B/MfclDsiG5E4XOA==} + engines: {node: ^20.3.0 || >=21.0.0} + + '@qwik.dev/router@2.0.0-beta.37': + resolution: {integrity: sha512-YIF4GjdghEaTbL0bTPnhHngAITbDlc7K19R1UbGfGjhKFkA1cLrmZp2xaFPwKUDXUVyu+LTAvBkTx8nLgwIebQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + peerDependencies: + '@qwik.dev/core': ^2.0.0-beta.37 + vite: '>=6 <9' - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -872,26 +986,108 @@ packages: cpu: [x64] os: [win32] - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tailwindcss/node@4.3.1': + resolution: {integrity: sha512-6NDaqRoAMSXD1mr/RXu0HBvNE9a2n5tHPsxu9XHLws8o4Twes5rBM2205SUUiJ9goAtadrN6xTGX0UDEwp/N4A==} + + '@tailwindcss/oxide-android-arm64@4.3.1': + resolution: {integrity: sha512-SVlyf61g374l5cHyg8x9kf5xmLcOaxvOTsbsqDnSsDJaKOEFZ7GCvi84VAVGpxojYOs1+3K6M0UjXfqPU8vmOQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.1': + resolution: {integrity: sha512-hVnWLwv+e/l7c4WKyVtHVrIPvYdqWHjRB3MDIqARynzFtnQg85kmQEFCbV9Ja0VVx4xXTIiDWY60Y7iz/iNoDA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.1': + resolution: {integrity: sha512-Cf7abu0WVgbhU7ANgPUnSAvm7nCvMweusHb8FnaHlLfv/Caq4GYaEZg7ZImzzmjx4lIAfuS8q+eLIS7A7IzxIg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.1': + resolution: {integrity: sha512-ZZqzX2Y+GXtXXfqSfpJhDm60OoZfvLHLCgm+J7NVqgHHJjG/m9ugZI77RwTsVd4fnBJuCFP6Ae6kTJb71UdS8g==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.1': + resolution: {integrity: sha512-/Ah/xik0LaMYfv9DZ0S/t4pBlBNYOcqtRwusjgovHkvT8ixueWCLyJjsaF5kQIckjb4IT8Q6K6p/iPmZMixYgg==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.1': + resolution: {integrity: sha512-gqdFoVJlw444GvpnheZLHmvTzSxI/cOUUh2KSNejQjTcYkW062SVD+En0rUgD+QV91bz1XGIGtt1HJd48xUGbQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.1': + resolution: {integrity: sha512-Bwv9KwOvE0VKa86xPFif9b9c3Y1NxOV1P0gLti/IYaWEsQYZXDlxfGEtA8mdDZ7SG3wyNXAWYT5SIn3giL57oA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.1': + resolution: {integrity: sha512-Ymi8O8T15HYQdOUWUtTI6ldN0neHP85FC+Qz32xTcZ7iJXtem/x8ITev0o1e9e5rkqj4lONZfTRLvkmin1+tKg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.1': + resolution: {integrity: sha512-M+P/91qJ6uILLw4k2G93GMDRAXj61SMvFQYt39AqvUqYgExXpLL5aepfns7sj4HiAQeolirQF9E0lzRvdf4zPQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.1': + resolution: {integrity: sha512-zsM8uOeqvVGHsAXsJxsT28ttosFahLJKCLOTUBqRAtKnVgGSRitds9T432QiT8b77Yga7JIBkulIRRlJPtYhRA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.1': + resolution: {integrity: sha512-aiNvSq9BsVk8V513lDKlrCFAgf8qBMPZTpgEhInL+NwQqs97mYmupVMrPrgBBSL8Pv/0zXu9MrMF9rMun1ZeNg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] - '@types/acorn@4.0.6': - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.1': + resolution: {integrity: sha512-xDEyu1rg290472FEGaKHnzyDyh5QH+AlWvsU5hMoMtPpzmKlRI0jaYKCgSHDYtaQWZOYbMaduSyCwFwY4n1HmA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@tailwindcss/oxide@4.3.1': + resolution: {integrity: sha512-yVPyo8RNkabVr3O2EhHEE0Rewu7YKzc1DhIqfL46LKveFrmu9XbDazNOJY7/GRuvw1h6u3utWnR29H/p5JPlgA==} + engines: {node: '>= 20'} - '@types/eslint@8.56.1': - resolution: {integrity: sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==} + '@tailwindcss/vite@4.3.1': + resolution: {integrity: sha512-hItDHuIIlEV61R+faXu66s1K36aTurO/Qw0e45Vskz57gXl9pWOT6eg3zmcEui6CZXddbN7zd41bwmvag4JGwQ==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - '@types/estree-jsx@1.0.3': - resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -905,77 +1101,26 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/mdast@4.0.3': - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.12.2': - resolution: {integrity: sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==} - - '@types/node@20.12.8': - resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} + '@types/node@25.9.3': + resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} '@types/prismjs@1.26.6': resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} - '@types/semver@7.5.6': - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - - '@typescript-eslint/eslint-plugin@7.5.0': - resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/eslint-plugin@7.8.0': - resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@7.5.0': - resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@typescript-eslint/parser@7.8.0': - resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@typescript-eslint/project-service@8.61.1': resolution: {integrity: sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA==} @@ -983,14 +1128,6 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@7.5.0': - resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/scope-manager@7.8.0': - resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.61.1': resolution: {integrity: sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1001,74 +1138,16 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@7.5.0': - resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/type-utils@7.8.0': - resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@7.5.0': - resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/types@7.8.0': - resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.61.1': resolution: {integrity: sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@7.5.0': - resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@7.8.0': - resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@8.61.1': resolution: {integrity: sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@7.5.0': - resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - - '@typescript-eslint/utils@7.8.0': - resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - '@typescript-eslint/utils@8.61.1': resolution: {integrity: sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1076,170 +1155,115 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@7.5.0': - resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/visitor-keys@7.8.0': - resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.61.1': resolution: {integrity: sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + args-tokenizer@0.3.0: + resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + baseline-browser-mapping@2.10.37: + resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} + engines: {node: '>=6.0.0'} + hasBin: true boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bumpp@9.4.0: - resolution: {integrity: sha512-T+N+B5mSSvsTt7kgxGXCKQd957IxmEZwMn2nWirspGUY08u/cBNrpQDMXk43fzLegZtKtXS1v9S06vq2zf6lXQ==} - engines: {node: '>=10'} + bumpp@11.1.0: + resolution: {integrity: sha512-jdwOGMyX8JIqpQ0N2RMRR87DHZaoJnUtui5lU9LqFfFK5JC0H8qY9uWqXoa+dEWt/K7rOmmsoyiZB8RBM7RPBQ==} + engines: {node: '>=20.19.0'} hasBin: true - c12@1.10.0: - resolution: {integrity: sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} - call-me-maybe@1.0.2: - resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001603: - resolution: {integrity: sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q==} + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1252,57 +1276,25 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - citty@0.1.5: - resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} - collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - confbox@0.1.3: - resolution: {integrity: sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg==} + copy-to-clipboard@4.0.2: + resolution: {integrity: sha512-gklSft7IuhriZKHKpuoA1fpJSLPNgvUMWMo5BlnzAJm0zNKnznoSv23IjtNqclx8eKi6ZcdvFFzYEER/+U1LoQ==} - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} @@ -1312,15 +1304,10 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -1328,14 +1315,17 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1346,30 +1336,27 @@ packages: supports-color: optional: true - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.2: - resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -1377,20 +1364,6 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1401,42 +1374,50 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} - - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - electron-to-chromium@1.4.723: - resolution: {integrity: sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + electron-to-chromium@1.5.372: + resolution: {integrity: sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.21.6: + resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} + engines: {node: '>=10.13.0'} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} esast-util-from-estree@2.0.0: @@ -1450,8 +1431,8 @@ packages: engines: {node: '>=18'} hasBin: true - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@4.0.0: @@ -1468,9 +1449,9 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -1480,18 +1461,22 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint@10.5.0: + resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1533,29 +1518,18 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} - fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -1568,49 +1542,31 @@ packages: picomatch: optional: true - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} @@ -1625,94 +1581,71 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + function.prototype.name@1.2.0: + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} engines: {node: '>= 0.4'} functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - giget@1.2.1: - resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} - hasBin: true + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} - has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} hast-util-heading-rank@2.1.1: @@ -1727,11 +1660,11 @@ packages: hast-util-parse-selector@3.1.1: resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} - hast-util-to-estree@3.1.0: - resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} - hast-util-to-jsx-runtime@2.3.0: - resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} hast-util-to-string@2.0.0: resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} @@ -1742,49 +1675,27 @@ packages: hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} imagetools-core@9.1.0: resolution: {integrity: sha512-xQjs+2vrxLnAjCq+omuNkd5UQTld9/bP8+YT0LyYTlKfuSQtgUBvqhUwGugzSAh6sCdN+LnROMuLswn5hZ9Fhg==} engines: {node: '>=20.0.0'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - - inline-style-parser@0.2.3: - resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} is-alphabetical@2.0.1: @@ -1793,41 +1704,52 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-document.all@1.0.0: + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -1836,51 +1758,57 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -1888,16 +1816,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true json-buffer@3.0.1: @@ -1909,8 +1829,8 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} @@ -1919,10 +1839,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -2008,38 +1924,16 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -2055,11 +1949,15 @@ packages: engines: {node: '>= 18'} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -2082,11 +1980,11 @@ packages: mdast-util-gfm@3.1.0: resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - mdast-util-mdx-jsx@3.1.2: - resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} mdast-util-mdx@3.0.0: resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} @@ -2097,11 +1995,11 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@13.1.0: - resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} @@ -2112,15 +2010,8 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} micromark-extension-frontmatter@2.0.0: resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} @@ -2146,11 +2037,11 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - micromark-extension-mdx-expression@3.0.0: - resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} - micromark-extension-mdx-jsx@3.0.0: - resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} micromark-extension-mdx-md@2.0.0: resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} @@ -2161,199 +2052,143 @@ packages: micromark-extension-mdxjs@3.0.0: resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} - - micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - micromark-factory-mdx-expression@2.0.1: - resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} - micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - micromark-util-events-to-acorn@2.0.2: - resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} - micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-fetch-native@1.6.1: - resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==} - - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - npm-run-path@5.2.0: - resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + engines: {node: '>=18'} nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nypm@0.3.4: - resolution: {integrity: sha512-1JLkp/zHBrkS3pZ692IqOaIKSYHmQXgqfELk6YTOfVBnwealAmPA1q2kKK7PHJAHSMBozerThEFZXP3G6o7Ukg==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + oxfmt@0.55.0: + resolution: {integrity: sha512-jSj2wCTakwgPMxkfiVZX0jf+nX+Nz6xlyAZjqNE0qXTFdCBPYlP6JAN+ODjmealw7DXBjOzYbdsqwBMAZnPZ6A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + oxlint@1.70.0: + resolution: {integrity: sha512-D6JgHtzkhRwvEC+A0Nw5AEc5bk8x5i1pHzvZIEf/a0C4hOzmAACNGtkDGPyFaxxX3ZVGxCPeig3P3rMM8XU3/g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -2363,122 +2198,44 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} - - playwright-core@1.43.1: - resolution: {integrity: sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==} - engines: {node: '>=16'} + playwright-core@1.61.0: + resolution: {integrity: sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==} + engines: {node: '>=18'} hasBin: true - playwright@1.43.1: - resolution: {integrity: sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==} - engines: {node: '>=16'} + playwright@1.61.0: + resolution: {integrity: sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==} + engines: {node: '>=18'} hasBin: true - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} - engines: {node: '>=4'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} @@ -2487,86 +2244,23 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.5.13: - resolution: {integrity: sha512-2tPWHCFNC+WRjAC4SIWQNSOdcL1NNkydXim8w7TDqlZi+/ulZYz2OouAI6qMtkggnPt7lGamboj6LcTMwcCvoQ==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig-melody': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig-melody': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + prettier@3.8.4: + resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} engines: {node: '>=14'} hasBin: true - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@6.4.0: - resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - rc9@2.1.1: - resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -2582,11 +2276,15 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + refractor@4.9.0: resolution: {integrity: sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==} - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} rehype-autolink-headings@7.1.0: @@ -2601,54 +2299,33 @@ packages: remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - remark-mdx@3.0.1: - resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rolldown@1.0.3: - resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rollup@4.62.0: resolution: {integrity: sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} - safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} safer-buffer@2.1.2: @@ -2658,16 +2335,6 @@ packages: resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - semver@7.8.4: resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} engines: {node: '>=10'} @@ -2676,12 +2343,16 @@ packages: set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} sharp@0.34.5: @@ -2700,32 +2371,26 @@ packages: resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} @@ -2733,119 +2398,61 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - - stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} - style-to-object@1.0.6: - resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} svgo@3.3.3: resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} - engines: {node: '>=14.0.0'} + tailwindcss@4.3.1: + resolution: {integrity: sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==} hasBin: true - tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - - ts-api-utils@1.0.3: - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} @@ -2853,11 +2460,8 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tsconfck@3.0.3: - resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} deprecated: unmaintained hasBin: true @@ -2867,71 +2471,56 @@ packages: typescript: optional: true - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} - engines: {node: '>=14.17'} - hasBin: true + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - ufo@1.3.2: - resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unconfig-core@7.5.0: + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - undici@6.10.2: - resolution: {integrity: sha512-HcVuBy7ACaDejIMdwCzAvO22OsiE6ir6ziTIr9kAE0vB+PheVe29ZvRN8p7FXCO2uZHTjEoUs5bPiFpuc/hwwQ==} - engines: {node: '>=18.0'} + unconfig@7.5.0: + resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} - undici@6.3.0: - resolution: {integrity: sha512-zkSMOXs2topAR1LF0PxAaNNvhdX4LYEcmRMJLMh3mjgfZpBtc/souXOp4aYiR5Q46HrBPA2/8DkEZhD3eNFE1Q==} - engines: {node: '>=18.0'} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + undici@8.5.0: + resolution: {integrity: sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==} + engines: {node: '>=22.19.0'} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -2939,20 +2528,17 @@ packages: unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2960,9 +2546,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -2976,11 +2559,8 @@ packages: typescript: optional: true - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -2996,16 +2576,15 @@ packages: peerDependencies: vite: '*' - vite@8.0.16: - resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 - esbuild: ^0.27.0 || ^0.28.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' @@ -3016,14 +2595,12 @@ packages: peerDependenciesMeta: '@types/node': optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true jiti: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true sass-embedded: @@ -3039,11 +2616,20 @@ packages: yaml: optional: true - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} - which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} engines: {node: '>= 0.4'} which@2.0.2: @@ -3051,23 +2637,9 @@ packages: engines: {node: '>= 8'} hasBin: true - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} @@ -3086,35 +2658,15 @@ packages: snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@alloc/quick-lru@5.2.0': {} - '@azure/functions@3.5.1': dependencies: iconv-lite: 0.6.3 long: 4.0.0 uuid: 8.3.2 - '@emnapi/core@1.10.0': - dependencies: - '@emnapi/wasi-threads': 1.2.1 - tslib: 2.6.2 - optional: true - - '@emnapi/runtime@1.10.0': - dependencies: - tslib: 2.6.2 - optional: true - '@emnapi/runtime@1.11.1': dependencies: - tslib: 2.6.2 - optional: true - - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@esbuild/aix-ppc64@0.27.7': @@ -3195,47 +2747,51 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.9.1(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.7.0))': dependencies: - eslint: 8.57.0 + eslint: 10.5.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.12.2': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.23.5': dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 - '@fastify/busboy@2.1.0': {} + '@eslint/object-schema@3.0.5': {} - '@humanwhocodes/config-array@0.11.14': + '@eslint/plugin-kit@0.7.2': dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.2': {} + '@humanwhocodes/retry@0.4.3': {} '@img/colour@1.1.0': {} @@ -3333,253 +2889,235 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@isaacs/cliui@8.0.2': + '@jridgewell/gen-mapping@0.3.13': dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/gen-mapping@0.3.3': + '@jridgewell/remapping@2.3.5': dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.21 - - '@jridgewell/resolve-uri@3.1.1': {} + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/set-array@1.1.2': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.21': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jsdevtools/ez-spawn@3.0.4': + '@jridgewell/trace-mapping@0.3.31': dependencies: - call-me-maybe: 1.0.2 - cross-spawn: 7.0.3 - string-argv: 0.3.2 - type-detect: 4.0.8 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 '@mdx-js/mdx@3.1.1': dependencies: - '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.3 + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.11.3 + '@types/mdx': 2.0.14 + acorn: 8.17.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.0 + hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.11.3) + recma-jsx: 1.0.1(acorn@8.17.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 - remark-mdx: 3.0.1 + remark-mdx: 3.1.1 remark-parse: 11.0.0 - remark-rehype: 11.1.0 - source-map: 0.7.4 - unified: 11.0.4 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 + unist-util-visit: 5.1.0 + vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 - optional: true - '@netlify/edge-functions@3.0.8': dependencies: '@netlify/types': 2.8.0 '@netlify/types@2.8.0': {} - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@oxfmt/binding-android-arm-eabi@0.55.0': + optional: true - '@nodelib/fs.stat@2.0.5': {} + '@oxfmt/binding-android-arm64@0.55.0': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + '@oxfmt/binding-darwin-arm64@0.55.0': + optional: true - '@oxc-project/types@0.133.0': {} + '@oxfmt/binding-darwin-x64@0.55.0': + optional: true - '@pkgjs/parseargs@0.11.0': + '@oxfmt/binding-freebsd-x64@0.55.0': optional: true - '@playwright/test@1.43.1': - dependencies: - playwright: 1.43.1 + '@oxfmt/binding-linux-arm-gnueabihf@0.55.0': + optional: true - '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': - dependencies: - '@qwik.dev/optimizer': 2.1.0-beta.5 - csstype: 3.2.3 - launch-editor: 2.14.1 - magic-string: 0.30.21 - rollup: 4.62.0 - vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) - optionalDependencies: - prettier: 3.2.5 + '@oxfmt/binding-linux-arm-musleabihf@0.55.0': + optional: true - '@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': - dependencies: - '@qwik.dev/optimizer': 2.1.0-beta.5 - csstype: 3.2.3 - launch-editor: 2.14.1 - magic-string: 0.30.21 - rollup: 4.62.0 - vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) - optionalDependencies: - prettier: 3.2.5 + '@oxfmt/binding-linux-arm64-gnu@0.55.0': + optional: true - '@qwik.dev/optimizer@2.1.0-beta.5': {} + '@oxfmt/binding-linux-arm64-musl@0.55.0': + optional: true - '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': - dependencies: - '@azure/functions': 3.5.1 - '@mdx-js/mdx': 3.1.1 - '@netlify/edge-functions': 3.0.8 - '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - '@types/mdx': 2.0.13 - estree-util-value-to-estree: 3.5.0 - github-slugger: 2.0.0 - hast-util-heading-rank: 2.1.1 - hast-util-to-string: 2.0.0 - kleur: 4.1.5 - marked: 12.0.2 - mdast-util-mdx: 3.0.0 - refractor: 4.9.0 - rehype-autolink-headings: 7.1.0 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 - set-cookie-parser: 2.7.2 - source-map: 0.7.6 - svgo: 3.3.3 - unified: 11.0.5 - unist-util-visit: 5.0.0 - valibot: 1.4.1(typescript@5.4.3) - vfile: 6.0.3 - vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) - vite-imagetools: 10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - yaml: 2.9.0 - zod: 3.25.76 - transitivePeerDependencies: - - rollup - - supports-color - - typescript + '@oxfmt/binding-linux-ppc64-gnu@0.55.0': + optional: true - '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0))': - dependencies: - '@azure/functions': 3.5.1 - '@mdx-js/mdx': 3.1.1 - '@netlify/edge-functions': 3.0.8 - '@qwik.dev/core': 2.0.0-beta.37(prettier@3.2.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - '@types/mdx': 2.0.13 - estree-util-value-to-estree: 3.5.0 - github-slugger: 2.0.0 - hast-util-heading-rank: 2.1.1 - hast-util-to-string: 2.0.0 - kleur: 4.1.5 - marked: 12.0.2 - mdast-util-mdx: 3.0.0 - refractor: 4.9.0 - rehype-autolink-headings: 7.1.0 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 - set-cookie-parser: 2.7.2 - source-map: 0.7.6 - svgo: 3.3.3 - unified: 11.0.5 - unist-util-visit: 5.0.0 - valibot: 1.4.1(typescript@5.4.5) - vfile: 6.0.3 - vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) - vite-imagetools: 10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)) - yaml: 2.9.0 - zod: 3.25.76 - transitivePeerDependencies: - - rollup - - supports-color - - typescript + '@oxfmt/binding-linux-riscv64-gnu@0.55.0': + optional: true - '@rolldown/binding-android-arm64@1.0.3': + '@oxfmt/binding-linux-riscv64-musl@0.55.0': optional: true - '@rolldown/binding-darwin-arm64@1.0.3': + '@oxfmt/binding-linux-s390x-gnu@0.55.0': optional: true - '@rolldown/binding-darwin-x64@1.0.3': + '@oxfmt/binding-linux-x64-gnu@0.55.0': optional: true - '@rolldown/binding-freebsd-x64@1.0.3': + '@oxfmt/binding-linux-x64-musl@0.55.0': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + '@oxfmt/binding-openharmony-arm64@0.55.0': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.3': + '@oxfmt/binding-win32-arm64-msvc@0.55.0': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.3': + '@oxfmt/binding-win32-ia32-msvc@0.55.0': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.3': + '@oxfmt/binding-win32-x64-msvc@0.55.0': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.3': + '@oxlint/binding-android-arm-eabi@1.70.0': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.3': + '@oxlint/binding-android-arm64@1.70.0': optional: true - '@rolldown/binding-linux-x64-musl@1.0.3': + '@oxlint/binding-darwin-arm64@1.70.0': optional: true - '@rolldown/binding-openharmony-arm64@1.0.3': + '@oxlint/binding-darwin-x64@1.70.0': optional: true - '@rolldown/binding-wasm32-wasi@1.0.3': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxlint/binding-freebsd-x64@1.70.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.70.0': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.3': + '@oxlint/binding-linux-arm-musleabihf@1.70.0': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.3': + '@oxlint/binding-linux-arm64-gnu@1.70.0': optional: true - '@rolldown/pluginutils@1.0.1': {} + '@oxlint/binding-linux-arm64-musl@1.70.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.70.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.70.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.70.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.70.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.70.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.70.0': + optional: true - '@rollup/pluginutils@5.1.0(rollup@4.62.0)': + '@playwright/test@1.61.0': dependencies: - '@types/estree': 1.0.5 + playwright: 1.61.0 + + '@quansync/fs@1.0.0': + dependencies: + quansync: 1.0.0 + + '@qwik.dev/core@2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0))': + dependencies: + '@qwik.dev/optimizer': 2.1.0-beta.5 + csstype: 3.2.3 + launch-editor: 2.14.1 + magic-string: 0.30.21 + rollup: 4.62.0 + vite: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) + optionalDependencies: + prettier: 3.8.4 + + '@qwik.dev/optimizer@2.1.0-beta.5': {} + + '@qwik.dev/router@2.0.0-beta.37(@qwik.dev/core@2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)))(rollup@4.62.0)(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0))': + dependencies: + '@azure/functions': 3.5.1 + '@mdx-js/mdx': 3.1.1 + '@netlify/edge-functions': 3.0.8 + '@qwik.dev/core': 2.0.0-beta.37(prettier@3.8.4)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) + '@types/mdx': 2.0.14 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-heading-rank: 2.1.1 + hast-util-to-string: 2.0.0 + kleur: 4.1.5 + marked: 12.0.2 + mdast-util-mdx: 3.0.0 + refractor: 4.9.0 + rehype-autolink-headings: 7.1.0 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + set-cookie-parser: 2.7.2 + source-map: 0.7.6 + svgo: 3.3.3 + unified: 11.0.5 + unist-util-visit: 5.1.0 + valibot: 1.4.1(typescript@6.0.3) + vfile: 6.0.3 + vite: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) + vite-imagetools: 10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)) + yaml: 2.9.0 + zod: 3.25.76 + transitivePeerDependencies: + - rollup + - supports-color + - typescript + + '@rollup/pluginutils@5.4.0(rollup@4.62.0)': + dependencies: + '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.4 optionalDependencies: rollup: 4.62.0 @@ -3658,500 +3196,287 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.0': optional: true - '@tybys/wasm-util@0.10.2': + '@tailwindcss/node@4.3.1': dependencies: - tslib: 2.6.2 - optional: true + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.21.6 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.1 - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.5 + '@tailwindcss/oxide-android-arm64@4.3.1': + optional: true - '@types/debug@4.1.12': - dependencies: - '@types/ms': 0.7.34 + '@tailwindcss/oxide-darwin-arm64@4.3.1': + optional: true - '@types/eslint@8.56.1': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + '@tailwindcss/oxide-darwin-x64@4.3.1': + optional: true - '@types/eslint@8.56.10': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + '@tailwindcss/oxide-freebsd-x64@4.3.1': + optional: true - '@types/estree-jsx@1.0.3': - dependencies: - '@types/estree': 1.0.5 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.1': + optional: true - '@types/estree@1.0.5': {} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.1': + optional: true - '@types/estree@1.0.9': {} + '@tailwindcss/oxide-linux-arm64-musl@4.3.1': + optional: true - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.10 + '@tailwindcss/oxide-linux-x64-gnu@4.3.1': + optional: true - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.2 + '@tailwindcss/oxide-linux-x64-musl@4.3.1': + optional: true - '@types/json-schema@7.0.15': {} + '@tailwindcss/oxide-wasm32-wasi@4.3.1': + optional: true - '@types/mdast@4.0.3': - dependencies: - '@types/unist': 3.0.2 + '@tailwindcss/oxide-win32-arm64-msvc@4.3.1': + optional: true - '@types/mdx@2.0.13': {} + '@tailwindcss/oxide-win32-x64-msvc@4.3.1': + optional: true - '@types/ms@0.7.34': {} + '@tailwindcss/oxide@4.3.1': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.1 + '@tailwindcss/oxide-darwin-arm64': 4.3.1 + '@tailwindcss/oxide-darwin-x64': 4.3.1 + '@tailwindcss/oxide-freebsd-x64': 4.3.1 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.1 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.1 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.1 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.1 + '@tailwindcss/oxide-linux-x64-musl': 4.3.1 + '@tailwindcss/oxide-wasm32-wasi': 4.3.1 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.1 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.1 - '@types/node@20.12.2': + '@tailwindcss/vite@4.3.1(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0))': dependencies: - undici-types: 5.26.5 + '@tailwindcss/node': 4.3.1 + '@tailwindcss/oxide': 4.3.1 + tailwindcss: 4.3.1 + vite: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) - '@types/node@20.12.8': + '@types/debug@4.1.13': dependencies: - undici-types: 5.26.5 + '@types/ms': 2.1.0 - '@types/prismjs@1.26.6': {} - - '@types/semver@7.5.6': {} - - '@types/semver@7.5.8': {} - - '@types/unist@2.0.10': {} - - '@types/unist@3.0.2': {} + '@types/esrecurse@4.3.1': {} - '@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.3))(eslint@8.57.0)(typescript@5.4.3)': + '@types/estree-jsx@1.0.5': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.5.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.3) - optionalDependencies: - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color + '@types/estree': 1.0.9 - '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color + '@types/estree@1.0.9': {} - '@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.3)': + '@types/hast@2.3.10': dependencies: - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.5.0 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color + '@types/unist': 2.0.11 - '@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + '@types/hast@3.0.4': dependencies: - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color + '@types/unist': 3.0.3 - '@typescript-eslint/project-service@8.61.1(typescript@5.4.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.3) - '@typescript-eslint/types': 8.61.1 - debug: 4.4.3 - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color + '@types/json-schema@7.0.15': {} - '@typescript-eslint/project-service@8.61.1(typescript@5.4.5)': + '@types/mdast@4.0.4': dependencies: - '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.5) - '@typescript-eslint/types': 8.61.1 - debug: 4.4.3 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color + '@types/unist': 3.0.3 - '@typescript-eslint/scope-manager@7.5.0': - dependencies: - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/visitor-keys': 7.5.0 + '@types/mdx@2.0.14': {} - '@typescript-eslint/scope-manager@7.8.0': - dependencies: - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/visitor-keys': 7.8.0 + '@types/ms@2.1.0': {} - '@typescript-eslint/scope-manager@8.61.1': + '@types/node@25.9.3': dependencies: - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/visitor-keys': 8.61.1 + undici-types: 7.24.6 - '@typescript-eslint/tsconfig-utils@8.61.1(typescript@5.4.3)': - dependencies: - typescript: 5.4.3 + '@types/prismjs@1.26.6': {} - '@typescript-eslint/tsconfig-utils@8.61.1(typescript@5.4.5)': - dependencies: - typescript: 5.4.5 + '@types/unist@2.0.11': {} - '@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.3)': - dependencies: - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.3) - optionalDependencies: - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color + '@types/unist@3.0.3': {} - '@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/project-service@8.61.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@6.0.3) + '@typescript-eslint/types': 8.61.1 + debug: 4.4.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.5.0': {} - - '@typescript-eslint/types@7.8.0': {} - - '@typescript-eslint/types@8.61.1': {} - - '@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.3)': + '@typescript-eslint/scope-manager@8.61.1': dependencies: - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/visitor-keys': 7.5.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.3) - optionalDependencies: - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/visitor-keys': 8.61.1 - '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': + '@typescript-eslint/tsconfig-utils@8.61.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color + typescript: 6.0.3 - '@typescript-eslint/typescript-estree@8.61.1(typescript@5.4.3)': - dependencies: - '@typescript-eslint/project-service': 8.61.1(typescript@5.4.3) - '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.3) - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/visitor-keys': 8.61.1 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.8.4 - tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.4.3) - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.61.1': {} - '@typescript-eslint/typescript-estree@8.61.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.61.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.61.1(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@5.4.5) + '@typescript-eslint/project-service': 8.61.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@6.0.3) '@typescript-eslint/types': 8.61.1 '@typescript-eslint/visitor-keys': 8.61.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.4 tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.3)': + '@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3) - eslint: 8.57.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@8.61.1(eslint@8.57.0)(typescript@5.4.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.61.1 '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(typescript@5.4.3) - eslint: 8.57.0 - typescript: 5.4.3 + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.61.1(eslint@8.57.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(typescript@5.4.5) - eslint: 8.57.0 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@7.5.0': - dependencies: - '@typescript-eslint/types': 7.5.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.8.0': - dependencies: - '@typescript-eslint/types': 7.8.0 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.61.1': dependencies: '@typescript-eslint/types': 8.61.1 eslint-visitor-keys: 5.0.1 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.3.1': {} - acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.11.3 + acorn: 8.17.0 - acorn@8.11.3: {} + acorn@8.17.0: {} - ajv@6.12.6: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-regex@5.0.1: {} - - ansi-regex@6.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@2.0.1: {} + args-tokenizer@0.3.0: {} - array-buffer-byte-length@1.0.0: + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bound: 1.0.4 + is-array-buffer: 3.0.5 - array-includes@3.1.7: + array-includes@3.1.9: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 - array-union@2.1.0: {} - - array.prototype.flat@1.3.2: + array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 - arraybuffer.prototype.slice@1.0.2: + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + astring@1.9.0: {} - astring@1.8.6: {} + async-function@1.0.0: {} - autoprefixer@10.4.19(postcss@8.4.38): + autoprefixer@10.5.0(postcss@8.5.15): dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001603 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.38 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001799 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 bail@2.0.2: {} - balanced-match@1.0.2: {} - balanced-match@4.0.4: {} - binary-extensions@2.2.0: {} + baseline-browser-mapping@2.10.37: {} boolbase@1.0.0: {} - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 - braces@3.0.2: + browserslist@4.28.2: dependencies: - fill-range: 7.0.1 + baseline-browser-mapping: 2.10.37 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.372 + node-releases: 2.0.47 + update-browserslist-db: 1.2.3(browserslist@4.28.2) - browserslist@4.23.0: + bumpp@11.1.0: dependencies: - caniuse-lite: 1.0.30001603 - electron-to-chromium: 1.4.723 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) - - bumpp@9.4.0: - dependencies: - '@jsdevtools/ez-spawn': 3.0.4 - c12: 1.10.0 - cac: 6.7.14 - escalade: 3.1.2 - fast-glob: 3.3.2 - js-yaml: 4.1.0 - prompts: 2.4.2 - semver: 7.6.0 - - c12@1.10.0: - dependencies: - chokidar: 3.6.0 - confbox: 0.1.3 - defu: 6.1.4 - dotenv: 16.4.5 - giget: 1.2.1 - jiti: 1.21.0 - mlly: 1.6.1 - ohash: 1.1.3 - pathe: 1.1.2 - perfect-debounce: 1.0.0 - pkg-types: 1.0.3 - rc9: 2.1.1 + args-tokenizer: 0.3.0 + cac: 7.0.0 + jsonc-parser: 3.3.1 + package-manager-detector: 1.6.0 + semver: 7.8.4 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + unconfig: 7.5.0 + yaml: 2.9.0 - cac@6.7.14: {} + cac@7.0.0: {} - call-bind@1.0.5: + call-bind-apply-helpers@1.0.2: dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - - call-me-maybe@1.0.2: {} - callsites@3.1.0: {} + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - camelcase-css@2.0.1: {} + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001603: {} + caniuse-lite@1.0.30001799: {} ccount@2.0.1: {} - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -4160,60 +3485,26 @@ snapshots: character-reference-invalid@2.0.1: {} - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chownr@2.0.0: {} - - citty@0.1.5: - dependencies: - consola: 3.2.3 - collapse-white-space@2.1.0: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - comma-separated-tokens@2.0.3: {} - commander@4.1.1: {} - commander@7.2.0: {} - concat-map@0.0.1: {} + copy-to-clipboard@4.0.2: {} - confbox@0.1.3: {} - - consola@3.2.3: {} - - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - css-select@5.1.0: + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 css-tree@2.2.1: @@ -4226,9 +3517,7 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.1 - css-what@6.1.0: {} - - cssesc@3.0.0: {} + css-what@6.2.2: {} csso@5.0.5: dependencies: @@ -4236,56 +3525,56 @@ snapshots: csstype@3.2.3: {} - debug@4.3.4: + data-view-buffer@1.0.2: dependencies: - ms: 2.1.2 + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 debug@4.4.3: dependencies: ms: 2.1.3 - decode-named-character-reference@1.0.2: + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 deep-is@0.1.4: {} - define-data-property@1.1.1: + define-data-property@1.1.4: dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 define-properties@1.2.1: dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defu@6.1.4: {} + defu@6.1.7: {} dequal@2.0.3: {} - destr@2.0.2: {} - detect-libc@2.1.2: {} devlop@1.1.0: dependencies: dequal: 2.0.3 - didyoumean@1.2.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dlv@1.1.3: {} - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -4298,95 +3587,122 @@ snapshots: dependencies: domelementtype: 2.3.0 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dotenv@16.4.5: {} - - eastasianwidth@0.2.0: {} - - electron-to-chromium@1.4.723: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - emoji-regex@8.0.0: {} + electron-to-chromium@1.5.372: {} - emoji-regex@9.2.2: {} + enhanced-resolve@5.21.6: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 entities@4.5.0: {} - es-abstract@1.22.3: - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.2.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.2 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.22 - es-set-tostringtag@2.0.2: + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.2: dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + es-errors: 1.3.0 - es-shim-unscopables@1.0.2: + es-set-tostringtag@2.1.0: dependencies: - hasown: 2.0.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 - es-to-primitive@1.2.1: + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-date-object: 1.1.0 + is-symbol: 1.1.1 esast-util-from-estree@2.0.0: dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 devlop: 1.1.0 estree-util-visit: 2.0.0 unist-util-position-from-estree: 2.0.0 esast-util-from-js@2.0.1: dependencies: - '@types/estree-jsx': 1.0.3 - acorn: 8.11.3 + '@types/estree-jsx': 1.0.5 + acorn: 8.17.0 esast-util-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 esbuild@0.27.7: optionalDependencies: @@ -4416,34 +3732,26 @@ snapshots: '@esbuild/win32-arm64': 0.27.7 '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 - optional: true - escalade@3.1.2: {} + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} - eslint-plugin-qwik@2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.3): + eslint-plugin-qwik@2.0.0-beta.37(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.61.1(eslint@8.57.0)(typescript@5.4.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) jsx-ast-utils: 3.3.5 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-qwik@2.0.0-beta.37(eslint@8.57.0)(typescript@5.4.5): - dependencies: - '@typescript-eslint/utils': 8.61.1(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - jsx-ast-utils: 3.3.5 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-scope@7.2.2: + eslint-scope@9.1.2: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -4451,56 +3759,50 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@8.57.0: + eslint@10.5.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.5 natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@11.2.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 5.0.1 - esquery@1.5.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -4512,11 +3814,11 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 estree-util-build-jsx@3.0.1: dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-walker: 3.0.3 @@ -4525,64 +3827,40 @@ snapshots: estree-util-scope@1.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-to-js@2.0.0: dependencies: - '@types/estree-jsx': 1.0.3 - astring: 1.8.6 - source-map: 0.7.4 + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 estree-util-value-to-estree@3.5.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 estree-util-visit@2.0.0: dependencies: - '@types/estree-jsx': 1.0.3 - '@types/unist': 3.0.2 + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 esutils@2.0.3: {} - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.2.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - extend@3.0.2: {} fast-deep-equal@3.1.3: {} - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fastq@1.16.0: - dependencies: - reusify: 1.0.4 - fault@2.0.1: dependencies: format: 0.2.2 @@ -4591,47 +3869,29 @@ snapshots: optionalDependencies: picomatch: 4.0.4 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - - fill-range@7.0.1: + file-entry-cache@8.0.0: dependencies: - to-regex-range: 5.0.1 + flat-cache: 4.0.1 find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: - flatted: 3.2.9 + flatted: 3.4.2 keyv: 4.5.4 - rimraf: 3.0.2 - flat@5.0.2: {} + flatted@3.4.2: {} - flatted@3.2.9: {} - - for-each@0.3.3: + for-each@0.3.5: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - format@0.2.2: {} - fraction.js@4.3.7: {} - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs.realpath@1.0.0: {} + fraction.js@5.3.4: {} fsevents@2.3.2: optional: true @@ -4641,109 +3901,80 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: + function.prototype.name@1.2.0: dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 + call-bind: 1.0.9 + call-bound: 1.0.4 + es-define-property: 1.0.1 + es-errors: 1.3.0 functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + hasown: 2.0.4 + is-callable: 1.2.7 + is-document.all: 1.0.0 functions-have-names@1.2.3: {} - get-intrinsic@1.2.2: + generator-function@2.0.1: {} + + get-intrinsic@1.3.0: dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - - get-stream@8.0.1: {} + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 - get-symbol-description@1.0.0: + get-proto@1.0.1: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 - giget@1.2.1: + get-symbol-description@1.1.0: dependencies: - citty: 0.1.5 - consola: 3.2.3 - defu: 6.1.4 - node-fetch-native: 1.6.1 - nypm: 0.3.4 - ohash: 1.1.3 - pathe: 1.1.2 - tar: 6.2.0 + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 github-slugger@2.0.0: {} - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - glob@10.3.10: - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 5.0.0 - path-scurry: 1.10.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.3: + globalthis@1.0.4: dependencies: define-properties: 1.2.1 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 + gopd: 1.2.0 globrex@0.1.2: {} - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.2 - - graphemer@1.4.0: {} + gopd@1.2.0: {} - has-bigints@1.0.2: {} + graceful-fs@4.2.11: {} - has-flag@4.0.0: {} + has-bigints@1.1.0: {} - has-property-descriptors@1.0.1: + has-property-descriptors@1.0.2: dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.1 - has-proto@1.0.1: {} + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} - has-tostringtag@1.0.0: + has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 - hasown@2.0.0: + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -4763,44 +3994,44 @@ snapshots: dependencies: '@types/hast': 2.3.10 - hast-util-to-estree@3.1.0: + hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.3 + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.4.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 + style-to-js: 1.1.21 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: - supports-color - hast-util-to-jsx-runtime@2.3.0: + hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.4.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 - style-to-object: 1.0.6 + style-to-js: 1.1.21 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -4817,44 +4048,26 @@ snapshots: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 - property-information: 6.4.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - human-signals@5.0.0: {} - iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - ignore@5.3.0: {} - - ignore@5.3.1: {} + ignore@5.3.2: {} imagetools-core@9.1.0: {} - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - inline-style-parser@0.1.1: {} - - inline-style-parser@0.2.3: {} + inline-style-parser@0.2.7: {} - internal-slot@1.0.6: + internal-slot@1.1.0: dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 is-alphabetical@2.0.1: {} @@ -4863,40 +4076,61 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-array-buffer@3.0.2: + is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - is-bigint@1.0.4: + is-async-function@2.1.1: dependencies: - has-bigints: 1.0.2 + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - is-binary-path@2.1.0: + is-bigint@1.1.0: dependencies: - binary-extensions: 2.2.0 + has-bigints: 1.1.0 - is-boolean-object@1.1.2: + is-boolean-object@1.2.2: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bound: 1.0.4 + has-tostringtag: 1.0.2 is-callable@1.2.7: {} - is-core-module@2.13.1: + is-data-view@1.0.2: dependencies: - hasown: 2.0.0 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 - is-date-object@1.0.5: + is-date-object@1.1.0: dependencies: - has-tostringtag: 1.0.0 + call-bound: 1.0.4 + has-tostringtag: 1.0.2 is-decimal@2.0.1: {} + is-document.all@1.0.0: + dependencies: + call-bound: 1.0.4 + is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -4904,60 +4138,61 @@ snapshots: is-hexadecimal@2.0.1: {} - is-negative-zero@2.0.2: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.0 + is-map@2.0.3: {} - is-number@7.0.0: {} + is-negative-zero@2.0.3: {} - is-path-inside@3.0.3: {} + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 is-plain-obj@4.1.0: {} - is-regex@1.1.4: + is-regex@1.2.1: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 - is-shared-array-buffer@1.0.2: + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.5 + call-bound: 1.0.4 - is-stream@3.0.0: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - is-string@1.0.7: + is-symbol@1.1.1: dependencies: - has-tostringtag: 1.0.0 + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 - is-symbol@1.0.4: + is-typed-array@1.1.15: dependencies: - has-symbols: 1.0.3 + which-typed-array: 1.1.22 - is-typed-array@1.1.12: + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: dependencies: - which-typed-array: 1.1.13 + call-bound: 1.0.4 - is-weakref@1.0.2: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.5 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 isarray@2.0.5: {} isexe@2.0.0: {} - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jiti@1.21.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 + jiti@2.7.0: {} json-buffer@3.0.1: {} @@ -4965,21 +4200,19 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - jsonc-parser@3.2.0: {} + jsonc-parser@3.3.1: {} jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 keyv@4.5.4: dependencies: json-buffer: 3.0.1 - kleur@3.0.3: {} - kleur@4.1.5: {} launch-editor@2.14.1: @@ -5041,28 +4274,14 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 - lilconfig@2.1.0: {} - - lilconfig@3.0.0: {} - - lines-and-columns@1.2.4: {} - locate-path@6.0.0: dependencies: p-locate: 5.0.0 - lodash.merge@4.6.2: {} - long@4.0.0: {} longest-streak@3.1.0: {} - lru-cache@10.1.0: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5073,260 +4292,258 @@ snapshots: marked@12.0.2: {} + math-intrinsics@1.1.0: {} + mdast-util-find-and-replace@3.0.2: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.0: + mdast-util-from-markdown@2.0.3: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 - decode-named-character-reference: 1.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-decode-string: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color mdast-util-frontmatter@2.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: - supports-color mdast-util-gfm-autolink-literal@2.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.0 + micromark-util-character: 2.1.1 mdast-util-gfm-footnote@2.1.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 - micromark-util-normalize-identifier: 2.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color mdast-util-gfm-strikethrough@2.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm-table@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm-task-list-item@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm@3.1.0: dependencies: - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.3 mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.1.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.0: + mdast-util-mdx-expression@2.0.1: dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.2: + mdast-util-mdx-jsx@3.2.0: dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 - parse-entities: 4.0.1 - stringify-entities: 4.0.3 - unist-util-remove-position: 5.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.0 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-mdxjs-esm@2.0.1: dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-phrasing@4.1.0: dependencies: - '@types/mdast': 4.0.3 - unist-util-is: 6.0.0 + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 - mdast-util-to-hast@13.1.0: + mdast-util-to-hast@13.2.1: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - '@ungap/structured-clone': 1.2.0 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.0 + micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 + unist-util-visit: 5.1.0 + vfile: 6.0.3 - mdast-util-to-markdown@2.1.0: + mdast-util-to-markdown@2.1.2: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 - micromark-util-decode-string: 2.0.0 - unist-util-visit: 5.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 zwitch: 2.0.4 mdast-util-to-string@4.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdn-data@2.0.28: {} mdn-data@2.0.30: {} - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromark-core-commonmark@2.0.0: + micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 - micromark-factory-destination: 2.0.0 - micromark-factory-label: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-factory-title: 2.0.0 - micromark-factory-whitespace: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-html-tag-name: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-frontmatter@2.0.0: dependencies: fault: 2.0.1 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-autolink-literal@2.1.0: dependencies: - micromark-util-character: 2.1.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-table@2.1.1: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-tagfilter@2.0.0: dependencies: - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm@3.0.0: dependencies: @@ -5336,317 +4553,292 @@ snapshots: micromark-extension-gfm-table: 2.1.1 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 - micromark-extension-mdx-expression@3.0.0: + micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-extension-mdx-jsx@3.0.0: + micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - vfile-message: 4.0.2 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 micromark-extension-mdx-md@2.0.0: dependencies: - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.0 + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 - micromark-factory-destination@2.0.0: + micromark-factory-destination@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-factory-label@2.0.0: + micromark-factory-label@2.0.1: dependencies: devlop: 1.1.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-factory-mdx-expression@2.0.1: + micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 devlop: 1.1.0 - micromark-util-character: 2.1.0 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - micromark-factory-space@2.0.0: + micromark-factory-space@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 - micromark-factory-title@2.0.0: + micromark-factory-title@2.0.1: dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-factory-whitespace@2.0.0: + micromark-factory-whitespace@2.0.1: dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-util-character@2.1.0: + micromark-util-character@2.1.1: dependencies: - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-util-chunked@2.0.0: + micromark-util-chunked@2.0.1: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 - micromark-util-classify-character@2.0.0: + micromark-util-classify-character@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-util-combine-extensions@2.0.0: + micromark-util-combine-extensions@2.0.1: dependencies: - micromark-util-chunked: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 - micromark-util-decode-numeric-character-reference@2.0.1: + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 - micromark-util-decode-string@2.0.0: + micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 2.1.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-symbol: 2.0.0 + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - micromark-util-encode@2.0.0: {} + micromark-util-encode@2.0.1: {} - micromark-util-events-to-acorn@2.0.2: + micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 - '@types/unist': 3.0.2 + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - vfile-message: 4.0.2 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 - micromark-util-html-tag-name@2.0.0: {} + micromark-util-html-tag-name@2.0.1: {} - micromark-util-normalize-identifier@2.0.0: + micromark-util-normalize-identifier@2.0.1: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 - micromark-util-resolve-all@2.0.0: + micromark-util-resolve-all@2.0.1: dependencies: - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 - micromark-util-sanitize-uri@2.0.0: + micromark-util-sanitize-uri@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-encode: 2.0.0 - micromark-util-symbol: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - micromark-util-subtokenize@2.0.0: + micromark-util-subtokenize@2.1.0: dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - micromark-util-symbol@2.0.0: {} + micromark-util-symbol@2.0.1: {} - micromark-util-types@2.0.0: {} + micromark-util-types@2.0.2: {} - micromark@4.0.0: + micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 - debug: 4.3.4 - decode-named-character-reference: 1.0.2 + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-encode: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 transitivePeerDependencies: - supports-color - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - mimic-fn@4.0.0: {} - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.4: - dependencies: - brace-expansion: 2.0.1 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mkdirp@1.0.4: {} - - mlly@1.6.1: - dependencies: - acorn: 8.11.3 - pathe: 1.1.2 - pkg-types: 1.0.3 - ufo: 1.3.2 - - ms@2.1.2: {} - ms@2.1.3: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.12: {} - nanoid@3.3.7: {} - natural-compare@1.4.0: {} - node-fetch-native@1.6.1: {} - - node-releases@2.0.14: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - npm-run-path@5.2.0: - dependencies: - path-key: 4.0.0 + node-releases@2.0.47: {} nth-check@2.1.1: dependencies: boolbase: 1.0.0 - nypm@0.3.4: - dependencies: - citty: 0.1.5 - execa: 8.0.1 - pathe: 1.1.2 - ufo: 1.3.2 - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.13.1: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} - object.assign@4.1.5: + object.assign@4.1.7: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 + call-bound: 1.0.4 define-properties: 1.2.1 - has-symbols: 1.0.3 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 object-keys: 1.1.1 - object.values@1.1.7: + object.values@1.2.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.1.2 - ohash@1.1.3: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + oxfmt@0.55.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.55.0 + '@oxfmt/binding-android-arm64': 0.55.0 + '@oxfmt/binding-darwin-arm64': 0.55.0 + '@oxfmt/binding-darwin-x64': 0.55.0 + '@oxfmt/binding-freebsd-x64': 0.55.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.55.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.55.0 + '@oxfmt/binding-linux-arm64-gnu': 0.55.0 + '@oxfmt/binding-linux-arm64-musl': 0.55.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.55.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.55.0 + '@oxfmt/binding-linux-riscv64-musl': 0.55.0 + '@oxfmt/binding-linux-s390x-gnu': 0.55.0 + '@oxfmt/binding-linux-x64-gnu': 0.55.0 + '@oxfmt/binding-linux-x64-musl': 0.55.0 + '@oxfmt/binding-openharmony-arm64': 0.55.0 + '@oxfmt/binding-win32-arm64-msvc': 0.55.0 + '@oxfmt/binding-win32-ia32-msvc': 0.55.0 + '@oxfmt/binding-win32-x64-msvc': 0.55.0 + + oxlint@1.70.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.70.0 + '@oxlint/binding-android-arm64': 1.70.0 + '@oxlint/binding-darwin-arm64': 1.70.0 + '@oxlint/binding-darwin-x64': 1.70.0 + '@oxlint/binding-freebsd-x64': 1.70.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.70.0 + '@oxlint/binding-linux-arm-musleabihf': 1.70.0 + '@oxlint/binding-linux-arm64-gnu': 1.70.0 + '@oxlint/binding-linux-arm64-musl': 1.70.0 + '@oxlint/binding-linux-ppc64-gnu': 1.70.0 + '@oxlint/binding-linux-riscv64-gnu': 1.70.0 + '@oxlint/binding-linux-riscv64-musl': 1.70.0 + '@oxlint/binding-linux-s390x-gnu': 1.70.0 + '@oxlint/binding-linux-x64-gnu': 1.70.0 + '@oxlint/binding-linux-x64-musl': 1.70.0 + '@oxlint/binding-openharmony-arm64': 1.70.0 + '@oxlint/binding-win32-arm64-msvc': 1.70.0 + '@oxlint/binding-win32-ia32-msvc': 1.70.0 + '@oxlint/binding-win32-x64-msvc': 1.70.0 p-limit@3.1.0: dependencies: @@ -5656,105 +4848,38 @@ snapshots: dependencies: p-limit: 3.1.0 - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 + package-manager-detector@1.6.0: {} - parse-entities@4.0.1: + parse-entities@4.0.2: dependencies: - '@types/unist': 2.0.10 - character-entities: 2.0.2 + '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.3.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} - path-key@4.0.0: {} - - path-parse@1.0.7: {} - - path-scurry@1.10.1: - dependencies: - lru-cache: 10.1.0 - minipass: 5.0.0 - - path-type@4.0.0: {} - - pathe@1.1.2: {} - - perfect-debounce@1.0.0: {} - - picocolors@1.0.0: {} - picocolors@1.1.1: {} - picomatch@2.3.1: {} - picomatch@4.0.4: {} - pify@2.3.0: {} + playwright-core@1.61.0: {} - pirates@4.0.6: {} - - pkg-types@1.0.3: - dependencies: - jsonc-parser: 3.2.0 - mlly: 1.6.1 - pathe: 1.1.2 - - playwright-core@1.43.1: {} - - playwright@1.43.1: + playwright@1.61.0: dependencies: - playwright-core: 1.43.1 + playwright-core: 1.61.0 optionalDependencies: fsevents: 2.3.2 - postcss-import@15.1.0(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-js@4.0.1(postcss@8.4.38): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.38 - - postcss-load-config@4.0.2(postcss@8.4.38): - dependencies: - lilconfig: 3.0.0 - yaml: 2.3.4 - optionalDependencies: - postcss: 8.4.38 - - postcss-nested@6.0.1(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.15 - - postcss-selector-parser@6.0.15: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + possible-typed-array-names@1.1.0: {} postcss-value-parser@4.2.0: {} - postcss@8.4.38: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - postcss@8.5.15: dependencies: nanoid: 3.3.12 @@ -5763,117 +4888,111 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.5.13(prettier@3.2.5): - dependencies: - prettier: 3.2.5 - - prettier@3.2.5: {} + prettier@3.8.4: + optional: true - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 + property-information@6.5.0: {} - property-information@6.4.0: {} + property-information@7.2.0: {} punycode@2.3.1: {} - queue-microtask@1.2.3: {} - - rc9@2.1.1: - dependencies: - defu: 6.1.4 - destr: 2.0.2 - flat: 5.0.2 - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + quansync@1.0.0: {} recma-build-jsx@1.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 estree-util-build-jsx: 3.0.1 - vfile: 6.0.1 + vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.11.3): + recma-jsx@1.0.1(acorn@8.17.0): dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 - unified: 11.0.4 + unified: 11.0.5 recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 esast-util-from-js: 2.0.1 - unified: 11.0.4 - vfile: 6.0.1 + unified: 11.0.5 + vfile: 6.0.3 recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 estree-util-to-js: 2.0.0 - unified: 11.0.4 - vfile: 6.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 refractor@4.9.0: dependencies: '@types/hast': 2.3.10 '@types/prismjs': 1.26.6 hastscript: 7.2.0 - parse-entities: 4.0.1 + parse-entities: 4.0.2 - regexp.prototype.flags@1.5.1: + regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 rehype-autolink-headings@7.1.0: dependencies: '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.1 hast-util-heading-rank: 3.0.0 hast-util-is-element: 3.0.0 - unified: 11.0.4 - unist-util-visit: 5.0.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 rehype-recma@1.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.0 + hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color remark-frontmatter@5.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-frontmatter: 2.0.1 micromark-extension-frontmatter: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color remark-gfm@4.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-gfm: 3.1.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-mdx@3.0.1: + remark-mdx@3.1.1: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -5882,61 +5001,26 @@ snapshots: remark-parse@11.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 - micromark-util-types: 2.0.0 - unified: 11.0.4 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-rehype@11.1.0: + remark-rehype@11.1.2: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.1.0 - unified: 11.0.4 - vfile: 6.0.1 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 remark-stringify@11.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 - - resolve-from@4.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rolldown@1.0.3: - dependencies: - '@oxc-project/types': 0.133.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.3 - '@rolldown/binding-darwin-arm64': 1.0.3 - '@rolldown/binding-darwin-x64': 1.0.3 - '@rolldown/binding-freebsd-x64': 1.0.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 - '@rolldown/binding-linux-arm64-gnu': 1.0.3 - '@rolldown/binding-linux-arm64-musl': 1.0.3 - '@rolldown/binding-linux-ppc64-gnu': 1.0.3 - '@rolldown/binding-linux-s390x-gnu': 1.0.3 - '@rolldown/binding-linux-x64-gnu': 1.0.3 - '@rolldown/binding-linux-x64-musl': 1.0.3 - '@rolldown/binding-openharmony-arm64': 1.0.3 - '@rolldown/binding-wasm32-wasi': 1.0.3 - '@rolldown/binding-win32-arm64-msvc': 1.0.3 - '@rolldown/binding-win32-x64-msvc': 1.0.3 + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 rollup@4.62.0: dependencies: @@ -5969,51 +5053,54 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.62.0 fsevents: 2.3.3 - run-parallel@1.2.0: + safe-array-concat@1.1.4: dependencies: - queue-microtask: 1.2.3 + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 - safe-array-concat@1.0.1: + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 + es-errors: 1.3.0 isarray: 2.0.5 - safe-regex-test@1.0.2: + safe-regex-test@1.1.0: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-regex: 1.1.4 + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 safer-buffer@2.1.2: {} sax@1.6.0: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - semver@7.8.4: {} set-cookie-parser@2.7.2: {} - set-function-length@1.1.1: + set-function-length@1.2.2: dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 - set-function-name@2.0.1: + set-function-name@2.0.2: dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 sharp@0.34.5: dependencies: @@ -6054,450 +5141,326 @@ snapshots: shell-quote@1.8.4: {} - side-channel@1.0.4: + side-channel-list@1.0.1: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + es-errors: 1.3.0 + object-inspect: 1.13.4 - signal-exit@4.1.0: {} - - sisteransi@1.0.5: {} + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 - slash@3.0.0: {} + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 - source-map-js@1.2.0: {} + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 source-map-js@1.2.1: {} - source-map@0.7.4: {} - source-map@0.7.6: {} space-separated-tokens@2.0.2: {} - string-argv@0.3.2: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: + stop-iteration-iterator@1.1.0: dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + es-errors: 1.3.0 + internal-slot: 1.1.0 - string.prototype.trim@1.2.8: + string.prototype.trim@1.2.11: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 - string.prototype.trimend@1.0.7: + string.prototype.trimend@1.0.10: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.1.2 - string.prototype.trimstart@1.0.7: + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.1.2 - stringify-entities@4.0.3: + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.0.1 - - strip-final-newline@3.0.0: {} - - strip-json-comments@3.1.1: {} - - style-to-object@0.4.4: - dependencies: - inline-style-parser: 0.1.1 - - style-to-object@1.0.6: + style-to-js@1.1.21: dependencies: - inline-style-parser: 0.2.3 + style-to-object: 1.0.14 - sucrase@3.35.0: + style-to-object@1.0.14: dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 10.3.10 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} + inline-style-parser: 0.2.7 svgo@3.3.3: dependencies: commander: 7.2.0 - css-select: 5.1.0 + css-select: 5.2.2 css-tree: 2.3.1 - css-what: 6.1.0 + css-what: 6.2.2 csso: 5.0.5 - picocolors: 1.0.0 + picocolors: 1.1.1 sax: 1.6.0 - tailwindcss@3.4.3: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) - postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.0.15 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - tar@6.2.0: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - text-table@0.2.0: {} + tailwindcss@4.3.1: {} - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 + tapable@2.3.3: {} - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 + tinyexec@1.2.4: {} tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toggle-selection@1.0.6: {} + tinypool@2.1.0: {} trim-lines@3.0.1: {} - trough@2.1.0: {} - - ts-api-utils@1.0.3(typescript@5.4.3): - dependencies: - typescript: 5.4.3 - - ts-api-utils@1.3.0(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - - ts-api-utils@2.5.0(typescript@5.4.3): - dependencies: - typescript: 5.4.3 + trough@2.2.0: {} - ts-api-utils@2.5.0(typescript@5.4.5): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: - typescript: 5.4.5 - - ts-interface-checker@0.1.13: {} - - tsconfck@3.0.3(typescript@5.4.3): - optionalDependencies: - typescript: 5.4.3 + typescript: 6.0.3 - tsconfck@3.0.3(typescript@5.4.5): + tsconfck@3.1.6(typescript@6.0.3): optionalDependencies: - typescript: 5.4.5 + typescript: 6.0.3 - tslib@2.6.2: + tslib@2.8.1: optional: true type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.0: + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 - typed-array-byte-length@1.0.0: + typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.0: + typed-array-byte-offset@1.0.4: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 - typed-array-length@1.0.4: + typed-array-length@1.0.8: dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - - typescript@5.4.3: {} - - typescript@5.4.5: {} + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 - ufo@1.3.2: {} + typescript@6.0.3: {} - unbox-primitive@1.0.2: + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 - undici-types@5.26.5: {} - - undici@6.10.2: {} - - undici@6.3.0: + unconfig-core@7.5.0: dependencies: - '@fastify/busboy': 2.1.0 + '@quansync/fs': 1.0.0 + quansync: 1.0.0 - unified@11.0.4: + unconfig@7.5.0: dependencies: - '@types/unist': 3.0.2 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 6.0.1 + '@quansync/fs': 1.0.0 + defu: 6.1.7 + jiti: 2.7.0 + quansync: 1.0.0 + unconfig-core: 7.5.0 + + undici-types@7.24.6: {} + + undici@8.5.0: {} unified@11.0.5: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 6.0.1 + trough: 2.2.0 + vfile: 6.0.3 - unist-util-is@6.0.0: + unist-util-is@6.0.1: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-position-from-estree@2.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.2 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.2 - unist-util-visit: 5.0.0 + '@types/unist': 3.0.3 unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 - unist-util-visit@5.0.0: + unist-util-visit@5.1.0: dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 - update-browserslist-db@1.0.13(browserslist@4.23.0): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 + browserslist: 4.28.2 + escalade: 3.2.0 picocolors: 1.1.1 uri-js@4.4.1: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: {} - uuid@8.3.2: {} - valibot@1.4.1(typescript@5.4.3): + valibot@1.4.1(typescript@6.0.3): optionalDependencies: - typescript: 5.4.3 + typescript: 6.0.3 - valibot@1.4.1(typescript@5.4.5): - optionalDependencies: - typescript: 5.4.5 - - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.1: + vfile-message@4.0.3: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 vfile@6.0.3: dependencies: - '@types/unist': 3.0.2 - vfile-message: 4.0.2 - - vite-imagetools@10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.62.0) - imagetools-core: 9.1.0 - sharp: 0.34.5 - vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) - transitivePeerDependencies: - - rollup + '@types/unist': 3.0.3 + vfile-message: 4.0.3 - vite-imagetools@10.0.0(rollup@4.62.0)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): + vite-imagetools@10.0.0(rollup@4.62.0)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.62.0) + '@rollup/pluginutils': 5.4.0(rollup@4.62.0) imagetools-core: 9.1.0 sharp: 0.34.5 - vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + vite: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - rollup - vite-tsconfig-paths@6.1.1(typescript@5.4.3)(vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): - dependencies: - debug: 4.3.4 - globrex: 0.1.2 - tsconfck: 3.0.3(typescript@5.4.3) - vite: 8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) - transitivePeerDependencies: - - supports-color - - typescript - - vite-tsconfig-paths@6.1.1(typescript@5.4.5)(vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0)): + vite-tsconfig-paths@6.1.1(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0)): dependencies: - debug: 4.3.4 + debug: 4.4.3 globrex: 0.1.2 - tsconfck: 3.0.3(typescript@5.4.5) - vite: 8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0) + tsconfck: 3.1.6(typescript@6.0.3) + vite: 7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite@8.0.16(@types/node@20.12.2)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0): + vite@7.3.5(@types/node@25.9.3)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.15 - rolldown: 1.0.3 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 20.12.2 esbuild: 0.27.7 - fsevents: 2.3.3 - jiti: 1.21.0 - yaml: 2.9.0 - - vite@8.0.16(@types/node@20.12.8)(esbuild@0.27.7)(jiti@1.21.0)(yaml@2.9.0): - dependencies: - lightningcss: 1.32.0 + fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.15 - rolldown: 1.0.3 + rollup: 4.62.0 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 20.12.8 - esbuild: 0.27.7 + '@types/node': 25.9.3 fsevents: 2.3.3 - jiti: 1.21.0 + jiti: 2.7.0 + lightningcss: 1.32.0 yaml: 2.9.0 - which-boxed-primitive@1.0.2: + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.2.0 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + which-collection@1.0.2: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 - which-typed-array@1.1.13: + which-typed-array@1.1.22: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 which@2.0.2: dependencies: isexe: 2.0.0 - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrappy@1.0.2: {} - - yallist@4.0.0: {} - - yaml@2.3.4: {} + word-wrap@1.2.5: {} yaml@2.9.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6117160..b62a3ac 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,3 +5,15 @@ packages: allowBuilds: esbuild: true sharp: true +catalog: + "@qwik.dev/core": 2.0.0-beta.37 + "@qwik.dev/router": 2.0.0-beta.37 + "@tailwindcss/vite": ^4.3.1 + "@types/node": ^25.9.3 + eslint-plugin-qwik: 2.0.0-beta.37 + oxlint: ^1.70.0 + oxfmt: ^0.55.0 + typescript: 6.0.3 + undici: ^8.5.0 + vite: ^7.3.5 + vite-tsconfig-paths: ^6.1.1 diff --git a/test/.eslintignore b/test/.eslintignore deleted file mode 100644 index 1acecc1..0000000 --- a/test/.eslintignore +++ /dev/null @@ -1,38 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts -*.spec.tsx -*.spec.ts -.netlify -pnpm-lock.yaml -package-lock.json -yarn.lock -server diff --git a/test/.eslintrc.cjs b/test/.eslintrc.cjs deleted file mode 100644 index 70dc5d0..0000000 --- a/test/.eslintrc.cjs +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:qwik/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - ecmaVersion: 2021, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ["@typescript-eslint"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "prefer-spread": "off", - "no-case-declarations": "off", - "no-console": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/consistent-type-imports": "warn", - "@typescript-eslint/no-unnecessary-condition": "warn", - }, -}; diff --git a/test/.oxfmtrc.json b/test/.oxfmtrc.json new file mode 100644 index 0000000..55c15df --- /dev/null +++ b/test/.oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "ignorePatterns": [] +} diff --git a/test/.oxlintrc.json b/test/.oxlintrc.json new file mode 100644 index 0000000..9660c8a --- /dev/null +++ b/test/.oxlintrc.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "extends": ["../.oxlintrc.json"], + "rules": { + "typescript/consistent-type-imports": "warn" + } +} diff --git a/test/.prettierignore b/test/.prettierignore deleted file mode 100644 index b62a968..0000000 --- a/test/.prettierignore +++ /dev/null @@ -1,37 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -tsconfig.tsbuildinfo -vite.config.ts -*.spec.tsx -*.spec.ts -.netlify -pnpm-lock.yaml -package-lock.json -yarn.lock -server diff --git a/test/package.json b/test/package.json index a2a75f6..c369338 100644 --- a/test/package.json +++ b/test/package.json @@ -19,27 +19,24 @@ "deploy": "echo 'Run \"npm run qwik add\" to install a server adapter'", "dev": "vite --mode ssr", "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", - "fmt": "prettier --write .", - "fmt.check": "prettier --check .", - "lint": "eslint \"src/**/*.ts*\"", + "fmt": "oxfmt", + "fmt.check": "oxfmt --check", + "lint": "oxlint src", "preview": "qwik build preview && vite preview --open", "start": "vite --open --mode ssr", "qwik": "qwik" }, "devDependencies": { - "@qwik.dev/core": "2.0.0-beta.37", - "@qwik.dev/router": "2.0.0-beta.37", - "@types/eslint": "^8.56.10", - "@types/node": "^20.12.7", - "@typescript-eslint/eslint-plugin": "^7.7.1", - "@typescript-eslint/parser": "^7.7.1", - "eslint": "^8.57.0", - "eslint-plugin-qwik": "2.0.0-beta.37", - "prettier": "^3.2.5", + "@qwik.dev/core": "catalog:", + "@qwik.dev/router": "catalog:", + "@types/node": "catalog:", + "eslint-plugin-qwik": "catalog:", + "oxlint": "catalog:", + "oxfmt": "catalog:", "qwik-sonner": "workspace:*", - "typescript": "5.4.5", - "undici": "*", - "vite": "^8.0.16", - "vite-tsconfig-paths": "^6.1.1" + "typescript": "catalog:", + "undici": "catalog:", + "vite": "catalog:", + "vite-tsconfig-paths": "catalog:" } -} +} \ No newline at end of file diff --git a/test/tsconfig.json b/test/tsconfig.json index af84829..95da62e 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -20,6 +20,5 @@ "~/*": ["./src/*"] } }, - "files": ["./.eslintrc.cjs"], "include": ["src", "./*.d.ts", "./*.config.ts", "tests"] } diff --git a/todos.md b/todos.md new file mode 100644 index 0000000..b4225ef --- /dev/null +++ b/todos.md @@ -0,0 +1,137 @@ +# qwik-sonner — pending improvements + +Backlog of improvements. Ordered by impact. Everything under "Done" already landed. + +--- + +## ✅ Done — Vite 8 / build overhaul + +- **Vite 7 → 8** in root, `website/`, and `test/` (within the qwik v2 peer range `vite >=6 <9`). + - Note: Vite 8 uses **Rolldown**. A non-fatal `INVALID_ANNOTATION` warning about a + `/*#__PURE__*/` comment originates in `@qwik.dev/core`'s minified bundle (upstream). +- **Build process overhaul** (`vite.config.ts`): single-pass multi-entry lib build, **ESM-only** + output, correct externalization of `@qwik.dev/core`. +- **`package.json`** hygiene: `@qwik.dev/core` peerDependency, `exports` lists `types` first, + `module` + `sideEffects: false`, `prepublishOnly` runs `build.types && build.lib`. + +## ✅ Done — Phase 2 (DOMPurify removed) + +`toast.title`/`toast.description` now render as text/JSX nodes (no `dangerouslySetInnerHTML`, +no DOMPurify). The library is dependency-free. (commit `c91beb2`) + +## ✅ Done — Phase 3 + most of Phase 4 (1:1 with sonner 2.0.7, Qwik v2) + +Full port to **sonner 2.0.7**. The library now matches sonner's DOM contract, CSS, and feature +set (adapted to Qwik idioms). **This is a breaking change → major version bump.** + +### DOM contract / CSS (breaking, observable) +- Renders **`data-sonner-toast` / `data-sonner-toaster` / `data-sonner-theme`** and `sonner-*` + class names (was `data-qwik-*` / `qwik-*`). `styles.css` is now sonner 2.0.7's stylesheet + verbatim. This is what lets sonner's documented CSS customization work, and it fixes the + website's `[data-sonner-toast]` query in `Position.tsx` (which was silently broken before). +- Defaults aligned to sonner: viewport offset **24px** (mobile 16px), swipe threshold **45**. +- `aria-live`/`aria-relevant`/`aria-atomic` moved to the `
    ` live region (per sonner). + +### ToasterProps +- `id` (multiple `` instances via `toasterId` routing), `mobileOffset`, + `offset` as an `Offset` object, `swipeDirections`, `customAriaLabel`. +- `theme` resolution now uses `matchMedia` (no `localStorage`), with a live `change` listener for + `theme="system"` — matches sonner. + +### ToastT / ExternalToast +- `toasterId`, per-toast `richColors`, `testId`, custom close icon (`icons.close`), + hide an icon by passing `null`, and `title`/`description` as `() => JSXOutput`. + +### toast API +- **`useSonner()`** — Qwik hook returning a `Signal` of the active toasts. +- **`toast.getToasts()` / `toast.getHistory()`**. +- **`toast.promise(...)` rewritten** to sonner 2.0.7: returns `{ unwrap }` (or `id` + `unwrap`), + handles HTTP `Response`, `Error`, JSX, and extended-result objects (`{ message, ...opts }`). + +### Behavior +- **Multi-direction swipe + drag damping** (`--swipe-amount-x/y`, `data-swipe-direction`, + `data-swiped`, right-click + text-selection guards, `getDefaultSwipeDirections`). +- Timer always pauses while the page is hidden (sonner dropped the `pauseWhenPageIsHidden` gate). +- Close button is hidden on `loading` toasts. + +### Qwik v2 idioms +- **Removed the `useVisibleTask$` mount hack.** The enter-animation `mounted` flip now runs in a + `useTask$` + `requestAnimationFrame` guarded by `isBrowser`. The remaining client-mount work + (observer subscription, system-theme resolution) uses event-based `onQVisible$` / `useOn` + (a recommended alternative, not a visible task). +- Reactive props are read via `props.*` inside tasks/computeds (Qwik destructuring-reactivity rule). + +### Bug fixes found while getting e2e green (chromium + webkit, 36/36) +- **`toast.custom` was dropping its `jsx`.** The Qwik optimizer rewrites `const { message, ...rest } + = data` into `_restProps(data, ["message"])`, which strips the `jsx` property. `state.ts#create` + now uses native spread + `delete` instead of rest-destructuring. (Watch for this anywhere a plain + object is rest-destructured.) +- **`tsconfig.lib.json` now sets `rootDir: "src/lib"`** — tsc otherwise errors TS5011 (ambiguous + common source dir) on a clean emit. Output layout under `lib-types/` is unchanged. +- **Swipe e2e specs updated to clean, axis-aligned drags** (`x` constant + `{steps}`). With + multi-direction swipe, the old single-jump-to-`x=0` paths lock the *horizontal* axis on a + bottom-right toast (a mostly-leftward, non-dismiss gesture → damped). This matches sonner's own + updated test methodology; the library dismisses real vertical/horizontal swipes correctly. +- **Focus management uses `onFocusOut$`, not `onBlur$`.** Qwik's `onBlur$` is the native + non-bubbling `blur`; React's `onBlur` is `focusout` (bubbles), so a removed descendant wasn't + caught. Also, focus is restored when the toaster **empties** (keyed off toast count) rather than + via a ref-cleanup — Qwik doesn't reset refs on unmount, so React's "ol unmount" cleanup can't be + replicated through the ref. + +### Backwards-compat shims (kept so no consumer breaks) +- `loadingIcon` (deprecated; still wired through), `pauseWhenPageIsHidden` (deprecated no-op), + Qwik-idiomatic prop names retained: `class`/`classes`/`descriptionClass`, `onClick$`/ + `onDismiss$`/`onAutoClose$`, and `Action.preventDefault` (the test app depends on it). + +--- + +## Remaining + +### Phase 4 — deferred by design +- [ ] **Context/store state model.** State is still a module-global `Observer` — **the same design + as sonner** (a singleton). Multiple `` / `toasterId` already work via + component-level filtering, so this is not required. The SSR-sharing hazard is theoretical + (toasts are client-triggered, so the singleton is empty during SSR). Revisit only if a + per-request store is ever needed. +- [ ] **`sync$` for pointer handlers** — not applicable as-is: the swipe handlers capture + component signals/state, which `sync$` cannot serialize (it only allows event + global + scope). Left as regular `$` handlers. + +### Extras (not part of the 1:1 port; intentionally out of scope) +- [x] **Q14 (`qrlMissingChunk` / `_run`) in production SSR** — `pnpm preview` threw `Code(Q14)` + because Qwik wraps every event handler with lexical captures in an internal `_run` runtime + QRL (core.mjs ~12237), and **under Vite 8 / Rolldown the production build never registered the + internal handler symbols** (`_run`/`_task`). Dev worked (it has a `_`-symbol fallback) and e2e + passed because Playwright runs against `pnpm dev`. **Root cause = Vite 8 (Rolldown).** + Resolved by **pinning `vite` to `^7` in the catalog** (Qwik peer allows `>=6 <9`). Verified: + `pnpm preview` on the test renders with 0 Q14 errors and **no workaround needed**. The + temporary `_regSymbol` workaround in `test/src/entry.ssr.tsx` and the `onLog` INVALID_ANNOTATION + suppressors in the vite configs were removed. Revisit Vite 8 only once Qwik v2 fixes Rolldown. +- [ ] **Flaky webkit swipe test** — `test/tests/basic.spec.ts:209` ("toast's dismiss callback gets + executed correctly") fails on the **webkit** project but passes on chromium. It drives a + mouse-drag swipe (`page.mouse.move/down/up`, +300px) to dismiss a toast; webkit's headless + pointer simulation doesn't reliably trigger the swipe-out → `onDismiss$`. **Not a regression:** + verified it fails identically under both Vite 7 and Vite 8, so it's environmental, not caused + by the vite downgrade. Fix idea: dispatch real `pointerdown`/`pointermove`/`pointerup` events + (with `pointerId`/`pressure`) instead of `mouse.*`, or skip on webkit. +- [x] **`pnpm lint` was broken under eslint 10** — resolved by migrating off ESLint/Prettier to + **oxlint + oxfmt**. `eslint-plugin-qwik` is now loaded through oxlint's `jsPlugins` + (`.oxlintrc.json`). Caveat: oxlint's JS-plugin runtime has no type info, so the two + type-aware Qwik rules `valid-lexical-scope` and `use-async-top` cannot run and are omitted; + the other 14 Qwik rules + `no-unused-vars` are active. +- [ ] **Toolchain**: TypeScript 5.4.5 → latest 5.x. +- [ ] **Drop `vite-tsconfig-paths`** — Vite 8 resolves tsconfig paths natively + (`resolve.tsconfigPaths: true`); the build already prints this hint. +- [x] **e2e parity with sonner 2.0.7** — ported every test from sonner's `basic.spec.ts` + (extended/error/Error-object promises, `unwrap` rejection, focus return, timed re-update, + empty-id custom dismiss, custom ARIA labels, `toasterId` routing across two Toasters, and + `testId` behaviors). `test/tests/basic.spec.ts` now passes **36/36 in chromium + webkit**. +- [ ] Optional extra coverage for features sonner itself doesn't e2e: `useSonner()`, `mobileOffset`, + `icons.close`. +- [ ] **CHANGELOG / README**: document the breaking changes (ESM-only; `@qwik.dev/core` peer dep; + `data-sonner-*` DOM contract; offset/swipe-threshold defaults). Consider npm provenance. +- [x] **Root `pnpm fmt` over-reaches** — now `oxfmt`, which respects `.gitignore` (so it skips + `lib/`, `lib-types/`, `dist/`, `server/`, caches) and each workspace owns its own + `.oxfmtrc.json`. Note: switching formatters means the first `pnpm fmt` will reformat existing + files into oxfmt's style (not yet run, to avoid a large unrelated diff). Also: oxfmt has no + plugin system, so the website's old `prettier-plugin-tailwindcss` class sorting is dropped. diff --git a/website/.eslintignore b/website/.eslintignore deleted file mode 100644 index 1acecc1..0000000 --- a/website/.eslintignore +++ /dev/null @@ -1,38 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -dist -tsconfig.tsbuildinfo -vite.config.ts -*.spec.tsx -*.spec.ts -.netlify -pnpm-lock.yaml -package-lock.json -yarn.lock -server diff --git a/website/.eslintrc.cjs b/website/.eslintrc.cjs deleted file mode 100644 index 70dc5d0..0000000 --- a/website/.eslintrc.cjs +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:qwik/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - ecmaVersion: 2021, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ["@typescript-eslint"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "prefer-spread": "off", - "no-case-declarations": "off", - "no-console": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/consistent-type-imports": "warn", - "@typescript-eslint/no-unnecessary-condition": "warn", - }, -}; diff --git a/website/.oxfmtrc.json b/website/.oxfmtrc.json new file mode 100644 index 0000000..55c15df --- /dev/null +++ b/website/.oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "ignorePatterns": [] +} diff --git a/website/.oxlintrc.json b/website/.oxlintrc.json new file mode 100644 index 0000000..9660c8a --- /dev/null +++ b/website/.oxlintrc.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "extends": ["../.oxlintrc.json"], + "rules": { + "typescript/consistent-type-imports": "warn" + } +} diff --git a/website/.prettierignore b/website/.prettierignore deleted file mode 100644 index b62a968..0000000 --- a/website/.prettierignore +++ /dev/null @@ -1,37 +0,0 @@ -**/*.log -**/.DS_Store -*. -.vscode/settings.json -.history -.yarn -bazel-* -bazel-bin -bazel-out -bazel-qwik -bazel-testlogs -dist -dist-dev -lib -lib-types -etc -external -node_modules -temp -tsc-out -tsdoc-metadata.json -target -output -rollup.config.js -build -.cache -.vscode -.rollup.cache -tsconfig.tsbuildinfo -vite.config.ts -*.spec.tsx -*.spec.ts -.netlify -pnpm-lock.yaml -package-lock.json -yarn.lock -server diff --git a/website/.prettierrc.js b/website/.prettierrc.js deleted file mode 100644 index fb4220c..0000000 --- a/website/.prettierrc.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - plugins: ['prettier-plugin-tailwindcss'], -} \ No newline at end of file diff --git a/website/package.json b/website/package.json index 51ad3c4..f7eb005 100644 --- a/website/package.json +++ b/website/package.json @@ -18,33 +18,29 @@ "deploy": "echo 'Run \"npm run qwik add\" to install a server adapter'", "dev": "vite --mode ssr", "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", - "fmt": "prettier --write .", - "fmt.check": "prettier --check .", - "lint": "eslint \"src/**/*.ts*\"", + "fmt": "oxfmt", + "fmt.check": "oxfmt --check", + "lint": "oxlint src", "preview": "qwik build preview && vite preview --open", "serve": "deno run --allow-net --allow-read --allow-env server/entry.deno.js", "start": "vite --open --mode ssr", "qwik": "qwik" }, "devDependencies": { - "@qwik.dev/core": "2.0.0-beta.37", - "@qwik.dev/router": "2.0.0-beta.37", - "@types/eslint": "8.56.1", - "@types/node": "20.12.2", - "@typescript-eslint/eslint-plugin": "7.5.0", - "@typescript-eslint/parser": "7.5.0", - "autoprefixer": "10.4.19", - "copy-to-clipboard": "3.3.3", - "eslint": "8.57.0", - "eslint-plugin-qwik": "2.0.0-beta.37", - "postcss": "8.4.38", - "prettier": "3.2.5", - "prettier-plugin-tailwindcss": "0.5.13", + "@qwik.dev/core": "catalog:", + "@qwik.dev/router": "catalog:", + "@types/node": "catalog:", + "autoprefixer": "10.5.0", + "copy-to-clipboard": "4.0.2", + "eslint-plugin-qwik": "catalog:", + "oxlint": "catalog:", + "oxfmt": "catalog:", "qwik-sonner": "workspace:*", - "tailwindcss": "3.4.3", - "typescript": "5.4.3", - "undici": "*", - "vite": "^8.0.16", - "vite-tsconfig-paths": "^6.1.1" + "tailwindcss": "4.3.1", + "typescript": "catalog:", + "undici": "catalog:", + "vite": "catalog:", + "vite-tsconfig-paths": "catalog:", + "@tailwindcss/vite": "catalog:" } } \ No newline at end of file diff --git a/website/tsconfig.json b/website/tsconfig.json index 01d6766..cc364da 100644 --- a/website/tsconfig.json +++ b/website/tsconfig.json @@ -21,6 +21,5 @@ "~/*": ["./src/*"] } }, - "files": ["./.eslintrc.cjs"], "include": ["src", "./*.d.ts", "./*.config.ts"] } From 656cce42f5cb81749511e783cd8112b2ecbf26a6 Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Wed, 17 Jun 2026 14:09:13 -0500 Subject: [PATCH 09/36] =?UTF-8?q?build:=20=F0=9F=94=A7=20Qwik=20v2=20toolc?= =?UTF-8?q?hain,=20ESM-only=20lib=20build,=20pinned=20Vite=207?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Catalog/peer-dep alignment for @qwik.dev/core, tsconfig moduleResolution "bundler" + jsxImportSource, single-pass ESM lib build, and Playwright/Vite config for the v2 router. Vite pinned to ^7 (Rolldown breaks the prod optimizer). --- .vscode/extensions.json | 4 +-- .vscode/settings.json | 7 ++--- package.json | 40 ++++++++++++++-------------- playwright.config.ts | 16 +++++------ test/.vscode/qwik-city.code-snippets | 6 +---- test/.vscode/qwik.code-snippets | 15 ++--------- test/package.json | 24 ++++++++--------- test/vite.config.ts | 13 +++------ tsconfig.json | 1 - tsconfig.lib.json | 6 ++--- vite.config.ts | 2 +- website/package.json | 24 ++++++++--------- website/tailwind.config.js | 2 +- website/vite.config.ts | 2 +- 14 files changed, 67 insertions(+), 95 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c70dc8a..adfa1d2 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,6 +2,6 @@ "recommendations": [ "oxc.oxc-vscode", "seatonjiang.gitmoji-vscode", - "vivaxy.vscode-conventional-commits", + "vivaxy.vscode-conventional-commits" ] -} \ No newline at end of file +} diff --git a/.vscode/settings.json b/.vscode/settings.json index bd14682..75d5c40 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,4 @@ { "conventionalCommits.emojiFormat": "emoji", - "conventionalCommits.scopes": [ - "website", - "test" - ], -} \ No newline at end of file + "conventionalCommits.scopes": ["website", "test"] +} diff --git a/package.json b/package.json index c03149f..3a5a177 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "name": "qwik-sonner", "version": "1.0.3", + "private": false, "description": "An opinionated toast component for Qwik.", "keywords": [ "qwik", "qwik library", - "typescript", - "toast", "qwik sonner", - "sonner" + "sonner", + "toast", + "typescript" ], "author": { "name": "diecodev", @@ -24,15 +25,15 @@ "type": "git", "url": "git+https://github.com/diecodev/qwik-sonner.git" }, - "main": "./lib/index.qwik.mjs", - "module": "./lib/index.qwik.mjs", - "qwik": "./lib/index.qwik.mjs", - "types": "./lib-types/index.d.ts", - "sideEffects": false, "files": [ "lib", "lib-types" ], + "type": "module", + "sideEffects": false, + "main": "./lib/index.qwik.mjs", + "module": "./lib/index.qwik.mjs", + "types": "./lib-types/index.d.ts", "exports": { ".": { "types": "./lib-types/index.d.ts", @@ -43,11 +44,6 @@ "import": "./lib/headless.qwik.mjs" } }, - "engines": { - "node": ">=22.x" - }, - "private": false, - "type": "module", "scripts": { "build": "qwik build", "build.lib": "vite build --mode lib", @@ -56,7 +52,7 @@ "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", "fmt": "oxfmt", "fmt.check": "oxfmt --check", - "lint": "oxlint src", + "lint": "oxlint", "release": "bumpp --commit --tag --push", "prepublishOnly": "pnpm run build.types && pnpm run build.lib", "start": "vite --open --mode ssr", @@ -64,22 +60,26 @@ "test:ui": "playwright test --ui", "qwik": "qwik" }, - "peerDependencies": { - "@qwik.dev/core": "^2.0.0-beta.37" - }, "devDependencies": { - "@tailwindcss/vite": "catalog:", "@playwright/test": "^1.61.0", "@qwik.dev/core": "catalog:", "@qwik.dev/router": "catalog:", + "@tailwindcss/vite": "catalog:", "@types/node": "catalog:", "bumpp": "11.1.0", "eslint-plugin-qwik": "catalog:", - "oxlint": "catalog:", "oxfmt": "catalog:", + "oxlint": "catalog:", "typescript": "catalog:", "undici": "catalog:", "vite": "catalog:", "vite-tsconfig-paths": "catalog:" - } + }, + "peerDependencies": { + "@qwik.dev/core": "^2.0.0-beta.37" + }, + "engines": { + "node": ">=22.x" + }, + "qwik": "./lib/index.qwik.mjs" } \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts index fb03cd1..06620e9 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,4 +1,4 @@ -import { defineConfig, devices } from '@playwright/test'; +import { defineConfig, devices } from "@playwright/test"; /** * Read environment variables from file. @@ -10,7 +10,7 @@ import { defineConfig, devices } from '@playwright/test'; * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - testDir: './test', + testDir: "./test", /* Maximum time one test can run for. */ timeout: 30 * 1000, expect: { @@ -29,7 +29,7 @@ export default defineConfig({ /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', + reporter: "html", /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { trace: "on-first-retry", @@ -44,8 +44,8 @@ export default defineConfig({ /* Configure projects for major browsers */ projects: [ { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, + name: "chromium", + use: { ...devices["Desktop Chrome"] }, }, // { @@ -54,8 +54,8 @@ export default defineConfig({ // }, { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, + name: "webkit", + use: { ...devices["Desktop Safari"] }, }, /* Test against mobile viewports. */ @@ -78,4 +78,4 @@ export default defineConfig({ // use: { channel: 'chrome' }, // }, ], -}); \ No newline at end of file +}); diff --git a/test/.vscode/qwik-city.code-snippets b/test/.vscode/qwik-city.code-snippets index 2c1e516..16332b7 100644 --- a/test/.vscode/qwik-city.code-snippets +++ b/test/.vscode/qwik-city.code-snippets @@ -3,11 +3,7 @@ "scope": "javascriptreact,typescriptreact", "prefix": "qonRequest", "description": "onRequest function for a route index", - "body": [ - "export const onRequest: RequestHandler = (request) => {", - " $0", - "};", - ], + "body": ["export const onRequest: RequestHandler = (request) => {", " $0", "};"], }, "loader$": { "scope": "javascriptreact,typescriptreact", diff --git a/test/.vscode/qwik.code-snippets b/test/.vscode/qwik.code-snippets index 62edc82..f6eb3e0 100644 --- a/test/.vscode/qwik.code-snippets +++ b/test/.vscode/qwik.code-snippets @@ -56,23 +56,12 @@ "scope": "javascriptreact,typescriptreact", "prefix": "quseTask$", "description": "useTask$() function hook", - "body": [ - "useTask$(({ track }) => {", - " track(() => $1);", - " $0", - "});", - "", - ], + "body": ["useTask$(({ track }) => {", " track(() => $1);", " $0", "});", ""], }, "useResource": { "scope": "javascriptreact,typescriptreact", "prefix": "quseResource$", "description": "useResource$() declaration", - "body": [ - "const $1 = useResource$(({ track, cleanup }) => {", - " $0", - "});", - "", - ], + "body": ["const $1 = useResource$(({ track, cleanup }) => {", " $0", "});", ""], }, } diff --git a/test/package.json b/test/package.json index c369338..06e9ef1 100644 --- a/test/package.json +++ b/test/package.json @@ -1,15 +1,7 @@ { "name": "test", - "description": "Demo App with Routing built-in (recommended)", - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "engines-annotation": "Mostly required by sharp which needs a Node-API v9 compatible runtime", "private": true, - "trustedDependencies": [ - "sharp" - ], - "trustedDependencies-annotation": "Needed for bun to allow running install scripts", + "description": "Demo App with Routing built-in (recommended)", "type": "module", "scripts": { "build": "qwik build", @@ -31,12 +23,20 @@ "@qwik.dev/router": "catalog:", "@types/node": "catalog:", "eslint-plugin-qwik": "catalog:", - "oxlint": "catalog:", "oxfmt": "catalog:", + "oxlint": "catalog:", "qwik-sonner": "workspace:*", "typescript": "catalog:", "undici": "catalog:", "vite": "catalog:", "vite-tsconfig-paths": "catalog:" - } -} \ No newline at end of file + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "engines-annotation": "Mostly required by sharp which needs a Node-API v9 compatible runtime", + "trustedDependencies": [ + "sharp" + ], + "trustedDependencies-annotation": "Needed for bun to allow running install scripts" +} diff --git a/test/vite.config.ts b/test/vite.config.ts index 5c4267d..b7e9ae3 100644 --- a/test/vite.config.ts +++ b/test/vite.config.ts @@ -68,21 +68,14 @@ export default defineConfig(({ command, mode }): UserConfig => { * @param {Object} devDependencies - List of development dependencies * @param {Object} dependencies - List of production dependencies */ -function errorOnDuplicatesPkgDeps( - devDependencies: PkgDep, - dependencies: PkgDep, -) { +function errorOnDuplicatesPkgDeps(devDependencies: PkgDep, dependencies: PkgDep) { let msg = ""; // Create an array 'duplicateDeps' by filtering devDependencies. // If a dependency also exists in dependencies, it is considered a duplicate. - const duplicateDeps = Object.keys(devDependencies).filter( - (dep) => dependencies[dep], - ); + const duplicateDeps = Object.keys(devDependencies).filter((dep) => dependencies[dep]); // include any known qwik packages - const qwikPkg = Object.keys(dependencies).filter((value) => - /qwik/i.test(value), - ); + const qwikPkg = Object.keys(dependencies).filter((value) => /qwik/i.test(value)); // any errors for missing "qwik-router-config" // [PLUGIN_ERROR]: Invalid module "@qwik-router-config" is not a valid package diff --git a/tsconfig.json b/tsconfig.json index 236415f..9bc6c1b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,4 +19,3 @@ }, "include": ["src"] } - diff --git a/tsconfig.lib.json b/tsconfig.lib.json index 593068a..2161a6c 100644 --- a/tsconfig.lib.json +++ b/tsconfig.lib.json @@ -1,10 +1,8 @@ { "extends": "./tsconfig.json", - "include": [ - "src/lib" - ], + "include": ["src/lib"], "compilerOptions": { "incremental": false, "rootDir": "src/lib" } -} \ No newline at end of file +} diff --git a/vite.config.ts b/vite.config.ts index 9cad4b2..9bb19d3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,7 +2,7 @@ import { defineConfig } from "vite"; import { qwikVite } from "@qwik.dev/core/optimizer"; import tsconfigPaths from "vite-tsconfig-paths"; import pkg from "./package.json"; -import tailwindcss from '@tailwindcss/vite' +import tailwindcss from "@tailwindcss/vite"; import { qwikRouter } from "@qwik.dev/router/vite"; type DepMap = Record; diff --git a/website/package.json b/website/package.json index f7eb005..0c0ed3e 100644 --- a/website/package.json +++ b/website/package.json @@ -1,13 +1,7 @@ { "name": "website", - "description": "Demo App with Routing built-in (recommended)", - "engines": { - "node": ">=15.0.0" - }, "private": true, - "trustedDependencies": [ - "sharp" - ], + "description": "Demo App with Routing built-in (recommended)", "type": "module", "scripts": { "build": "qwik build", @@ -29,18 +23,24 @@ "devDependencies": { "@qwik.dev/core": "catalog:", "@qwik.dev/router": "catalog:", + "@tailwindcss/vite": "catalog:", "@types/node": "catalog:", "autoprefixer": "10.5.0", "copy-to-clipboard": "4.0.2", "eslint-plugin-qwik": "catalog:", - "oxlint": "catalog:", "oxfmt": "catalog:", + "oxlint": "catalog:", "qwik-sonner": "workspace:*", "tailwindcss": "4.3.1", "typescript": "catalog:", "undici": "catalog:", "vite": "catalog:", - "vite-tsconfig-paths": "catalog:", - "@tailwindcss/vite": "catalog:" - } -} \ No newline at end of file + "vite-tsconfig-paths": "catalog:" + }, + "engines": { + "node": ">=15.0.0" + }, + "trustedDependencies": [ + "sharp" + ] +} diff --git a/website/tailwind.config.js b/website/tailwind.config.js index 1fb56b6..317cfe0 100644 --- a/website/tailwind.config.js +++ b/website/tailwind.config.js @@ -1,6 +1,6 @@ /** @type {import('tailwindcss').Config} */ export default { - content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'], + content: ["./src/**/*.{js,ts,jsx,tsx,mdx}"], theme: { extend: {}, }, diff --git a/website/vite.config.ts b/website/vite.config.ts index 89bcc9e..bebe71f 100644 --- a/website/vite.config.ts +++ b/website/vite.config.ts @@ -2,7 +2,7 @@ import { defineConfig, type UserConfig } from "vite"; import { qwikVite } from "@qwik.dev/core/optimizer"; import { qwikRouter } from "@qwik.dev/router/vite"; import tsconfigPaths from "vite-tsconfig-paths"; -import tailwindcss from '@tailwindcss/vite' +import tailwindcss from "@tailwindcss/vite"; export default defineConfig((): UserConfig => { return { From 809c359b60260064da13908128bbdc9d4eff2006 Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Wed, 17 Jun 2026 14:10:00 -0500 Subject: [PATCH 10/36] =?UTF-8?q?docs:=20=F0=9F=93=9D=20rewrite=20agent=20?= =?UTF-8?q?guidance,=20README,=20and=20v2=20backlog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AGENTS.md is now the single source of truth (CLAUDE.md/GEMINI.md point here); README/CONTRIBUTING updated for Qwik v2 + sonner 2.0.7 parity; todos.md tracks the migration. Removes stale .github/copilot-instructions.md. --- .github/copilot-instructions.md | 8 ---- AGENTS.md | 34 ++++++++--------- CONTRIBUTING.md | 7 ++-- README.md | 4 +- todos.md | 67 +++++++++++++++++++++++++++------ 5 files changed, 77 insertions(+), 43 deletions(-) delete mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 34179f0..0000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,8 +0,0 @@ -# GitHub Copilot instructions - -The full guidance for this repository lives in [AGENTS.md](../AGENTS.md). Read it before working. - -Key reminders: this is a **published Qwik library** on **Qwik v2 beta** (`@qwik.dev/core` / -`@qwik.dev/router`). Never reintroduce `@builder.io/*` imports. After changing `src/`, verify with -`pnpm build.types` + `pnpm build.lib` (root) and `pnpm build.types` in `website/` and `test/`. -Use pnpm only. TypeScript is strict — fix types instead of using `any`. diff --git a/AGENTS.md b/AGENTS.md index 04cc04d..8062175 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,27 +22,27 @@ The codebase was migrated from Qwik 1.x to **Qwik 2.0 beta** (`@qwik.dev/core` / ### v1 → v2 renames (memorize these) -| Qwik v1 | Qwik v2 | -|---|---| -| `@builder.io/qwik` | `@qwik.dev/core` | -| `@builder.io/qwik/optimizer` | `@qwik.dev/core/optimizer` | -| `@builder.io/qwik/server` | `@qwik.dev/core/server` | -| `@builder.io/qwik-city` | `@qwik.dev/router` | -| `@builder.io/qwik-city/vite` → `qwikCity()` | `@qwik.dev/router/vite` → `qwikRouter()` | -| `createQwikCity()` (middleware) | `createQwikRouter()` | -| `` | `` | -| `@qwik-city-plan` (virtual module) | `@qwik-router-config` | -| `jsxImportSource: "@builder.io/qwik"` | `jsxImportSource: "@qwik.dev/core"` | -| `qwikVite()` from `/optimizer` | **unchanged** (still `qwikVite`) | -| `renderToStream`, `renderToString` (`/server`) | **unchanged** | -| `routeLoader$`, `useLocation`, `DocumentHead`, `RequestHandler`, `RouterOutlet` | **unchanged** (now from `@qwik.dev/router`) | -| Core APIs: `component$`, `useSignal`, `useStore`, `useComputed$`, `useTask$`, `useVisibleTask$`, `useStyles$`, `$`, `Slot`, `JSXOutput`, `Signal` | **unchanged** (from `@qwik.dev/core`) | +| Qwik v1 | Qwik v2 | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | +| `@builder.io/qwik` | `@qwik.dev/core` | +| `@builder.io/qwik/optimizer` | `@qwik.dev/core/optimizer` | +| `@builder.io/qwik/server` | `@qwik.dev/core/server` | +| `@builder.io/qwik-city` | `@qwik.dev/router` | +| `@builder.io/qwik-city/vite` → `qwikCity()` | `@qwik.dev/router/vite` → `qwikRouter()` | +| `createQwikCity()` (middleware) | `createQwikRouter()` | +| `` | `` | +| `@qwik-city-plan` (virtual module) | `@qwik-router-config` | +| `jsxImportSource: "@builder.io/qwik"` | `jsxImportSource: "@qwik.dev/core"` | +| `qwikVite()` from `/optimizer` | **unchanged** (still `qwikVite`) | +| `renderToStream`, `renderToString` (`/server`) | **unchanged** | +| `routeLoader$`, `useLocation`, `DocumentHead`, `RequestHandler`, `RouterOutlet` | **unchanged** (now from `@qwik.dev/router`) | +| Core APIs: `component$`, `useSignal`, `useStore`, `useComputed$`, `useTask$`, `useVisibleTask$`, `useStyles$`, `$`, `Slot`, `JSXOutput`, `Signal` | **unchanged** (from `@qwik.dev/core`) | ### v2 behavioral gotchas already handled here (don't undo them) - **Service worker removed.** v2 uses `` for prefetching. The `src/routes/service-worker.ts` files were deleted. Keep `` in - `root.tsx` — in v2 it exists only to *unregister* stale service workers from old visitors. + `root.tsx` — in v2 it exists only to _unregister_ stale service workers from old visitors. - **`createQwikRouter()` no longer takes `qwikCityPlan`/`qwikRouterConfig`.** The router config is imported internally via `await import("@qwik-router-config")`. Pass only `{ render }` (and `manifest` where applicable). Don't add a `qwikRouterConfig` option back. @@ -51,7 +51,7 @@ The codebase was migrated from Qwik 1.x to **Qwik 2.0 beta** (`@qwik.dev/core` / - **Vite is pinned to v7** (Qwik's peer range is `>=6 <9`, so v8 installs, but **do not use it**). Vite 8 switches the bundler to **Rolldown**, and under Rolldown the Qwik optimizer fails to register its internal runtime QRL symbols (`_run`, `_task`) in the **production** build. The - result is `QWIK ERROR Code(Q14)` (`qrlMissingChunk`) during production SSR for *every* event + result is `QWIK ERROR Code(Q14)` (`qrlMissingChunk`) during production SSR for _every_ event handler that captures lexical scope — i.e. `pnpm preview` and any real deploy throw, while `pnpm dev` works (dev has a `_`-symbol fallback). e2e tests also pass because Playwright runs against `pnpm dev`. **Keep `vite` on `^7` in the catalog** until Qwik v2 fixes Rolldown support. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 947adf9..4215a7a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,8 +25,9 @@ git checkout -b feature/your-change - If you are working on the website, add "website" after the verb in the branch name. Example: - - `feature/update-readme` - - `feature-website/add-new-feature` + +- `feature/update-readme` +- `feature-website/add-new-feature` ### Commit Messages @@ -57,4 +58,4 @@ Make sure to include: If your changes require a package version update, clearly state it in the PR. Provide reasons and justifications for the version update. -Thank you for your contribution! 🚀 \ No newline at end of file +Thank you for your contribution! 🚀 diff --git a/README.md b/README.md index 8b12bb0..da26ae7 100644 --- a/README.md +++ b/README.md @@ -284,9 +284,7 @@ You can pass `onDismiss` and `onAutoClose` callbacks. `onDismiss` gets fired whe ```js toast("Event has been created", { onDismiss: $((t) => console.log(`Toast with id ${t.id} has been dismissed`)), - onAutoClose: $((t) => - console.log(`Toast with id ${t.id} has been closed automatically`) - ), + onAutoClose: $((t) => console.log(`Toast with id ${t.id} has been closed automatically`)), }); ``` diff --git a/todos.md b/todos.md index b4225ef..de9fb40 100644 --- a/todos.md +++ b/todos.md @@ -25,6 +25,7 @@ Full port to **sonner 2.0.7**. The library now matches sonner's DOM contract, CS set (adapted to Qwik idioms). **This is a breaking change → major version bump.** ### DOM contract / CSS (breaking, observable) + - Renders **`data-sonner-toast` / `data-sonner-toaster` / `data-sonner-theme`** and `sonner-*` class names (was `data-qwik-*` / `qwik-*`). `styles.css` is now sonner 2.0.7's stylesheet verbatim. This is what lets sonner's documented CSS customization work, and it fixes the @@ -33,28 +34,33 @@ set (adapted to Qwik idioms). **This is a breaking change → major version bump - `aria-live`/`aria-relevant`/`aria-atomic` moved to the `
    ` live region (per sonner). ### ToasterProps + - `id` (multiple `` instances via `toasterId` routing), `mobileOffset`, `offset` as an `Offset` object, `swipeDirections`, `customAriaLabel`. - `theme` resolution now uses `matchMedia` (no `localStorage`), with a live `change` listener for `theme="system"` — matches sonner. ### ToastT / ExternalToast + - `toasterId`, per-toast `richColors`, `testId`, custom close icon (`icons.close`), hide an icon by passing `null`, and `title`/`description` as `() => JSXOutput`. ### toast API + - **`useSonner()`** — Qwik hook returning a `Signal` of the active toasts. - **`toast.getToasts()` / `toast.getHistory()`**. - **`toast.promise(...)` rewritten** to sonner 2.0.7: returns `{ unwrap }` (or `id` + `unwrap`), handles HTTP `Response`, `Error`, JSX, and extended-result objects (`{ message, ...opts }`). ### Behavior + - **Multi-direction swipe + drag damping** (`--swipe-amount-x/y`, `data-swipe-direction`, `data-swiped`, right-click + text-selection guards, `getDefaultSwipeDirections`). - Timer always pauses while the page is hidden (sonner dropped the `pauseWhenPageIsHidden` gate). - Close button is hidden on `loading` toasts. ### Qwik v2 idioms + - **Removed the `useVisibleTask$` mount hack.** The enter-animation `mounted` flip now runs in a `useTask$` + `requestAnimationFrame` guarded by `isBrowser`. The remaining client-mount work (observer subscription, system-theme resolution) uses event-based `onQVisible$` / `useOn` @@ -62,14 +68,15 @@ set (adapted to Qwik idioms). **This is a breaking change → major version bump - Reactive props are read via `props.*` inside tasks/computeds (Qwik destructuring-reactivity rule). ### Bug fixes found while getting e2e green (chromium + webkit, 36/36) + - **`toast.custom` was dropping its `jsx`.** The Qwik optimizer rewrites `const { message, ...rest } - = data` into `_restProps(data, ["message"])`, which strips the `jsx` property. `state.ts#create` += data` into `_restProps(data, ["message"])`, which strips the `jsx` property. `state.ts#create` now uses native spread + `delete` instead of rest-destructuring. (Watch for this anywhere a plain object is rest-destructured.) - **`tsconfig.lib.json` now sets `rootDir: "src/lib"`** — tsc otherwise errors TS5011 (ambiguous common source dir) on a clean emit. Output layout under `lib-types/` is unchanged. - **Swipe e2e specs updated to clean, axis-aligned drags** (`x` constant + `{steps}`). With - multi-direction swipe, the old single-jump-to-`x=0` paths lock the *horizontal* axis on a + multi-direction swipe, the old single-jump-to-`x=0` paths lock the _horizontal_ axis on a bottom-right toast (a mostly-leftward, non-dismiss gesture → damped). This matches sonner's own updated test methodology; the library dismisses real vertical/horizontal swipes correctly. - **Focus management uses `onFocusOut$`, not `onBlur$`.** Qwik's `onBlur$` is the native @@ -79,6 +86,7 @@ set (adapted to Qwik idioms). **This is a breaking change → major version bump replicated through the ref. ### Backwards-compat shims (kept so no consumer breaks) + - `loadingIcon` (deprecated; still wired through), `pauseWhenPageIsHidden` (deprecated no-op), Qwik-idiomatic prop names retained: `class`/`classes`/`descriptionClass`, `onClick$`/ `onDismiss$`/`onAutoClose$`, and `Action.preventDefault` (the test app depends on it). @@ -88,16 +96,25 @@ set (adapted to Qwik idioms). **This is a breaking change → major version bump ## Remaining ### Phase 4 — deferred by design + - [ ] **Context/store state model.** State is still a module-global `Observer` — **the same design as sonner** (a singleton). Multiple `` / `toasterId` already work via component-level filtering, so this is not required. The SSR-sharing hazard is theoretical (toasts are client-triggered, so the singleton is empty during SSR). Revisit only if a per-request store is ever needed. -- [ ] **`sync$` for pointer handlers** — not applicable as-is: the swipe handlers capture - component signals/state, which `sync$` cannot serialize (it only allows event + global - scope). Left as regular `$` handlers. +- [x] **`sync$` for pointer-capture (swipe bug fix)** — the stateful swipe logic stays in `$` + handlers (they capture component signals, which `sync$` cannot serialize), but the + **pointer-capture lifecycle is now synchronous**: `onPointerDown$`/`onPointerUp$` are arrays + `[sync$(...), $(...)]` where the `sync$` half only touches `event`/`currentTarget` to call + `setPointerCapture` / `releasePointerCapture`. Fixes a real-browser bug where the toast + stayed glued to the cursor (even outside the window) and needed a second click to dismiss: + `setPointerCapture` ran inside a lazy `$` QRL, so on the first gesture it executed after the + async chunk fetch — out of lockstep with the browser's pointer, so the implicit release on + `pointerup` never lined up. (Synthetic Playwright pointer events can't engage real capture, + so e2e never caught it.) ### Extras (not part of the 1:1 port; intentionally out of scope) + - [x] **Q14 (`qrlMissingChunk` / `_run`) in production SSR** — `pnpm preview` threw `Code(Q14)` because Qwik wraps every event handler with lexical captures in an internal `_run` runtime QRL (core.mjs ~12237), and **under Vite 8 / Rolldown the production build never registered the @@ -107,13 +124,39 @@ set (adapted to Qwik idioms). **This is a breaking change → major version bump `pnpm preview` on the test renders with 0 Q14 errors and **no workaround needed**. The temporary `_regSymbol` workaround in `test/src/entry.ssr.tsx` and the `onLog` INVALID_ANNOTATION suppressors in the vite configs were removed. Revisit Vite 8 only once Qwik v2 fixes Rolldown. -- [ ] **Flaky webkit swipe test** — `test/tests/basic.spec.ts:209` ("toast's dismiss callback gets - executed correctly") fails on the **webkit** project but passes on chromium. It drives a - mouse-drag swipe (`page.mouse.move/down/up`, +300px) to dismiss a toast; webkit's headless - pointer simulation doesn't reliably trigger the swipe-out → `onDismiss$`. **Not a regression:** - verified it fails identically under both Vite 7 and Vite 8, so it's environmental, not caused - by the vite downgrade. Fix idea: dispatch real `pointerdown`/`pointermove`/`pointerup` events - (with `pointerId`/`pressure`) instead of `mouse.*`, or skip on webkit. +- [ ] **Flaky swipe test (webkit + chromium under load)** — `test/tests/basic.spec.ts:209` + ("toast's dismiss callback gets executed correctly") fails on **webkit**, and **also flakes on + chromium when the full suite runs in parallel** (system under load). It drives a mouse-drag + swipe (`page.mouse.move/down/up`, +300px) to dismiss a toast; the swipe-out depends on a + `Date.now()`-based velocity/threshold check, so when synthetic `mouse.*` moves are slowed by + load the gesture lands below threshold → no `onDismiss$`. **Environmental, not a regression:** + verified the baseline (no swipe/offset fixes) flakes identically in the full suite (1–3 + failures across runs), while in isolation on a quiet machine it passes 5/5. Fix idea: dispatch + real `pointerdown`/`pointermove`/`pointerup` events (with `pointerId`/`pressure`) instead of + `mouse.*`, run the swipe specs serially, or skip on webkit. +- [x] **Cross-position hover bug (offset contamination)** — with toasts at multiple positions in + one `` (e.g. a default bottom-right toast + a `position:"top-right"` toast), + hovering one stack visibly shifted toasts in the _other_ stack. Root cause: `heights` is one + Toaster-wide signal, but `toast.tsx` computed `heightIndex`/`toastsHeightBefore`/`offset` + against the **whole** array, so a lone toast inherited a phantom offset equal to the + other-position toast's height; since `expanded` is shared across position groups (sonner's + real behavior), hovering either group applied that bad offset. Fixed by filtering the offset + reads to this toast's own position (`positionHeights` computed), mirroring sonner's + `heights={heights.filter((h) => h.position == toast.position)}`. Writes to `heights` stay + global. Verified with a real-browser probe: lone toasts read `--offset:0px` and no longer move + when another position is hovered; multi-toast same-position stacks still offset correctly. +- [x] **Arbitrary toast height (identical toasts render at different sizes)** — `--initial-height` + (which drives the expanded toast height) was measured inconsistently: identical toasts got + 53.5 / 50.8 / 48.15 / 45.47 / even 0 px. Three races, all fixed in `toast.tsx` via one shared + `measureHeight` helper: (1) the mount measurement read `getBoundingClientRect().height` + **without** `height:"auto"`, so a non-front toast measured the collapsed `--front-toast-height`; + (2) it ran before layout → 0px (now deferred to `requestAnimationFrame` + zero reads ignored); + (3) web-font metrics changed the height after first paint (now re-measured on + `document.fonts.ready`). The decisive one: `getBoundingClientRect().height` **includes the + stacking `transform: scale(...)`** on non-front toasts (heights came out as natural × 0.95 / + 0.90 / 0.85), so measurement now uses **`offsetHeight`** (layout height, transform-independent). + Verified: 8/8 trials of 4 identical toasts all read 54px, while distinct content (with/without + description) still measures distinct heights (74px vs 54px). 36/36 chromium e2e pass (serial). - [x] **`pnpm lint` was broken under eslint 10** — resolved by migrating off ESLint/Prettier to **oxlint + oxfmt**. `eslint-plugin-qwik` is now loaded through oxlint's `jsPlugins` (`.oxlintrc.json`). Caveat: oxlint's JS-plugin runtime has no type info, so the two From 74981ba51f428ae53f2a0d31133912f06b101c17 Mon Sep 17 00:00:00 2001 From: Diego Diaz Date: Wed, 17 Jun 2026 14:10:44 -0500 Subject: [PATCH 11/36] =?UTF-8?q?feat(website):=20=E2=9C=A8=20migrate=20de?= =?UTF-8?q?mo=20site=20to=20Qwik=20Router=20(v2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port the docs/demo app to @qwik.dev/router (createQwikRouter, QwikRouterProvider), refresh components and styles, and align the Toaster usage with the v2 DOM contract. --- website/README.md | 4 +- website/public/manifest.json | 2 +- website/src/components/ExpandModes.tsx | 3 +- website/src/components/Hero.tsx | 10 +--- website/src/components/Other.tsx | 28 ++------- website/src/components/Position.tsx | 60 +++++++++---------- website/src/components/Types.tsx | 12 ++-- website/src/components/codeblock.module.css | 2 +- website/src/components/footer.module.css | 2 +- website/src/components/hero.module.css | 60 +++++++++++-------- .../src/components/installation.module.css | 2 +- website/src/components/other.module.css | 6 +- .../components/router-head/router-head.tsx | 16 +---- website/src/entry.ssr.tsx | 5 +- website/src/global.css | 43 +++++++++---- website/src/root.tsx | 6 +- website/src/routes/index.tsx | 9 +-- website/src/routes/styles.css | 39 ++++++++---- 18 files changed, 149 insertions(+), 160 deletions(-) diff --git a/website/README.md b/website/README.md index bcc45e4..7f6dc67 100644 --- a/website/README.md +++ b/website/README.md @@ -279,9 +279,7 @@ You can pass `onDismiss` and `onAutoClose` callbacks. `onDismiss` gets fired whe ```js toast("Event has been created", { onDismiss: $((t) => console.log(`Toast with id ${t.id} has been dismissed`)), - onAutoClose: $((t) => - console.log(`Toast with id ${t.id} has been closed automatically`) - ), + onAutoClose: $((t) => console.log(`Toast with id ${t.id} has been closed automatically`)), }); ``` diff --git a/website/public/manifest.json b/website/public/manifest.json index 0720958..7b047af 100644 --- a/website/public/manifest.json +++ b/website/public/manifest.json @@ -6,4 +6,4 @@ "display": "standalone", "background_color": "#fff", "description": "Qwik Sonner is a library that allows you to render toasters in your Qwik app with different types, positions, colors and options. Learn how to install, use and customize Qwik Sonner with documentation and examples." -} \ No newline at end of file +} diff --git a/website/src/components/ExpandModes.tsx b/website/src/components/ExpandModes.tsx index 49dec49..69e8f94 100644 --- a/website/src/components/ExpandModes.tsx +++ b/website/src/components/ExpandModes.tsx @@ -7,8 +7,7 @@ export const ExpandModes = ({ expand }: { expand: Signal }) => {

    Expand

    - You can change the amount of toasts visible through the{" "} - visibleToasts prop. + You can change the amount of toasts visible through the visibleToasts prop.

    - + GitHub
    diff --git a/website/src/components/Other.tsx b/website/src/components/Other.tsx index 8a719cd..9112c43 100644 --- a/website/src/components/Other.tsx +++ b/website/src/components/Other.tsx @@ -1,22 +1,10 @@ import { toast } from "qwik-sonner"; import { CodeBlock } from "./CodeBlock"; import styles from "./other.module.css"; -import { - $, - type Signal, - component$, - useComputed$, - useSignal, -} from "@qwik.dev/core"; +import { $, type Signal, component$, useComputed$, useSignal } from "@qwik.dev/core"; export const Other = component$( - ({ - richColors, - closeButton, - }: { - richColors: Signal; - closeButton: Signal; - }) => { + ({ richColors, closeButton }: { richColors: Signal; closeButton: Signal }) => { const allTypes = useComputed$(() => [ { name: "Rich Colors Success", @@ -78,16 +66,8 @@ export const Other = component$(

    Today at 4:00pm - "Louvre Museum"

    - - ))} -
    - `} /> + toast("Event has been created", { + description: "Monday, January 3rd at 6:00pm", + }); + }} + key={pos} + > + {pos} + + ))}
    - ); - }, -); + `} /> +
    + ); +}); diff --git a/website/src/components/Types.tsx b/website/src/components/Types.tsx index 2eca20f..9a198e5 100644 --- a/website/src/components/Types.tsx +++ b/website/src/components/Types.tsx @@ -11,8 +11,8 @@ export const Types = component$(() => {

    Types

    - You can customize the type of toast you want to render, and pass an - options object as the second argument. + You can customize the type of toast you want to render, and pass an options object as the + second argument.

    {allTypes.map((type) => ( @@ -59,16 +59,12 @@ const allTypes = [ { name: "Info", snippet: `toast.info('Be at the area 10 minutes before the event time')`, - action: $(() => - toast.info("Be at the area 10 minutes before the event time"), - ), + action: $(() => toast.info("Be at the area 10 minutes before the event time")), }, { name: "Warning", snippet: `toast.warning('Event start time cannot be earlier than 8am')`, - action: $(() => - toast.warning("Event start time cannot be earlier than 8am"), - ), + action: $(() => toast.warning("Event start time cannot be earlier than 8am")), }, { name: "Error", diff --git a/website/src/components/codeblock.module.css b/website/src/components/codeblock.module.css index 6d83d62..64e336c 100644 --- a/website/src/components/codeblock.module.css +++ b/website/src/components/codeblock.module.css @@ -34,4 +34,4 @@ .copy div { display: flex; -} \ No newline at end of file +} diff --git a/website/src/components/footer.module.css b/website/src/components/footer.module.css index ccfe821..9280d42 100644 --- a/website/src/components/footer.module.css +++ b/website/src/components/footer.module.css @@ -32,4 +32,4 @@ margin-top: 128px; padding: 16px 0; } -} \ No newline at end of file +} diff --git a/website/src/components/hero.module.css b/website/src/components/hero.module.css index ba4a48d..2d222c9 100644 --- a/website/src/components/hero.module.css +++ b/website/src/components/hero.module.css @@ -51,8 +51,12 @@ font-weight: 600; flex-shrink: 0; font-family: inherit; - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 1px 0px 0px rgba(0, 0, 0, 0.08), - 0px 2px 2px 0px rgba(0, 0, 0, 0.04), 0px 3px 3px 0px rgba(0, 0, 0, 0.02), 0px 4px 4px 0px rgba(0, 0, 0, 0.01); + box-shadow: + 0px 0px 0px 1px rgba(0, 0, 0, 0.06), + 0px 1px 0px 0px rgba(0, 0, 0, 0.08), + 0px 2px 2px 0px rgba(0, 0, 0, 0.04), + 0px 3px 3px 0px rgba(0, 0, 0, 0.02), + 0px 4px 4px 0px rgba(0, 0, 0, 0.01); position: relative; overflow: hidden; cursor: pointer; @@ -62,7 +66,9 @@ display: inline-flex; align-items: center; justify-content: center; - transition: box-shadow 200ms, background 200ms; + transition: + box-shadow 200ms, + background 200ms; width: 152px; } @@ -74,36 +80,42 @@ .button:focus-visible { outline: none; - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 1px 0px 0px rgba(0, 0, 0, 0.08), - 0px 2px 2px 0px rgba(0, 0, 0, 0.04), 0px 3px 3px 0px rgba(0, 0, 0, 0.02), 0px 4px 4px 0px rgba(0, 0, 0, 0.01), + box-shadow: + 0px 0px 0px 1px rgba(0, 0, 0, 0.06), + 0px 1px 0px 0px rgba(0, 0, 0, 0.08), + 0px 2px 2px 0px rgba(0, 0, 0, 0.04), + 0px 3px 3px 0px rgba(0, 0, 0, 0.02), + 0px 4px 4px 0px rgba(0, 0, 0, 0.01), 0 0 0 2px rgba(0, 0, 0, 0.15); } .button:after { - content: ''; + content: ""; position: absolute; top: 100%; background: blue; left: 0; width: 100%; height: 35%; - background: linear-gradient(to top, - hsl(0, 0%, 91%) 0%, - hsla(0, 0%, 91%, 0.987) 8.1%, - hsla(0, 0%, 91%, 0.951) 15.5%, - hsla(0, 0%, 91%, 0.896) 22.5%, - hsla(0, 0%, 91%, 0.825) 29%, - hsla(0, 0%, 91%, 0.741) 35.3%, - hsla(0, 0%, 91%, 0.648) 41.2%, - hsla(0, 0%, 91%, 0.55) 47.1%, - hsla(0, 0%, 91%, 0.45) 52.9%, - hsla(0, 0%, 91%, 0.352) 58.8%, - hsla(0, 0%, 91%, 0.259) 64.7%, - hsla(0, 0%, 91%, 0.175) 71%, - hsla(0, 0%, 91%, 0.104) 77.5%, - hsla(0, 0%, 91%, 0.049) 84.5%, - hsla(0, 0%, 91%, 0.013) 91.9%, - hsla(0, 0%, 91%, 0) 100%); + background: linear-gradient( + to top, + hsl(0, 0%, 91%) 0%, + hsla(0, 0%, 91%, 0.987) 8.1%, + hsla(0, 0%, 91%, 0.951) 15.5%, + hsla(0, 0%, 91%, 0.896) 22.5%, + hsla(0, 0%, 91%, 0.825) 29%, + hsla(0, 0%, 91%, 0.741) 35.3%, + hsla(0, 0%, 91%, 0.648) 41.2%, + hsla(0, 0%, 91%, 0.55) 47.1%, + hsla(0, 0%, 91%, 0.45) 52.9%, + hsla(0, 0%, 91%, 0.352) 58.8%, + hsla(0, 0%, 91%, 0.259) 64.7%, + hsla(0, 0%, 91%, 0.175) 71%, + hsla(0, 0%, 91%, 0.104) 77.5%, + hsla(0, 0%, 91%, 0.049) 84.5%, + hsla(0, 0%, 91%, 0.013) 91.9%, + hsla(0, 0%, 91%, 0) 100% + ); opacity: 0.6; transition: transform 200ms; } @@ -136,4 +148,4 @@ color: var(--gray11) !important; font-size: 14px; text-decoration: underline; -} \ No newline at end of file +} diff --git a/website/src/components/installation.module.css b/website/src/components/installation.module.css index 4e7ad68..e371265 100644 --- a/website/src/components/installation.module.css +++ b/website/src/components/installation.module.css @@ -34,4 +34,4 @@ .copy div { display: flex; -} \ No newline at end of file +} diff --git a/website/src/components/other.module.css b/website/src/components/other.module.css index 36a67c2..28fd38f 100644 --- a/website/src/components/other.module.css +++ b/website/src/components/other.module.css @@ -1,9 +1,9 @@ -ol[dir='ltr'] .headlessClose { +ol[dir="ltr"] .headlessClose { --headless-close-start: unset; --headless-close-end: 6px; } -ol[dir='rtl'] .headlessClose { +ol[dir="rtl"] .headlessClose { --headless-close-start: 6px; --headless-close-end: unset; } @@ -53,4 +53,4 @@ ol[dir='rtl'] .headlessClose { .headlessClose:hover { color: var(--gray12); -} \ No newline at end of file +} diff --git a/website/src/components/router-head/router-head.tsx b/website/src/components/router-head/router-head.tsx index 1e3da3b..592bc7b 100644 --- a/website/src/components/router-head/router-head.tsx +++ b/website/src/components/router-head/router-head.tsx @@ -15,14 +15,8 @@ export const RouterHead = component$(() => { {/* Description */} - - + + {/* Image */} @@ -42,11 +36,7 @@ export const RouterHead = component$(() => { - + diff --git a/website/src/entry.ssr.tsx b/website/src/entry.ssr.tsx index b14cd28..43f8f07 100644 --- a/website/src/entry.ssr.tsx +++ b/website/src/entry.ssr.tsx @@ -10,10 +10,7 @@ * - npm run build * */ -import { - renderToStream, - type RenderToStreamOptions, -} from "@qwik.dev/core/server"; +import { renderToStream, type RenderToStreamOptions } from "@qwik.dev/core/server"; import { manifest } from "@qwik-client-manifest"; import Root from "./root"; diff --git a/website/src/global.css b/website/src/global.css index e662c1b..19872c7 100644 --- a/website/src/global.css +++ b/website/src/global.css @@ -18,9 +18,13 @@ --gray12: hsl(0, 0%, 9%); --hover: rgb(40, 40, 40); --border-radius: 6px; - --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, - Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; - --font-mono: 'SF Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + --font-sans: + ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, + Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, + Noto Color Emoji; + --font-mono: + "SF Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, + monospace; --shiki-token-comment: var(--gray11) !important; } @@ -56,7 +60,10 @@ body { font-family: var(--font-sans); cursor: pointer; color: var(--gray12); - transition: border-color 200ms, background 200ms, box-shadow 200ms; + transition: + border-color 200ms, + background 200ms, + box-shadow 200ms; margin: 1.5rem 0 0; } @@ -69,21 +76,31 @@ body { border-color: var(--gray4); } -.button[data-active='true'] { +.button[data-active="true"] { background: var(--gray3); border-color: var(--gray7); } .button:focus-visible { outline: none; - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 1px 0px 0px rgba(0, 0, 0, 0.08), - 0px 2px 2px 0px rgba(0, 0, 0, 0.04), 0px 3px 3px 0px rgba(0, 0, 0, 0.02), 0px 4px 4px 0px rgba(0, 0, 0, 0.01), + box-shadow: + 0px 0px 0px 1px rgba(0, 0, 0, 0.06), + 0px 1px 0px 0px rgba(0, 0, 0, 0.08), + 0px 2px 2px 0px rgba(0, 0, 0, 0.04), + 0px 3px 3px 0px rgba(0, 0, 0, 0.02), + 0px 4px 4px 0px rgba(0, 0, 0, 0.01), 0 0 0 2px rgba(0, 0, 0, 0.15); } @media (max-width: 600px) { .buttons { - mask-image: linear-gradient(to right, transparent, black 16px, black calc(100% - 16px), transparent); + mask-image: linear-gradient( + to right, + transparent, + black 16px, + black calc(100% - 16px), + transparent + ); } } @@ -101,12 +118,12 @@ pre { border: 1px solid var(--gray4); } -button[title='Copy code'] { +button[title="Copy code"] { background: var(--gray2); color: var(--gray10); } -main>p { +main > p { line-height: 1.5rem !important; margin-top: 1rem !important; } @@ -115,7 +132,7 @@ main>p { color: var(--gray12) !important; } -div>a:hover { +div > a:hover { color: var(--gray12) !important; } @@ -123,6 +140,6 @@ p { color: var(--gray12) !important; } -footer>div { +footer > div { padding: 32px 24px !important; -} \ No newline at end of file +} diff --git a/website/src/root.tsx b/website/src/root.tsx index 177cdb4..f2f3261 100644 --- a/website/src/root.tsx +++ b/website/src/root.tsx @@ -1,9 +1,5 @@ import { component$ } from "@qwik.dev/core"; -import { - QwikRouterProvider, - RouterOutlet, - ServiceWorkerRegister, -} from "@qwik.dev/router"; +import { QwikRouterProvider, RouterOutlet, ServiceWorkerRegister } from "@qwik.dev/router"; import { RouterHead } from "./components/router-head/router-head"; import "./global.css"; diff --git a/website/src/routes/index.tsx b/website/src/routes/index.tsx index 8b40605..1d9f18a 100644 --- a/website/src/routes/index.tsx +++ b/website/src/routes/index.tsx @@ -11,10 +11,7 @@ import { Footer } from "../components/Footer"; export default component$(() => { const expand = useSignal(false); - const position = - useSignal>["position"]>( - "bottom-left", - ); + const position = useSignal>["position"]>("bottom-left"); const richColors = useSignal(false); const closeButton = useSignal(false); @@ -32,8 +29,8 @@ export default component$(() => {

    Due to the resumability, the{" "} {``}{" "} - component should be positioned at the beginning of where you want to - use it. This way, you won't encounter{" "} + component should be positioned at the beginning of where you want to use it. This way, you + won't encounter{" "} Date: Wed, 17 Jun 2026 14:11:35 -0500 Subject: [PATCH 12/36] =?UTF-8?q?test:=20=E2=9C=85=20port=20e2e=20harness?= =?UTF-8?q?=20to=20Qwik=20Router=20and=20expand=20suite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test app migrated to @qwik.dev/router; basic.spec.ts covers promise/extended-promise/unwrap, focus return, toasterId routing, testId, and multi-direction swipe dismissal (36/36 chromium). --- .../components/router-head/router-head.tsx | 8 +- test/src/root.tsx | 6 +- test/src/routes/index.tsx | 112 +++++-------- test/tests/basic.spec.ts | 152 +++++------------- 4 files changed, 85 insertions(+), 193 deletions(-) diff --git a/test/src/components/router-head/router-head.tsx b/test/src/components/router-head/router-head.tsx index 6c167ed..7fe7039 100644 --- a/test/src/components/router-head/router-head.tsx +++ b/test/src/components/router-head/router-head.tsx @@ -29,9 +29,7 @@ export const RouterHead = component$(() => {