diff --git a/.codepress/dev-server/Dockerfile.react-vite b/.codepress/dev-server/Dockerfile.react-vite new file mode 100644 index 0000000..4b1af3b --- /dev/null +++ b/.codepress/dev-server/Dockerfile.react-vite @@ -0,0 +1,27 @@ +# Generated by CodePress bootstrap-dev-server. +# Dev-mode image for the "react-vite" frontend (Live Dev Server). +# Edits are preserved, but running /codepress-bootstrap-dev-server again may overwrite them. +FROM public.ecr.aws/docker/library/node:26-bookworm + +RUN apt-get update \ + && apt-get install -y --no-install-recommends procps \ + && rm -rf /var/lib/apt/lists/* + +RUN npm install -g --force pnpm@10.28.2 +ENV PNPM_CONFIG_VIRTUAL_STORE_TYPE=project +WORKDIR /app + +# The Live Dev Server hydrates app dependencies onto the mounted checkout. +ENV HOSTNAME=0.0.0.0 \ + CODEPRESS_BIND_HOST=0.0.0.0 \ + PORT=5173 \ + CODEPRESS_HMR_CLIENT_PORT=443 \ + CODEPRESS_HMR_PROTOCOL=wss \ + CODEPRESS_BASE_PATH=/ + +WORKDIR /app/examples/react-vite +EXPOSE 5173 + +ENV PATH="/app/examples/react-vite/node_modules/.bin:/app/node_modules/.bin:${PATH}" + +CMD ["sh", "-c", "pnpm exec vite --host \"$CODEPRESS_BIND_HOST\" --port \"$PORT\" --strictPort"] diff --git a/.codepress/dev-server/recipe.json b/.codepress/dev-server/recipe.json new file mode 100644 index 0000000..59bf46f --- /dev/null +++ b/.codepress/dev-server/recipe.json @@ -0,0 +1,39 @@ +{ + "schema_version": 1, + "bootstrapped_at": "2026-11-05T11:12:23Z", + "discovery_branch": "codepress/bootstrap/dev-server/aa03cab1378046d1", + "frontends": [ + { + "label": "react-vite", + "description": "Example pricing page that records browser interaction evidence and UI findings locally.", + "working_dir": "examples/react-vite", + "dockerfile_path": ".codepress/dev-server/Dockerfile.react-vite", + "dev_command": "pnpm exec vite --host \"$CODEPRESS_BIND_HOST\" --port \"$PORT\" --strictPort", + "prebuild_command": "pnpm --filter @codepress/interactions-browser run build && pnpm --filter @codepress/interactions-react run build", + "prebuild_inputs": [ + "package.json", + "pnpm-workspace.yaml", + "tsconfig.json", + "packages/browser/package.json", + "packages/browser/src", + "packages/browser/tsconfig.json", + "packages/browser/tsup.config.ts", + "packages/browser/scripts/build-page-script.mjs", + "packages/react/package.json", + "packages/react/src", + "packages/react/tsconfig.json" + ], + "framework": "vite", + "package_manager": "pnpm", + "install_command": "pnpm install --frozen-lockfile", + "dependency_manifests": [ + "pnpm-lock.yaml" + ], + "dev_port": 5173, + "system_packages": [ + "procps" + ], + "size": "small" + } + ] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0ab81ff..3a17ecc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,10 +33,10 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - # The React adapter and the Playwright helpers type-check against the - # browser package's built types. - - name: Build browser package - run: pnpm --filter @codepress/interactions-browser build + # Workspace packages and the React/Vite example type-check against the + # local packages' built declarations. + - name: Build workspace packages for typecheck + run: pnpm --filter @codepress/interactions-browser build && pnpm --filter @codepress/interactions-react build && pnpm --filter @codepress/interactions-playwright build - name: Typecheck run: pnpm typecheck @@ -57,11 +57,11 @@ jobs: - name: Check the packed files (Playwright helpers) working-directory: packages/playwright - run: pnpm run build && pnpm run pack:check + run: pnpm run pack:check - name: Check the packed files (React adapter) working-directory: packages/react - run: pnpm run build && pnpm run pack:check + run: pnpm run pack:check python: name: Python tests and lint diff --git a/examples/react-vite/README.md b/examples/react-vite/README.md index d4371d3..e43aee2 100644 --- a/examples/react-vite/README.md +++ b/examples/react-vite/README.md @@ -12,11 +12,12 @@ coding agent, and prove the fix. ## Run it -You need Node.js 20.19+ (or 22.12+) and npm. +You need Node.js 20.19+ (or 22.12+) and pnpm 10.28.2. ```sh -npm install -npm run dev +# From the repository root +pnpm install +pnpm --filter interactions-example-react-vite dev ``` Open http://localhost:5173 in a desktop browser and wait a few seconds: the SDK @@ -37,7 +38,7 @@ evidence, fingerprint, viewport, route template), each with `last_seen`, the time it was last reported. In a second terminal: ```sh -npm run findings +pnpm --filter interactions-example-react-vite findings ``` prints one line per finding, most urgent first. The schemas are in @@ -50,15 +51,16 @@ recreated on the next batch) and reload the page. ## Test it ```sh -npx playwright install chromium -npm test +pnpm --filter interactions-example-react-vite exec playwright install chromium +pnpm --filter interactions-example-react-vite test ``` `tests/ui.spec.ts` opens the page at 1280x720 and calls `expectNoFindings(page)`. It fails, with a message that starts `Error: 1 UI finding on /.` and lists the finding line and its fingerprint. -Playwright starts the dev server itself, or reuses the one from `npm run dev` +Playwright starts the dev server itself, or reuses the one from +`pnpm --filter interactions-example-react-vite dev` if it is running. The test closes the page before the SDK's first flush, so it adds nothing to `.interactions/`; load the page in a browser for that. @@ -76,11 +78,11 @@ or copy that folder into your agent's skills directory. The agent reads proves it. Then: ```sh -npm test +pnpm --filter interactions-example-react-vite test ``` passes. Delete `.interactions`, reload the page, wait a few seconds and run -`npm run findings` again: the fingerprint is gone. +`pnpm --filter interactions-example-react-vite findings` again: the fingerprint is gone. ## How it works diff --git a/examples/react-vite/package.json b/examples/react-vite/package.json index 0cef415..2f6f7f4 100644 --- a/examples/react-vite/package.json +++ b/examples/react-vite/package.json @@ -11,13 +11,13 @@ "test": "playwright test" }, "dependencies": { - "@codepress/interactions-browser": "^1.0.0", - "@codepress/interactions-react": "^1.0.0", - "react": "^19.3.0", - "react-dom": "^19.3.0" + "@codepress/interactions-browser": "workspace:^", + "@codepress/interactions-react": "workspace:^", + "react": "^19.3.1", + "react-dom": "^19.3.1" }, "devDependencies": { - "@codepress/interactions-playwright": "^1.0.0", + "@codepress/interactions-playwright": "workspace:^", "@playwright/test": "^1.64.0", "@types/node": "^24.0.0", "@types/react": "^19.3.0", diff --git a/examples/react-vite/vite.config.ts b/examples/react-vite/vite.config.ts index a242367..0fd43ac 100644 --- a/examples/react-vite/vite.config.ts +++ b/examples/react-vite/vite.config.ts @@ -2,11 +2,30 @@ import react from "@vitejs/plugin-react"; import { defineConfig } from "vite"; import { localSink } from "./local-sink.ts"; +// CodePress-managed: map Live Dev Server preview URL settings into Vite. +const normalizeBasePath = (value: string | undefined) => { + if (!value || value === "/") return "/"; + return `/${value.split("/").filter(Boolean).join("/")}/`; +}; + +const previewHmrProtocol = process.env.CODEPRESS_HMR_PROTOCOL; +const previewHmrClientPort = process.env.CODEPRESS_HMR_CLIENT_PORT; +const previewHmr = + (previewHmrProtocol === "ws" || previewHmrProtocol === "wss") && previewHmrClientPort + ? { + protocol: previewHmrProtocol, + clientPort: Number(previewHmrClientPort), + } + : undefined; + export default defineConfig({ + base: normalizeBasePath(process.env.CODEPRESS_BASE_PATH), plugins: [react(), localSink(".interactions")], server: { port: 5173, strictPort: true, + ...(previewHmr ? { hmr: previewHmr } : {}), + allowedHosts: true, // Files written by the sink are output, not source: don't reload on them. watch: { ignored: ["**/.interactions/**"] }, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95c73e6..5a2ae37 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,13 +34,53 @@ importers: version: 3.9.9 tsup: specifier: ^8.5.0 - version: 8.5.1(postcss@8.5.28)(typescript@5.9.3) + version: 8.5.1(postcss@8.5.32)(typescript@5.9.3) typescript: specifier: ^5.8.3 version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.7(@types/node@24.19.2)(jsdom@26.1.0) + version: 3.2.7(@types/node@24.19.2)(jsdom@26.1.0)(lightningcss@1.33.0) + + examples/react-vite: + dependencies: + '@codepress/interactions-browser': + specifier: workspace:^ + version: link:../../packages/browser + '@codepress/interactions-react': + specifier: workspace:^ + version: link:../../packages/react + react: + specifier: ^19.3.1 + version: 19.3.1 + react-dom: + specifier: ^19.3.1 + version: 19.3.1(react@19.3.1) + devDependencies: + '@codepress/interactions-playwright': + specifier: workspace:^ + version: link:../../packages/playwright + '@playwright/test': + specifier: ^1.64.0 + version: 1.64.1 + '@types/node': + specifier: ^24.0.0 + version: 24.19.2 + '@types/react': + specifier: ^19.3.0 + version: 19.3.0 + '@types/react-dom': + specifier: ^19.3.0 + version: 19.3.0(@types/react@19.3.0) + '@vitejs/plugin-react': + specifier: ^6.2.0 + version: 6.2.1(vite@8.3.6(@types/node@24.19.2)(esbuild@0.28.2)) + typescript: + specifier: ^6.0.0 + version: 6.0.3 + vite: + specifier: ^8.3.0 + version: 8.3.6(@types/node@24.19.2)(esbuild@0.28.2) packages/browser: {} @@ -427,11 +467,113 @@ packages: os: [linux] libc: [glibc] + '@oxc-project/types@0.156.0': + resolution: {integrity: sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==} + '@playwright/test@1.64.1': resolution: {integrity: sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==} engines: {node: '>=20'} hasBin: true + '@rolldown/binding-android-arm-eabi@1.2.16': + resolution: {integrity: sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.16': + resolution: {integrity: sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.16': + resolution: {integrity: sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.16': + resolution: {integrity: sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.16': + resolution: {integrity: sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + resolution: {integrity: sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.16': + resolution: {integrity: sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.16': + resolution: {integrity: sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + resolution: {integrity: sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.16': + resolution: {integrity: sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.16': + resolution: {integrity: sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.16': + resolution: {integrity: sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.16': + resolution: {integrity: sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.16': + resolution: {integrity: sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.16': + resolution: {integrity: sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/rollup-android-arm-eabi@4.63.5': resolution: {integrity: sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg==} cpu: [arm] @@ -582,9 +724,30 @@ packages: '@types/node@24.19.2': resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==} + '@types/react-dom@19.3.0': + resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} + peerDependencies: + '@types/react': ^19.3.0 + '@types/react@19.3.0': resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} + '@vitejs/plugin-react@6.2.1': + resolution: {integrity: sha512-9KyWCij3r0+qLG3Q62vBmv0VyevmYibAtxaCIVK9o0k6CXgaajZRIe8tpfchQcdZArJ5b/7OrIz4W3b2uxVRDA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 || ^0.3.0 + babel-plugin-react-compiler: ^1.0.0 + oxc-transform-react: '>=0.152.0 <0.157.0' + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + oxc-transform-react: + optional: true + '@vitest/expect@3.2.7': resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==} @@ -701,6 +864,10 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -786,6 +953,80 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -820,6 +1061,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nwsapi@2.2.28: resolution: {integrity: sha512-IlVB7OS7qrOsVYlpnFIkETjMwT9jwvmocJmmM+GZU/PAB3uGi9Ezd7vcWhWBUnSc0ya4ppmQITOyP1ez9gg8cg==} @@ -883,6 +1129,10 @@ packages: resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.32: + resolution: {integrity: sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==} + engines: {node: ^10 || ^12 || >=14} + prettier@3.9.9: resolution: {integrity: sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==} engines: {node: '>=14'} @@ -892,10 +1142,19 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + react-dom@19.3.1: + resolution: {integrity: sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==} + peerDependencies: + react: ^19.3.1 + react@19.3.0: resolution: {integrity: sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==} engines: {node: '>=0.10.0'} + react@19.3.1: + resolution: {integrity: sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==} + engines: {node: '>=0.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -908,6 +1167,11 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + rolldown@1.2.16: + resolution: {integrity: sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.63.5: resolution: {integrity: sha512-KRWwmNLlPw5M7HcdYfm15oBv9n9LPtjzpzCIxS/phwqvPyxHSoKX6Y2YU3pxSPfy0CLquVgsx/j/hBi6OvH1Nw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -923,6 +1187,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.28.0: + resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -930,6 +1197,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} + engines: {node: '>=0.10.0'} + source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} @@ -1026,6 +1297,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -1077,6 +1353,49 @@ packages: yaml: optional: true + vite@8.3.6: + resolution: {integrity: sha512-UI7dK29NnS54Fk+mmo7o+jI6U8Fp7hDl+X5Q1k45WH+d4dSlbLVUETGQ+hfkNgvLQGyoElPj837nZyv4MBc0VA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitest@3.2.7: resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -1353,10 +1672,59 @@ snapshots: '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true + '@oxc-project/types@0.156.0': {} + '@playwright/test@1.64.1': dependencies: playwright: 1.64.1 + '@rolldown/binding-android-arm-eabi@1.2.16': + optional: true + + '@rolldown/binding-android-arm64@1.2.16': + optional: true + + '@rolldown/binding-darwin-arm64@1.2.16': + optional: true + + '@rolldown/binding-darwin-x64@1.2.16': + optional: true + + '@rolldown/binding-freebsd-x64@1.2.16': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.2.16': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-x64-musl@1.2.16': + optional: true + + '@rolldown/binding-openharmony-arm64@1.2.16': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.2.16': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.2.16': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + '@rollup/rollup-android-arm-eabi@4.63.5': optional: true @@ -1445,10 +1813,19 @@ snapshots: dependencies: undici-types: 7.24.6 + '@types/react-dom@19.3.0(@types/react@19.3.0)': + dependencies: + '@types/react': 19.3.0 + '@types/react@19.3.0': dependencies: csstype: 3.2.3 + '@vitejs/plugin-react@6.2.1(vite@8.3.6(@types/node@24.19.2)(esbuild@0.28.2))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.3.6(@types/node@24.19.2)(esbuild@0.28.2) + '@vitest/expect@3.2.7': dependencies: '@types/chai': 5.2.3 @@ -1457,13 +1834,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.7(vite@7.3.6(@types/node@24.19.2))': + '@vitest/mocker@3.2.7(vite@7.3.6(@types/node@24.19.2)(lightningcss@1.33.0))': dependencies: '@vitest/spy': 3.2.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.6(@types/node@24.19.2) + vite: 7.3.6(@types/node@24.19.2)(lightningcss@1.33.0) '@vitest/pretty-format@3.2.7': dependencies: @@ -1557,6 +1934,8 @@ snapshots: deep-eql@5.0.2: {} + detect-libc@2.1.2: {} + entities@6.0.1: {} es-module-lexer@1.7.0: {} @@ -1699,6 +2078,55 @@ snapshots: json-schema-traverse@1.0.0: {} + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -1730,6 +2158,8 @@ snapshots: nanoid@3.3.19: {} + nanoid@3.3.20: {} + nwsapi@2.2.28: {} object-assign@4.1.1: {} @@ -1760,11 +2190,11 @@ snapshots: dependencies: playwright-core: 1.64.1 - postcss-load-config@6.0.1(postcss@8.5.28): + postcss-load-config@6.0.1(postcss@8.5.32): dependencies: lilconfig: 3.1.3 optionalDependencies: - postcss: 8.5.28 + postcss: 8.5.32 postcss@8.5.28: dependencies: @@ -1772,18 +2202,52 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.32: + dependencies: + nanoid: 3.3.20 + picocolors: 1.1.1 + source-map-js: 1.2.2 + prettier@3.9.9: {} punycode@2.3.1: {} + react-dom@19.3.1(react@19.3.1): + dependencies: + react: 19.3.1 + scheduler: 0.28.0 + react@19.3.0: {} + react@19.3.1: {} + readdirp@4.1.2: {} require-from-string@2.0.2: {} resolve-from@5.0.0: {} + rolldown@1.2.16: + dependencies: + '@oxc-project/types': 0.156.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.16 + '@rolldown/binding-android-arm64': 1.2.16 + '@rolldown/binding-darwin-arm64': 1.2.16 + '@rolldown/binding-darwin-x64': 1.2.16 + '@rolldown/binding-freebsd-x64': 1.2.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.16 + '@rolldown/binding-linux-arm64-gnu': 1.2.16 + '@rolldown/binding-linux-arm64-musl': 1.2.16 + '@rolldown/binding-linux-ppc64-gnu': 1.2.16 + '@rolldown/binding-linux-s390x-gnu': 1.2.16 + '@rolldown/binding-linux-x64-gnu': 1.2.16 + '@rolldown/binding-linux-x64-musl': 1.2.16 + '@rolldown/binding-openharmony-arm64': 1.2.16 + '@rolldown/binding-win32-arm64-msvc': 1.2.16 + '@rolldown/binding-win32-x64-msvc': 1.2.16 + rollup@4.63.5: dependencies: '@types/estree': 1.0.9 @@ -1824,10 +2288,14 @@ snapshots: dependencies: xmlchars: 2.2.0 + scheduler@0.28.0: {} + siginfo@2.0.0: {} source-map-js@1.2.1: {} + source-map-js@1.2.2: {} + source-map@0.7.6: {} stackback@0.0.2: {} @@ -1891,7 +2359,7 @@ snapshots: ts-interface-checker@0.1.13: {} - tsup@8.5.1(postcss@8.5.28)(typescript@5.9.3): + tsup@8.5.1(postcss@8.5.32)(typescript@5.9.3): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -1902,7 +2370,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.5.28) + postcss-load-config: 6.0.1(postcss@8.5.32) resolve-from: 5.0.0 rollup: 4.63.5 source-map: 0.7.6 @@ -1911,7 +2379,7 @@ snapshots: tinyglobby: 0.2.17 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.5.28 + postcss: 8.5.32 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -1921,17 +2389,19 @@ snapshots: typescript@5.9.3: {} + typescript@6.0.3: {} + ufo@1.6.4: {} undici-types@7.24.6: {} - vite-node@3.2.4(@types/node@24.19.2): + vite-node@3.2.4(@types/node@24.19.2)(lightningcss@1.33.0): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.6(@types/node@24.19.2) + vite: 7.3.6(@types/node@24.19.2)(lightningcss@1.33.0) transitivePeerDependencies: - '@types/node' - jiti @@ -1946,7 +2416,7 @@ snapshots: - tsx - yaml - vite@7.3.6(@types/node@24.19.2): + vite@7.3.6(@types/node@24.19.2)(lightningcss@1.33.0): dependencies: esbuild: 0.28.2 fdir: 6.5.0(picomatch@4.0.7) @@ -1957,12 +2427,25 @@ snapshots: optionalDependencies: '@types/node': 24.19.2 fsevents: 2.3.3 + lightningcss: 1.33.0 + + vite@8.3.6(@types/node@24.19.2)(esbuild@0.28.2): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.32 + rolldown: 1.2.16 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.19.2 + esbuild: 0.28.2 + fsevents: 2.3.3 - vitest@3.2.7(@types/node@24.19.2)(jsdom@26.1.0): + vitest@3.2.7(@types/node@24.19.2)(jsdom@26.1.0)(lightningcss@1.33.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.7 - '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@24.19.2)) + '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@24.19.2)(lightningcss@1.33.0)) '@vitest/pretty-format': 3.2.7 '@vitest/runner': 3.2.7 '@vitest/snapshot': 3.2.7 @@ -1980,8 +2463,8 @@ snapshots: tinyglobby: 0.2.17 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.6(@types/node@24.19.2) - vite-node: 3.2.4(@types/node@24.19.2) + vite: 7.3.6(@types/node@24.19.2)(lightningcss@1.33.0) + vite-node: 3.2.4(@types/node@24.19.2)(lightningcss@1.33.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.19.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d662790..397c962 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,4 @@ packages: - packages/browser - packages/react - packages/playwright + - examples/react-vite