From 0cc71bc34f562e43dc6c6a36e76bd6d9684c1763 Mon Sep 17 00:00:00 2001 From: Rintaro Itokawa Date: Thu, 25 Apr 2024 11:50:27 +0900 Subject: [PATCH] feat: impl alpha top page and integration test (#16) --- .editorconfig | 3 + .github/actions/setup-playwright/action.yml | 27 ++ .github/workflows/ci.yml | 33 +- .github/workflows/release.yml | 29 ++ .gitignore | 3 + app/root.tsx | 10 + app/routes/_index/route.tsx | 24 +- app/styles/globals.css.ts | 2 + app/styles/layers.css.ts | 7 + app/styles/reset.css.ts | 212 +++++++++ app/tests/top.test.ts | 26 ++ package.json | 17 +- playwright.config.ts | 44 ++ pnpm-lock.yaml | 468 +++++++++++++++++--- vite.config.ts | 4 + 15 files changed, 804 insertions(+), 105 deletions(-) create mode 100644 .github/actions/setup-playwright/action.yml create mode 100644 .github/workflows/release.yml create mode 100644 app/styles/globals.css.ts create mode 100644 app/styles/layers.css.ts create mode 100644 app/styles/reset.css.ts create mode 100644 app/tests/top.test.ts create mode 100644 playwright.config.ts diff --git a/.editorconfig b/.editorconfig index d70a0290..4425d7c4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,3 +9,6 @@ insert_final_newline = true max_line_length = 120 tab_width = 2 trim_trailing_whitespace = true + +[*.yml] +indent_style = space diff --git a/.github/actions/setup-playwright/action.yml b/.github/actions/setup-playwright/action.yml new file mode 100644 index 00000000..0b62bcfc --- /dev/null +++ b/.github/actions/setup-playwright/action.yml @@ -0,0 +1,27 @@ +name: Setup Playwright +description: Setup Playwright environment and use cache for faster setup + +runs: + using: composite + steps: + - name: Setup | Get Playwright version + id: playwright-version + shell: bash + run: | + echo "version=$(pnpm list playwright --json | jq -r '.[].devDependencies.playwright.version')" >> $GITHUB_OUTPUT + - name: Setup | Playwright Cache + uses: actions/cache@v4 + id: playwright-cache + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }} + restore-keys: | + ${{ runner.os }}-playwright- + - name: Setup | Install Playwright (without cache) + if: steps.playwright-cache.outputs.cache-hit != 'true' + shell: bash + run: pnpm exec playwright install --with-deps + - name: Setup | Install playwright (with cache) + if: steps.playwright-cache.outputs.cache-hit == 'true' + shell: bash + run: pnpm exec playwright install-deps diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a121255..1b512579 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,20 +54,25 @@ jobs: # node-version-file: .nvmrc # - name: Test | Unit # run: pnpm run test:unit - # integration-test: - # runs-on: ubuntu-latest - # timeout-minutes: 5 - # steps: - # - name: Setup | Checkout - # uses: actions/checkout@v4.1.1 - # - name: Setup | Node.js - # uses: re-taro/actions/setup-node@v3.5.4 - # with: - # node-version-file: .nvmrc - # - name: Setup | Playwright - # uses: ./.github/actions/setup-playwright - # - name: Test | Integration - # run: pnpm run test:integration + integration-test: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Setup | Checkout + uses: actions/checkout@v4.1.3 + - name: Setup | Node.js + uses: re-taro/actions/setup-node@v3.5.4 + with: + node-version-file: .nvmrc + - name: Setup | Playwright + uses: ./.github/actions/setup-playwright + - name: Setup | Build + run: pnpm build + - name: Test | Integration + run: | + pnpm concurrently -k -s first -n "APP,TEST" -c "magenta,blue" \ + "pnpm start" \ + "pnpm wait-on http://127.0.0.1:8788 && pnpm test:integration" # storybook-test: # runs-on: ubuntu-latest # timeout-minutes: 5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..b09dcb1e --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: Release + +on: + push: + tags: + - v* + +jobs: + deploy: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Setup | Checkout + uses: actions/checkout@v4.1.3 + with: + ref: main + - name: Setup | Node.js + uses: re-taro/actions/setup-node@v3.5.4 + with: + node-version-file: .nvmrc + - name: Deploy | Build + run: pnpm build + - name: Deploy | Deploy to Cloudflare Pages + id: page + uses: cloudflare/wrangler-action@v3.4.1 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + accountId: ${{ secrets.CF_ACCOUNT_ID }} + command: pages deploy --project-name 2024-hp --directory build/client diff --git a/.gitignore b/.gitignore index b38db2f2..d398c086 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ node_modules/ build/ +.wrangler/ +playwright-report/ +test-results/ diff --git a/app/root.tsx b/app/root.tsx index aec9dab6..8ecf2f7c 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -1,6 +1,7 @@ import type { LinksFunction, MetaFunction } from "@remix-run/cloudflare"; import { Links, Meta, Outlet, Scripts, ScrollRestoration, isRouteErrorResponse, useRouteError } from "@remix-run/react"; import type { ReactNode } from "react"; +import "@/styles/globals.css"; interface Props { title?: string; @@ -43,6 +44,15 @@ export const links: LinksFunction = () => []; export const meta: MetaFunction = () => [ { charSet: "utf-8" }, { name: "viewport", content: "width=device-width" }, + { name: "description", content: "第59回鈴鹿高専祭公式サイト" }, + { name: "og:title", content: "第59回 鈴鹿高専祭" }, + { name: "og:description", content: "第59回鈴鹿高専祭公式サイト" }, + { name: "og:url", content: "https://snct-fes.info" }, + { name: "og:type", content: "website" }, + { name: "twitter:card", content: "summary_large_image" }, + { name: "twitter:title", content: "第59回 鈴鹿高専祭" }, + { name: "twitter:description", content: "第59回鈴鹿高専祭公式サイト" }, + { name: "twitter:site", content: "@KOSENFESTA" }, ]; export function ErrorBoundary() { diff --git a/app/routes/_index/route.tsx b/app/routes/_index/route.tsx index 07d43830..bb45c6c3 100644 --- a/app/routes/_index/route.tsx +++ b/app/routes/_index/route.tsx @@ -1,24 +1,8 @@ export default function Page() { return ( -
-

Welcome to Remix

- -
+
+

第59回鈴鹿高専祭、開催決定

+

続報を待て

+
); } diff --git a/app/styles/globals.css.ts b/app/styles/globals.css.ts new file mode 100644 index 00000000..3c713ff3 --- /dev/null +++ b/app/styles/globals.css.ts @@ -0,0 +1,2 @@ +import "./layers.css"; +import "./reset.css"; diff --git a/app/styles/layers.css.ts b/app/styles/layers.css.ts new file mode 100644 index 00000000..f49dcaf0 --- /dev/null +++ b/app/styles/layers.css.ts @@ -0,0 +1,7 @@ +import { globalLayer } from "@vanilla-extract/css"; + +export const reset = globalLayer("reset"); +export const component = globalLayer("component"); +export const componentBase = globalLayer({ parent: component }, "base"); +export const layout = globalLayer("layout"); +export const page = globalLayer("page"); diff --git a/app/styles/reset.css.ts b/app/styles/reset.css.ts new file mode 100644 index 00000000..d7fe6bdd --- /dev/null +++ b/app/styles/reset.css.ts @@ -0,0 +1,212 @@ +/** + * The new CSS resetを参考に、Vanilla ExtractでCSSリセットを行います。 詳しくは + * https://github.com/elad2412/the-new-css-reset/blob/main/css/reset.css + * を参照して下さい。 + */ + +import { globalStyle } from "@vanilla-extract/css"; + +import * as layers from "./layers.css"; + +/** + * Remove all the styles of the "User-Agent-Stylesheet", except for the + * 'display' property + * + * - The "symbol *" part is to solve Firefox SVG sprite bug + * - The "html" element is excluded, otherwise a bug in Chrome breaks the CSS + * hyphens property (https://github.com/elad2412/the-new-css-reset/issues/36) + */ +globalStyle( + "*:where(:not(html, iframe, canvas, img, svg, video, audio):not(svg *, symbol *))", + { + "@layer": { + [layers.reset]: { + all: "unset", + display: "revert", + }, + }, + }, +); + +/** + * Preferred box-sizing value + */ +globalStyle("*, *::before, *::after", { + "@layer": { + [layers.reset]: { + boxSizing: "border-box", + }, + }, +}); + +/** + * Fix mobile Safari increase font-size on landscape mode + */ +globalStyle("html", { + "@layer": { + [layers.reset]: { + MozTextSizeAdjust: "none", + WebkitTextSizeAdjust: "none", + textSizeAdjust: "none", + }, + }, +}); + +/** + * Reapply the pointer cursor for anchor tags + */ +globalStyle("a, button", { + "@layer": { + [layers.reset]: { + cursor: "pointer", + }, + }, +}); + +/** + * Remove list styles (bullets/numbers) + */ +globalStyle("ol, ul, menu, summary", { + "@layer": { + [layers.reset]: { + listStyle: "none", + }, + }, +}); + +/** + * For images to not be able to exceed their container + */ +globalStyle("img", { + "@layer": { + [layers.reset]: { + maxInlineSize: "100%", + maxBlockSize: "100%", + }, + }, +}); + +/** + * Removes spacing between cells in tables + */ +globalStyle("table", { + "@layer": { + [layers.reset]: { + borderCollapse: "collapse", + }, + }, +}); + +/** + * Safari - solving issue when using user-select:none on the text input + * doesn't working + */ +globalStyle("input, textarea", { + "@layer": { + [layers.reset]: { + WebkitUserSelect: "auto", + }, + }, +}); + +/** + * Revert the 'white-space' property for textarea elements on Safari + */ +globalStyle("textarea", { + "@layer": { + [layers.reset]: { + whiteSpace: "revert", + }, + }, +}); + +/** + * Minimum style to allow to style meter element + */ +globalStyle("meter", { + "@layer": { + [layers.reset]: { + WebkitAppearance: "revert", + appearance: "revert", + }, + }, +}); + +/** + * Preformatted text - use only for this feature + */ +globalStyle(":where(pre)", { + "@layer": { + [layers.reset]: { + all: "revert", + boxSizing: "border-box", + }, + }, +}); + +/** + * Reset default text opacity of input placeholder + */ +globalStyle("::placeholder", { + "@layer": { + [layers.reset]: { + color: "unset", + }, + }, +}); + +/** + * Fix the feature of 'hidden' attribute. display:revert; revert to element + * instead of attribute + */ +globalStyle(":where([hidden])", { + "@layer": { + [layers.reset]: { + display: "none", + }, + }, +}); + +/** + * Revert for bug in Chromium browsers + * + * - Fix for the content editable attribute will work properly. + * - Webkit-user-select: auto; added for Safari in case of using user-select:none + * on wrapper element + */ +globalStyle(":where([contenteditable]:not([contenteditable=\"false\"]))", { + // @ts-expect-error: -webkit-line-break is a non-standard property + "@layer": { + [layers.reset]: { + MozUserModify: "read-write", + WebkitUserModify: "read-write", + overflowWrap: "break-word", + WebkitLineBreak: "after-white-space", + WebkitUserSelect: "auto", + }, + }, +}); + +/** + * Apply back the draggable feature - exist only in Chromium and Safari + */ +globalStyle(":where([draggable=\"true\"])", { + "@layer": { + [layers.reset]: { + // @ts-expect-error: -webkit-user-drag is a non-standard property + WebkitUserDrag: "element", + }, + }, +}); + +/** + * Revert Modal native behavior + */ +globalStyle(":where(dialog:modal)", { + "@layer": { + [layers.reset]: { + all: "revert", + boxSizing: "border-box", + }, + }, +}); diff --git a/app/tests/top.test.ts b/app/tests/top.test.ts new file mode 100644 index 00000000..c085ec51 --- /dev/null +++ b/app/tests/top.test.ts @@ -0,0 +1,26 @@ +import { AxeBuilder } from "@axe-core/playwright"; +import { expect, test } from "@playwright/test"; + +test.describe("/", () => { + test.beforeEach(async ({ page }) => { + await page.goto("http://localhost:8788/"); + }); + test.describe("rendering", () => { + test("should render text", async ({ page }) => { + const heading = page.getByRole("heading", { name: "第59回鈴鹿高専祭" }); + + await expect(heading).toContainText("第59回鈴鹿高専祭"); + }); + }); + test.describe("action", () => {}); + test.describe("validation", () => {}); + test.describe("a11y", () => { + test("should not have any automatically detectable accessibility issues", async ({ + page, + }) => { + const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); + + expect(accessibilityScanResults.violations).toEqual([]); + }); + }); +}); diff --git a/package.json b/package.json index fdf0545b..50b02dd3 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,9 @@ "type": "git", "url": "https://github.com/suzuka-kosen-festa/2024-HP" }, + "sideEffects": [ + "src/styles/globals.css.ts" + ], "scripts": { "analyze": "remix vite:build --mode analyze && serve build/client", "build": "remix vite:build", @@ -21,7 +24,9 @@ "lint": "run-p -c lint:*", "lint:eslint": "eslint .", "lint:tsc": "tsc -p . --noEmit", - "start": "NODE_ENV=production wrangler pages dev build/client" + "start": "NODE_ENV=production wrangler pages dev build/client", + "test": "run-p -c test:*", + "test:integration": "playwright test" }, "dependencies": { "@remix-run/cloudflare": "2.9.1", @@ -32,15 +37,22 @@ "react-dom": "18.2.0" }, "devDependencies": { + "@axe-core/playwright": "4.9.0", "@cloudflare/workers-types": "4.20240423.0", + "@playwright/test": "1.43.1", "@re-taro/eslint-config": "4.1.0", "@remix-run/dev": "2.9.1", "@types/react": "18.2.79", "@types/react-dom": "18.2.25", + "@vanilla-extract/css": "1.14.2", + "@vanilla-extract/vite-plugin": "4.0.7", "browserslist-to-esbuild": "2.1.1", + "concurrently": "8.2.2", "eslint": "8.57.0", "eslint-plugin-format": "0.1.1", + "lightningcss": "1.24.1", "npm-run-all2": "6.1.2", + "playwright": "1.43.1", "remix-development-tools": "4.1.4", "rollup-plugin-visualizer": "5.12.0", "serve": "14.2.2", @@ -48,9 +60,10 @@ "typescript": "5.4.5", "vite": "5.2.10", "vite-tsconfig-paths": "4.3.2", + "wait-on": "7.2.0", "wrangler": "3.52.0" }, "browserslist": [ - "defaults and > 0.3%" + ">0.2% and not dead, defaults" ] } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..ed1e96e1 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,44 @@ +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "app/tests", + testMatch: "**/*.test.ts", + fullyParallel: true, + expect: { + timeout: 10 * 60 * 1000, + toHaveScreenshot: { + maxDiffPixelRatio: 0.03, + }, + }, + timeout: 5 * 60 * 1000, + // eslint-disable-next-line node/prefer-global/process + forbidOnly: !!process.env.CI, + // eslint-disable-next-line node/prefer-global/process + reporter: process.env.CI ? [["github"], ["dot"]] : [["list"], ["html"]], + use: { + headless: true, + trace: "on-first-retry", + }, + projects: [ + { + name: "chrome", + use: { ...devices["Desktop Chrome"] }, + }, + { + name: "firefox", + use: { ...devices["Desktop Firefox"] }, + }, + { + name: "webkit", + use: { ...devices["Desktop Safari"] }, + }, + { + name: "Mobile Chrome", + use: { ...devices["Pixel 7"] }, + }, + { + name: "Mobile Safari", + use: { ...devices["iPhone 12"] }, + }, + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68770a88..d1b3a691 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,36 +27,57 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) devDependencies: + '@axe-core/playwright': + specifier: 4.9.0 + version: 4.9.0(playwright-core@1.43.1) '@cloudflare/workers-types': specifier: 4.20240423.0 version: 4.20240423.0 + '@playwright/test': + specifier: 1.43.1 + version: 1.43.1 '@re-taro/eslint-config': specifier: 4.1.0 version: 4.1.0(eslint-plugin-format@0.1.1(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5) '@remix-run/dev': specifier: 2.9.1 - version: 2.9.1(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/node@20.12.7)(terser@5.30.4)(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(terser@5.30.4))(wrangler@3.52.0(@cloudflare/workers-types@4.20240423.0)) + version: 2.9.1(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4))(wrangler@3.52.0(@cloudflare/workers-types@4.20240423.0)) '@types/react': specifier: 18.2.79 version: 18.2.79 '@types/react-dom': specifier: 18.2.25 version: 18.2.25 + '@vanilla-extract/css': + specifier: 1.14.2 + version: 1.14.2 + '@vanilla-extract/vite-plugin': + specifier: 4.0.7 + version: 4.0.7(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)) browserslist-to-esbuild: specifier: 2.1.1 version: 2.1.1(browserslist@4.23.0) + concurrently: + specifier: 8.2.2 + version: 8.2.2 eslint: specifier: 8.57.0 version: 8.57.0 eslint-plugin-format: specifier: 0.1.1 version: 0.1.1(eslint@8.57.0) + lightningcss: + specifier: 1.24.1 + version: 1.24.1 npm-run-all2: specifier: 6.1.2 version: 6.1.2 + playwright: + specifier: 1.43.1 + version: 1.43.1 remix-development-tools: specifier: 4.1.4 - version: 4.1.4(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.10(@types/node@20.12.7)(terser@5.30.4)) + version: 4.1.4(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)) rollup-plugin-visualizer: specifier: 5.12.0 version: 5.12.0(rollup@4.14.3) @@ -71,10 +92,13 @@ importers: version: 5.4.5 vite: specifier: 5.2.10 - version: 5.2.10(@types/node@20.12.7)(terser@5.30.4) + version: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) vite-tsconfig-paths: specifier: 4.3.2 - version: 4.3.2(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(terser@5.30.4)) + version: 4.3.2(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)) + wait-on: + specifier: 7.2.0 + version: 7.2.0 wrangler: specifier: 3.52.0 version: 3.52.0(@cloudflare/workers-types@4.20240423.0) @@ -96,6 +120,11 @@ packages: '@antfu/install-pkg@0.3.2': resolution: {integrity: sha512-FFYqME8+UHlPnRlX/vn+8cTD4Wo/nG/lzRxpABs3XANBmdJdNImVz3QvjNAE/W3PSCNbG387FOz8o5WelnWOlg==} + '@axe-core/playwright@4.9.0': + resolution: {integrity: sha512-Q1Lz75dNsX38jof+aev7RficDMdH/HLOLySkDdXR0fUoeFcLdw4UNgDO2CNNP4CTpoesEdfYRdd6VmDXjhBgbA==} + peerDependencies: + playwright-core: '>= 1.0.0' + '@babel/code-frame@7.24.2': resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} @@ -799,6 +828,12 @@ packages: '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -883,6 +918,11 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@playwright/test@1.43.1': + resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} + engines: {node: '>=16'} + hasBin: true + '@radix-ui/number@1.0.1': resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} @@ -1375,6 +1415,15 @@ packages: cpu: [x64] os: [win32] + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@stylistic/eslint-plugin-js@1.7.0': resolution: {integrity: sha512-PN6On/+or63FGnhhMKSQfYcWutRlzOiYlVdLM6yN7lquoBTqUJHYnl4TA4MHwiAt46X5gRxDr1+xPZ1lOLcL+Q==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1588,9 +1637,17 @@ packages: '@vanilla-extract/integration@6.5.0': resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} + '@vanilla-extract/integration@7.1.2': + resolution: {integrity: sha512-jpjw0L3P1E+U9L8OAFVMGpPFbNPD+/Vpfew7oOKBYipCrRZEqShu3WLXuUxjXz/mcIH7KCS5nasIdy2VclbEaQ==} + '@vanilla-extract/private@1.0.4': resolution: {integrity: sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg==} + '@vanilla-extract/vite-plugin@4.0.7': + resolution: {integrity: sha512-uRAFWdq5Eq0ybpgW2P0LNOw8eW+MTg/OFo5K0Hsl2cKu/Tu2tabCsBf6vNjfhDrm4jBShHy1wJIVcYxf6sczVQ==} + peerDependencies: + vite: ^4.0.3 || ^5.0.0 + '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -1624,7 +1681,6 @@ packages: acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} - hasBin: true aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} @@ -1724,10 +1780,20 @@ packages: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axe-core@4.9.0: + resolution: {integrity: sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==} + engines: {node: '>=4'} + + axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -1743,7 +1809,6 @@ packages: beautify@0.0.8: resolution: {integrity: sha512-1iF6Ey2qxDkm6bPgKcoXUmwFDpoRi5IgwefQDDQBRLxlZAAYwcULoQ2IdBArXZuSsuL7AT+KvZI9xZVLeUZPRg==} - hasBin: true binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} @@ -1779,14 +1844,12 @@ packages: browserslist-to-esbuild@2.1.1: resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} engines: {node: '>=18'} - hasBin: true peerDependencies: browserslist: '*' browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -1950,6 +2013,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1979,6 +2046,11 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2035,12 +2107,10 @@ packages: cssbeautify@0.3.1: resolution: {integrity: sha512-ljnSOCOiMbklF+dwPbpooyB78foId02vUrTDogWzu6ca2DCNB7Kc/BHEGBnYOlUYtwXvSW0mWTwaiO2pwFIoRg==} - hasBin: true cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} - hasBin: true csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2175,6 +2245,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -2187,6 +2261,10 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -2219,7 +2297,6 @@ packages: editorconfig@1.0.4: resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} engines: {node: '>=14'} - hasBin: true ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -2289,7 +2366,6 @@ packages: esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} - hasBin: true esbuild@0.17.6: resolution: {integrity: sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==} @@ -2299,7 +2375,6 @@ packages: esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} - hasBin: true escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} @@ -2490,7 +2565,6 @@ packages: eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -2630,6 +2704,15 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -2637,6 +2720,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -2667,6 +2754,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2737,7 +2829,6 @@ packages: glob@10.3.12: resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} engines: {node: '>=16 || 14 >=14.17'} - hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -2823,7 +2914,6 @@ packages: html@1.0.0: resolution: {integrity: sha512-lw/7YsdKiP3kk5PnR1INY17iJuzdAtJewxr14ozKJWbbR97znovZ0mh+WEMZ8rjc3lgTK+ID/htTjuyGKB52Kw==} - hasBin: true http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -2962,7 +3052,6 @@ packages: is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -3106,10 +3195,12 @@ packages: javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + joi@17.13.0: + resolution: {integrity: sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==} + js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} - hasBin: true js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -3120,7 +3211,6 @@ packages: js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true jsdoc-type-pratt-parser@4.0.0: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} @@ -3128,7 +3218,6 @@ packages: jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} @@ -3138,7 +3227,6 @@ packages: jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} - hasBin: true json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -3189,6 +3277,64 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-darwin-arm64@1.24.1: + resolution: {integrity: sha512-1jQ12jBy+AE/73uGQWGSafK5GoWgmSiIQOGhSEXiFJSZxzV+OXIx+a9h2EYHxdJfX864M+2TAxWPWb0Vv+8y4w==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.24.1: + resolution: {integrity: sha512-R4R1d7VVdq2mG4igMU+Di8GPf0b64ZLnYVkubYnGG0Qxq1KaXQtAzcLI43EkpnoWvB/kUg8JKCWH4S13NfiLcQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.24.1: + resolution: {integrity: sha512-z6NberUUw5ALES6Ixn2shmjRRrM1cmEn1ZQPiM5IrZ6xHHL5a1lPin9pRv+w6eWfcrEo+qGG6R9XfJrpuY3e4g==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.24.1: + resolution: {integrity: sha512-NLQLnBQW/0sSg74qLNI8F8QKQXkNg4/ukSTa+XhtkO7v3BnK19TS1MfCbDHt+TTdSgNEBv0tubRuapcKho2EWw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.24.1: + resolution: {integrity: sha512-AQxWU8c9E9JAjAi4Qw9CvX2tDIPjgzCTrZCSXKELfs4mCwzxRkHh2RCxX8sFK19RyJoJAjA/Kw8+LMNRHS5qEg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.24.1: + resolution: {integrity: sha512-JCgH/SrNrhqsguUA0uJUM1PvN5+dVuzPIlXcoWDHSv2OU/BWlj2dUYr3XNzEw748SmNZPfl2NjQrAdzaPOn1lA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.24.1: + resolution: {integrity: sha512-TYdEsC63bHV0h47aNRGN3RiK7aIeco3/keN4NkoSQ5T8xk09KHuBdySltWAvKLgT8JvR+ayzq8ZHnL1wKWY0rw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.24.1: + resolution: {integrity: sha512-HLfzVik3RToot6pQ2Rgc3JhfZkGi01hFetHt40HrUMoeKitLoqUUT5owM6yTZPTytTUW9ukLBJ1pc3XNMSvlLw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-x64-msvc@1.24.1: + resolution: {integrity: sha512-joEupPjYJ7PjZtDsS5lzALtlAudAbgIBMGJPNeFe5HfdmJXFd13ECmEM+5rXNxYVMRHua2w8132R6ab5Z6K9Ow==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.24.1: + resolution: {integrity: sha512-kUpHOLiH5GB0ERSv4pxqlL0RYKnOXtgGtVe7shDGfhS0AZ4D1ouKFYAcLcZhql8aMspDNzaUCumGHZ78tb2fTg==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.1: resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} engines: {node: '>=14'} @@ -3237,7 +3383,6 @@ packages: loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} @@ -3450,12 +3595,10 @@ packages: mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} - hasBin: true mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} - hasBin: true mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -3472,7 +3615,6 @@ packages: miniflare@3.20240419.0: resolution: {integrity: sha512-fIev1PP4H+fQp5FtvzHqRY2v5s+jxh/a0xAhvM5fBNXvxWX7Zod1OatXfXwYbse3hqO3KeVMhb0osVtrW0NwJg==} engines: {node: '>=16.13'} - hasBin: true minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3553,12 +3695,10 @@ packages: mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -3580,7 +3720,6 @@ packages: nopt@7.2.0: resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -3612,7 +3751,6 @@ packages: npm-run-all2@6.1.2: resolution: {integrity: sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==} engines: {node: ^14.18.0 || >=16.0.0, npm: '>= 8'} - hasBin: true npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -3814,11 +3952,20 @@ packages: pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} - hasBin: true pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + playwright-core@1.43.1: + resolution: {integrity: sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==} + engines: {node: '>=16'} + hasBin: true + + playwright@1.43.1: + resolution: {integrity: sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==} + engines: {node: '>=16'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -3901,7 +4048,6 @@ packages: prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} - hasBin: true pretty-ms@7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} @@ -3942,6 +4088,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} @@ -3979,7 +4128,6 @@ packages: rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true react-diff-viewer-continued@3.4.0: resolution: {integrity: sha512-kMZmUyb3Pv5L9vUtCfIGYsdOHs8mUojblGy1U1Sm0D7FhAOEsH9QhnngEIRo5hXWIPNGupNRJls1TJ6Eqx84eg==} @@ -4079,7 +4227,6 @@ packages: regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} @@ -4094,7 +4241,6 @@ packages: regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true remark-frontmatter@4.0.1: resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} @@ -4144,11 +4290,9 @@ packages: resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -4164,11 +4308,9 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. rollup-plugin-node-polyfills@0.2.1: resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} @@ -4176,7 +4318,6 @@ packages: rollup-plugin-visualizer@5.12.0: resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} engines: {node: '>=14'} - hasBin: true peerDependencies: rollup: 2.x || 3.x || 4.x peerDependenciesMeta: @@ -4189,11 +4330,13 @@ packages: rollup@4.14.3: resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -4224,16 +4367,13 @@ packages: semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} - hasBin: true send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -4249,7 +4389,6 @@ packages: serve@14.2.2: resolution: {integrity: sha512-MktTGv3ooijGxd67iQVocNdiHaOdNnEApGj7At4qHUN44XDaLFfrqbEtj5mXf+QNqyig/VdHYMRTXWRQj6TEbw==} engines: {node: '>= 14'} - hasBin: true set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} @@ -4315,11 +4454,13 @@ packages: sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -4437,6 +4578,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4466,7 +4611,6 @@ packages: terser@5.30.4: resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} engines: {node: '>=10'} - hasBin: true text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -4493,6 +4637,10 @@ packages: toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4508,7 +4656,6 @@ packages: tsconfck@3.0.3: resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==} engines: {node: ^18 || >=20} - hasBin: true peerDependencies: typescript: ^5.0.0 peerDependenciesMeta: @@ -4571,7 +4718,6 @@ packages: typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} - hasBin: true ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} @@ -4642,7 +4788,6 @@ packages: update-browserslist-db@1.0.13: resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4684,7 +4829,6 @@ packages: uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} @@ -4711,7 +4855,6 @@ packages: vite-node@1.5.0: resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true vite-tsconfig-paths@4.3.2: resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} @@ -4724,7 +4867,6 @@ packages: vite@5.2.10: resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true peerDependencies: '@types/node': ^18.0.0 || >=20.0.0 less: '*' @@ -4749,6 +4891,11 @@ packages: terser: optional: true + wait-on@7.2.0: + resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} + engines: {node: '>=12.0.0'} + hasBin: true + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -4777,7 +4924,6 @@ packages: which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true which@3.0.1: resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} @@ -4791,12 +4937,10 @@ packages: workerd@1.20240419.0: resolution: {integrity: sha512-9yV98KpkQgG+bdEsKEW8i1AYZgxns6NVSfdOVEB2Ue1pTMtIEYfUyqUE+O2amisRrfaC3Pw4EvjtTmVaoetfeg==} engines: {node: '>=16'} - hasBin: true wrangler@3.52.0: resolution: {integrity: sha512-HR06jTym+yr7+CI3Ggld3nfp1OM9vSC7h4B8vwWHwhi5K0sYg8p44rxV514Gmsv9dkFHegkRP70SM3sjuuxxpQ==} engines: {node: '>=16.17.0'} - hasBin: true peerDependencies: '@cloudflare/workers-types': ^4.20240419.0 peerDependenciesMeta: @@ -4866,7 +5010,6 @@ packages: yaml@2.4.1: resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} engines: {node: '>= 14'} - hasBin: true yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -4908,6 +5051,11 @@ snapshots: dependencies: execa: 8.0.1 + '@axe-core/playwright@4.9.0(playwright-core@1.43.1)': + dependencies: + axe-core: 4.9.0 + playwright-core: 1.43.1 + '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.2 @@ -5470,6 +5618,12 @@ snapshots: '@floating-ui/utils@0.2.1': {} + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -5594,6 +5748,10 @@ snapshots: '@pkgr/core@0.1.1': {} + '@playwright/test@1.43.1': + dependencies: + playwright: 1.43.1 + '@radix-ui/number@1.0.1': dependencies: '@babel/runtime': 7.24.4 @@ -5940,7 +6098,7 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@remix-run/dev@2.9.1(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/node@20.12.7)(terser@5.30.4)(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(terser@5.30.4))(wrangler@3.52.0(@cloudflare/workers-types@4.20240423.0))': + '@remix-run/dev@2.9.1(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4))(wrangler@3.52.0(@cloudflare/workers-types@4.20240423.0))': dependencies: '@babel/core': 7.24.4 '@babel/generator': 7.24.4 @@ -5957,7 +6115,7 @@ snapshots: '@remix-run/router': 1.16.0 '@remix-run/server-runtime': 2.9.1(typescript@5.4.5) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@20.12.7)(terser@5.30.4) + '@vanilla-extract/integration': 6.5.0(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -5998,7 +6156,7 @@ snapshots: ws: 7.5.9 optionalDependencies: typescript: 5.4.5 - vite: 5.2.10(@types/node@20.12.7)(terser@5.30.4) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) wrangler: 3.52.0(@cloudflare/workers-types@4.20240423.0) transitivePeerDependencies: - '@types/node' @@ -6128,6 +6286,14 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.14.3': optional: true + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + '@stylistic/eslint-plugin-js@1.7.0(eslint@8.57.0)': dependencies: '@types/eslint': 8.56.9 @@ -6428,7 +6594,32 @@ snapshots: modern-ahocorasick: 1.0.1 outdent: 0.8.0 - '@vanilla-extract/integration@6.5.0(@types/node@20.12.7)(terser@5.30.4)': + '@vanilla-extract/integration@6.5.0(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@vanilla-extract/babel-plugin-debug-ids': 1.0.5 + '@vanilla-extract/css': 1.14.2 + esbuild: 0.17.19 + eval: 0.1.8 + find-up: 5.0.0 + javascript-stringify: 2.1.0 + lodash: 4.17.21 + mlly: 1.6.1 + outdent: 0.8.0 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) + vite-node: 1.5.0(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + '@vanilla-extract/integration@7.1.2(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)': dependencies: '@babel/core': 7.24.4 '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) @@ -6441,8 +6632,8 @@ snapshots: lodash: 4.17.21 mlly: 1.6.1 outdent: 0.8.0 - vite: 5.2.10(@types/node@20.12.7)(terser@5.30.4) - vite-node: 1.5.0(@types/node@20.12.7)(terser@5.30.4) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) + vite-node: 1.5.0(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) transitivePeerDependencies: - '@types/node' - less @@ -6455,6 +6646,20 @@ snapshots: '@vanilla-extract/private@1.0.4': {} + '@vanilla-extract/vite-plugin@4.0.7(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4))': + dependencies: + '@vanilla-extract/integration': 7.1.2(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + '@web3-storage/multipart-parser@1.0.0': {} '@zeit/schemas@2.29.0': {} @@ -6608,10 +6813,22 @@ snapshots: astring@1.8.6: {} + asynckit@0.4.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 + axe-core@4.9.0: {} + + axios@1.6.8: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.24.4 @@ -6851,6 +7068,10 @@ snapshots: color-name@1.1.4: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} commander@10.0.1: {} @@ -6884,6 +7105,18 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + concurrently@8.2.2: + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -7049,12 +7282,16 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delayed-stream@1.0.0: {} + depd@2.0.0: {} dequal@2.0.3: {} destroy@1.2.0: {} + detect-libc@1.0.3: {} + detect-node-es@1.1.0: {} diff@5.2.0: {} @@ -7771,6 +8008,8 @@ snapshots: flatted@3.3.1: {} + follow-redirects@1.15.6: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -7780,6 +8019,12 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + format@0.2.2: {} forwarded@0.2.0: {} @@ -7804,6 +8049,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -8219,6 +8467,14 @@ snapshots: javascript-stringify@2.1.0: {} + joi@17.13.0: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + js-beautify@1.15.1: dependencies: config-chain: 1.1.13 @@ -8290,6 +8546,47 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-darwin-arm64@1.24.1: + optional: true + + lightningcss-darwin-x64@1.24.1: + optional: true + + lightningcss-freebsd-x64@1.24.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.24.1: + optional: true + + lightningcss-linux-arm64-gnu@1.24.1: + optional: true + + lightningcss-linux-arm64-musl@1.24.1: + optional: true + + lightningcss-linux-x64-gnu@1.24.1: + optional: true + + lightningcss-linux-x64-musl@1.24.1: + optional: true + + lightningcss-win32-x64-msvc@1.24.1: + optional: true + + lightningcss@1.24.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.24.1 + lightningcss-darwin-x64: 1.24.1 + lightningcss-freebsd-x64: 1.24.1 + lightningcss-linux-arm-gnueabihf: 1.24.1 + lightningcss-linux-arm64-gnu: 1.24.1 + lightningcss-linux-arm64-musl: 1.24.1 + lightningcss-linux-x64-gnu: 1.24.1 + lightningcss-linux-x64-musl: 1.24.1 + lightningcss-win32-x64-msvc: 1.24.1 + lilconfig@3.1.1: {} lines-and-columns@1.2.4: {} @@ -9104,6 +9401,14 @@ snapshots: mlly: 1.6.1 pathe: 1.1.2 + playwright-core@1.43.1: {} + + playwright@1.43.1: + dependencies: + playwright-core: 1.43.1 + optionalDependencies: + fsevents: 2.3.2 + pluralize@8.0.0: {} possible-typed-array-names@1.0.0: {} @@ -9207,6 +9512,8 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-from-env@1.1.0: {} + pump@2.0.1: dependencies: end-of-stream: 1.4.4 @@ -9423,7 +9730,7 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 - remix-development-tools@4.1.4(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.10(@types/node@20.12.7)(terser@5.30.4)): + remix-development-tools@4.1.4(@remix-run/react@2.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5))(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)): dependencies: '@radix-ui/react-accordion': 1.1.2(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -9443,7 +9750,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) tailwind-merge: 1.14.0 uuid: 9.0.1 - vite: 5.2.10(@types/node@20.12.7)(terser@5.30.4) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) zod: 3.22.4 transitivePeerDependencies: - '@types/react' @@ -9535,6 +9842,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.1: + dependencies: + tslib: 2.6.2 + sade@1.8.1: dependencies: mri: 1.2.0 @@ -9689,6 +10000,8 @@ snapshots: space-separated-tokens@2.0.2: {} + spawn-command@0.0.2: {} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -9822,6 +10135,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} synckit@0.6.2: @@ -9887,6 +10204,8 @@ snapshots: toml@3.0.0: {} + tree-kill@1.2.2: {} + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -10115,13 +10434,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@1.5.0(@types/node@20.12.7)(terser@5.30.4): + vite-node@1.5.0(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.10(@types/node@20.12.7)(terser@5.30.4) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) transitivePeerDependencies: - '@types/node' - less @@ -10132,18 +10451,18 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(terser@5.30.4)): + vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4)): dependencies: debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.4.5) optionalDependencies: - vite: 5.2.10(@types/node@20.12.7)(terser@5.30.4) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4) transitivePeerDependencies: - supports-color - typescript - vite@5.2.10(@types/node@20.12.7)(terser@5.30.4): + vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.30.4): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -10151,8 +10470,19 @@ snapshots: optionalDependencies: '@types/node': 20.12.7 fsevents: 2.3.3 + lightningcss: 1.24.1 terser: 5.30.4 + wait-on@7.2.0: + dependencies: + axios: 1.6.8 + joi: 17.13.0 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + wcwidth@1.0.1: dependencies: defaults: 1.0.4 diff --git a/vite.config.ts b/vite.config.ts index eefb2e50..8cf83a03 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import { remixDevTools } from "remix-development-tools"; import { visualizer } from "rollup-plugin-visualizer"; import { defineConfig } from "vite"; import typecript from "vite-tsconfig-paths"; +import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin"; import { getLoadContext } from "./load-context"; @@ -56,6 +57,9 @@ export default defineConfig(({ mode }) => ({ !isStorybook && remix({ serverModuleFormat: "esm" }), typecript(), + vanillaExtractPlugin({ + identifiers: mode === "production" ? "short" : "debug", + }), mode === "analyze" && visualizer({ gzipSize: true,