diff --git a/TODO.md b/TODO.md index 9e36e98..105dccd 100644 --- a/TODO.md +++ b/TODO.md @@ -11,6 +11,7 @@ ## Links +- and - - - diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json index aff137e..75b6bf4 100644 --- a/packages/react-hooks/package.json +++ b/packages/react-hooks/package.json @@ -4,11 +4,14 @@ "private": true, "type": "module", "exports": { + "./useBoolean": "./src/useBoolean.ts", "./useIsMounted": "./src/useIsMounted.ts" }, "scripts": { "lint:eslint": "eslint src --max-warnings 0 --report-unused-disable-directives", - "lint:typescript": "tsc --noEmit" + "lint:typescript": "tsc --noEmit", + "test": "vitest run --browser.headless", + "test:ui": "vitest --ui --no-open" }, "dependencies": { "react": "catalog:", @@ -17,10 +20,16 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/config-typescript": "workspace:*", + "@testing-library/react": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", "@total-typescript/ts-reset": "catalog:", + "@vitest/browser": "catalog:", + "@vitest/coverage-istanbul": "catalog:", + "@vitest/ui": "catalog:", "eslint": "catalog:", - "typescript": "catalog:" + "playwright": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/packages/react-hooks/src/tests/useBoolean.test.ts b/packages/react-hooks/src/tests/useBoolean.test.ts new file mode 100644 index 0000000..666d207 --- /dev/null +++ b/packages/react-hooks/src/tests/useBoolean.test.ts @@ -0,0 +1,83 @@ +import { act, renderHook } from "@testing-library/react" + +import { describe, expect, it } from "vitest" +import { useBoolean } from "../useBoolean" + +describe("useBoolean", () => { + const initialValues = [true, false] + + for (const initialValue of initialValues) { + it(`should set the initial value to ${initialValue}`, () => { + // Arrange - Given + const { result } = renderHook(() => { + return useBoolean({ initialValue }) + }) + + // Assert - Then + expect(result.current.value).toBe(initialValue) + }) + } + + it("should by default set the initial value to false", () => { + // Arrange - Given + const { result } = renderHook(() => { + return useBoolean() + }) + + // Assert - Then + expect(result.current.value).toBe(false) + }) + + it("should toggle the value", () => { + // Arrange - Given + const { result } = renderHook(() => { + return useBoolean({ initialValue: false }) + }) + + // Act - When + act(() => { + return result.current.toggle() + }) + + // Assert - Then + expect(result.current.value).toBe(true) + + // Act - When + act(() => { + return result.current.toggle() + }) + + // Assert - Then + expect(result.current.value).toBe(false) + }) + + it("should set the value to true", () => { + // Arrange - Given + const { result } = renderHook(() => { + return useBoolean({ initialValue: false }) + }) + + // Act - When + act(() => { + return result.current.setTrue() + }) + + // Assert - Then + expect(result.current.value).toBe(true) + }) + + it("should set the value to false", () => { + // Arrange - Given + const { result } = renderHook(() => { + return useBoolean({ initialValue: true }) + }) + + // Act - When + act(() => { + return result.current.setFalse() + }) + + // Assert - Then + expect(result.current.value).toBe(false) + }) +}) diff --git a/packages/react-hooks/src/tests/useIsMounted.test.ts b/packages/react-hooks/src/tests/useIsMounted.test.ts new file mode 100644 index 0000000..4362431 --- /dev/null +++ b/packages/react-hooks/src/tests/useIsMounted.test.ts @@ -0,0 +1,16 @@ +import { renderHook } from "@testing-library/react" + +import { describe, expect, it } from "vitest" +import { useIsMounted } from "../useIsMounted" + +describe("useIsMounted", () => { + it("should return true", () => { + // Arrange - Given + const { result } = renderHook(() => { + return useIsMounted() + }) + + // Assert - Then + expect(result.current.isMounted).toBe(true) + }) +}) diff --git a/packages/react-hooks/src/useBoolean.ts b/packages/react-hooks/src/useBoolean.ts new file mode 100644 index 0000000..24bb787 --- /dev/null +++ b/packages/react-hooks/src/useBoolean.ts @@ -0,0 +1,50 @@ +import { useState } from "react" + +export interface UseBooleanOutput { + value: boolean + setValue: React.Dispatch> + setTrue: () => void + setFalse: () => void + toggle: () => void +} + +export interface UseBooleanInput { + /** + * The initial value of the boolean. + * @default false + */ + initialValue?: boolean +} + +/** + * Hook to manage a boolean state. + * @param options + * @returns + */ +export const useBoolean = (options: UseBooleanInput = {}): UseBooleanOutput => { + const { initialValue = false } = options + + const [value, setValue] = useState(initialValue) + + const toggle = (): void => { + setValue((old) => { + return !old + }) + } + + const setTrue = (): void => { + setValue(true) + } + + const setFalse = (): void => { + setValue(false) + } + + return { + value, + setValue, + toggle, + setTrue, + setFalse, + } +} diff --git a/packages/react-hooks/vitest.config.ts b/packages/react-hooks/vitest.config.ts new file mode 100644 index 0000000..6b097a6 --- /dev/null +++ b/packages/react-hooks/vitest.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "vitest/config" + +export default defineConfig({ + test: { + browser: { + provider: "playwright", + enabled: true, + name: "chromium", + }, + coverage: { + enabled: true, + provider: "istanbul", + }, + }, +}) diff --git a/packages/utils/src/tests/constants.test.ts b/packages/utils/src/tests/constants.test.ts new file mode 100644 index 0000000..45c1b53 --- /dev/null +++ b/packages/utils/src/tests/constants.test.ts @@ -0,0 +1,36 @@ +import { afterEach, describe, expect, it, vi } from "vitest" + +describe("VERSION", () => { + afterEach(() => { + vi.unstubAllEnvs() + vi.resetModules() + vi.restoreAllMocks() + }) + + it('should return "0.0.0-development" when NODE_ENV is development', async () => { + // Arrange - Given + vi.stubEnv("NODE_ENV", "development") + + // Act - When + const { VERSION } = await import("../constants.js") + + // Assert - Then + const expected = "0.0.0-development" + expect(VERSION).toEqual(expected) + }) + + it("should return the version from package.json when NODE_ENV is not development", async () => { + // Arrange - Given + vi.stubEnv("NODE_ENV", "production") + vi.mock("../../package.json", () => { + return { default: { version: "1.0.0" } } + }) + + // Act - When + const { VERSION } = await import("../constants.js") + + // Assert - Then + const expected = "1.0.0" + expect(VERSION).toEqual(expected) + }) +}) diff --git a/packages/utils/vitest.config.ts b/packages/utils/vitest.config.ts index 8df1ab8..f5aed87 100644 --- a/packages/utils/vitest.config.ts +++ b/packages/utils/vitest.config.ts @@ -5,7 +5,6 @@ export default defineConfig({ coverage: { enabled: true, provider: "istanbul", - all: false, }, }, }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c77468..bc5976b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,6 +48,9 @@ catalogs: '@storybook/test-runner': specifier: 0.19.1 version: 0.19.1 + '@testing-library/react': + specifier: 16.0.0 + version: 16.0.0 '@total-typescript/ts-reset': specifier: 0.5.1 version: 0.5.1 @@ -66,6 +69,9 @@ catalogs: '@typescript-eslint/parser': specifier: 7.18.0 version: 7.18.0 + '@vitest/browser': + specifier: 2.0.4 + version: 2.0.4 '@vitest/coverage-istanbul': specifier: 2.0.4 version: 2.0.4 @@ -123,6 +129,9 @@ catalogs: next-themes: specifier: 0.3.0 version: 0.3.0 + playwright: + specifier: 1.45.3 + version: 1.45.3 postcss: specifier: 8.4.40 version: 8.4.40 @@ -291,7 +300,7 @@ importers: version: 8.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(typescript@5.5.4) '@storybook/test': specifier: 'catalog:' - version: 8.2.6(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3)) + version: 8.2.6(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) '@storybook/test-runner': specifier: 'catalog:' version: 0.19.1(@swc/helpers@0.5.5)(@types/node@22.0.0)(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9))) @@ -517,6 +526,9 @@ importers: '@repo/eslint-config': specifier: workspace:* version: link:../config-eslint + '@testing-library/react': + specifier: 'catalog:' + version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@total-typescript/ts-reset': specifier: 'catalog:' version: 0.5.1 @@ -526,12 +538,27 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 18.3.0 + '@vitest/browser': + specifier: 'catalog:' + version: 2.0.4(playwright@1.45.3)(typescript@5.5.4)(vitest@2.0.4) + '@vitest/coverage-istanbul': + specifier: 'catalog:' + version: 2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) + '@vitest/ui': + specifier: 'catalog:' + version: 2.0.4(vitest@2.0.4) eslint: specifier: 'catalog:' version: 8.57.0 + playwright: + specifier: 'catalog:' + version: 1.45.3 typescript: specifier: 'catalog:' version: 5.5.4 + vitest: + specifier: 'catalog:' + version: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) packages/ui: dependencies: @@ -622,7 +649,7 @@ importers: version: 22.0.0 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3)) + version: 2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) '@vitest/ui': specifier: 'catalog:' version: 2.0.4(vitest@2.0.4) @@ -634,7 +661,7 @@ importers: version: 5.5.4 vitest: specifier: 'catalog:' - version: 2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3) + version: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) packages/wikipedia-game-solver: dependencies: @@ -680,7 +707,7 @@ importers: version: 8.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(typescript@5.5.4) '@storybook/test': specifier: 'catalog:' - version: 8.2.6(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3)) + version: 8.2.6(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) '@total-typescript/ts-reset': specifier: 'catalog:' version: 0.5.1 @@ -692,7 +719,7 @@ importers: version: 18.3.0 '@vitest/coverage-istanbul': specifier: 'catalog:' - version: 2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3)) + version: 2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) '@vitest/ui': specifier: 'catalog:' version: 2.0.4(vitest@2.0.4) @@ -710,7 +737,7 @@ importers: version: 5.5.4 vitest: specifier: 'catalog:' - version: 2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3) + version: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) packages: @@ -1392,6 +1419,15 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bundled-es-modules/cookie@2.0.0': + resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@chromatic-com/storybook@1.6.1': resolution: {integrity: sha512-x1x1NB3j4xpfeSWKr96emc+7ZvfsvH+/WVb3XCjkB24PPbT8VZXb3mJSAQMrSzuQ8+eQE9kDogYHH9Fj3tb/Cw==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} @@ -1712,6 +1748,22 @@ packages: cpu: [x64] os: [win32] + '@inquirer/confirm@3.1.19': + resolution: {integrity: sha512-dcLbnxmhx3a72c4fM6CwhydG8rS8TZCXtCYU7kUraA+qU2Ue8gNCiYOxnlhb0H0wbTKL23lUo68fX0iMP8t2Dw==} + engines: {node: '>=18'} + + '@inquirer/core@9.0.7': + resolution: {integrity: sha512-wyqnTmlnd9p7cX6tfMlth+/Nx7vV2t/FvtO9VMSi2XjBkNy0MkPr19RSOyP3qrywdlJT+BQbEnXLPqq0wFMw3A==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.5': + resolution: {integrity: sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==} + engines: {node: '>=18'} + + '@inquirer/type@1.5.1': + resolution: {integrity: sha512-m3YgGQlKNS0BM+8AFiJkCsTqHEFCWn6s/Rqye3mYwvqY6LdfUv12eSwbsgNzrYyrLXiy7IrrjDLPysaSBwEfhw==} + engines: {node: '>=18'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1821,6 +1873,10 @@ packages: '@types/react': '>=16' react: '>=16' + '@mswjs/interceptors@0.29.1': + resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==} + engines: {node: '>=18'} + '@next/env@14.2.5': resolution: {integrity: sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==} @@ -1989,6 +2045,15 @@ packages: '@octokit/types@13.5.0': resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2554,6 +2619,10 @@ packages: resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} engines: {node: '>=18'} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + '@testing-library/jest-dom@6.4.5': resolution: {integrity: sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} @@ -2575,6 +2644,21 @@ packages: vitest: optional: true + '@testing-library/react@16.0.0': + resolution: {integrity: sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@testing-library/user-event@14.5.2': resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} engines: {node: '>=12', npm: '>=6'} @@ -2605,6 +2689,9 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/cross-spawn@6.0.6': resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} @@ -2674,6 +2761,9 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + '@types/node@18.19.42': resolution: {integrity: sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==} @@ -2716,6 +2806,12 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} @@ -2725,6 +2821,9 @@ packages: '@types/wait-on@5.3.4': resolution: {integrity: sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==} + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2850,6 +2949,21 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitest/browser@2.0.4': + resolution: {integrity: sha512-QsIkbqPqHsXvgxjCjjgKjuWKmrC0VJgpaDkuEmOy5gTnErhhifWIfp3HpH92K7cscfaIao+RlKv5f8nUMgjfmA==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 2.0.4 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + '@vitest/coverage-istanbul@2.0.4': resolution: {integrity: sha512-6VibYMkXh8cJm5Bg8JYeOoR4oURlPf4YKP9kuVRE/NKasfYrXPnzSwuxrpgMbgOfPj13KUJXgMB3VAGukECtlQ==} peerDependencies: @@ -3522,6 +3636,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -3674,6 +3792,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -4690,6 +4812,10 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -4753,6 +4879,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -5022,6 +5151,9 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -5773,10 +5905,24 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.3.4: + resolution: {integrity: sha512-sHMlwrajgmZSA2l1o7qRSe+azm/I+x9lvVVcOxAzi4vCtH8uVPJk1K5BQYDkzGl+tt0RvM9huEXXdeGrgcc79g==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.7.x' + peerDependenciesMeta: + typescript: + optional: true + mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -6051,6 +6197,9 @@ packages: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + p-each-series@3.0.0: resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} engines: {node: '>=12'} @@ -6217,6 +6366,9 @@ packages: path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -6505,6 +6657,9 @@ packages: engines: {node: '>= 0.10'} hasBin: true + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} @@ -6530,6 +6685,9 @@ packages: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -7086,6 +7244,9 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -7350,6 +7511,10 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + traverse@0.6.8: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} @@ -7580,6 +7745,10 @@ packages: universal-user-agent@7.0.2: resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -7608,6 +7777,9 @@ packages: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -7911,6 +8083,10 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + yoctocolors@2.1.1: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} @@ -8808,6 +8984,19 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@bundled-es-modules/cookie@2.0.0': + dependencies: + cookie: 0.5.0 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + '@chromatic-com/storybook@1.6.1(react@18.3.1)': dependencies: chromatic: 11.5.6 @@ -9043,6 +9232,33 @@ snapshots: '@img/sharp-win32-x64@0.33.4': optional: true + '@inquirer/confirm@3.1.19': + dependencies: + '@inquirer/core': 9.0.7 + '@inquirer/type': 1.5.1 + + '@inquirer/core@9.0.7': + dependencies: + '@inquirer/figures': 1.0.5 + '@inquirer/type': 1.5.1 + '@types/mute-stream': 0.0.4 + '@types/node': 22.0.0 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.5': {} + + '@inquirer/type@1.5.1': + dependencies: + mute-stream: 1.0.0 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -9256,6 +9472,15 @@ snapshots: '@types/react': 18.3.3 react: 18.3.1 + '@mswjs/interceptors@0.29.1': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + '@next/env@14.2.5': {} '@next/eslint-plugin-next@14.2.5': @@ -9419,6 +9644,15 @@ snapshots: dependencies: '@octokit/openapi-types': 22.2.0 + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -10182,12 +10416,12 @@ snapshots: - supports-color - ts-node - '@storybook/test@8.2.6(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3))': + '@storybook/test@8.2.6(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9)))(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3))': dependencies: '@storybook/csf': 0.1.11 '@storybook/instrumenter': 8.2.6(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9))) '@testing-library/dom': 10.1.0 - '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3)) + '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) '@testing-library/user-event': 14.5.2(@testing-library/dom@10.1.0) '@vitest/expect': 1.6.0 '@vitest/spy': 1.6.0 @@ -10205,7 +10439,7 @@ snapshots: '@storybook/csf': 0.1.11 '@storybook/instrumenter': 8.2.6(storybook@8.2.6(@babel/preset-env@7.25.0(@babel/core@7.24.9))) '@testing-library/dom': 10.1.0 - '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3)) + '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3)) '@testing-library/user-event': 14.5.2(@testing-library/dom@10.1.0) '@vitest/expect': 1.6.0 '@vitest/spy': 1.6.0 @@ -10316,7 +10550,18 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3))': + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.25.0 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@22.0.0))(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3))': dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.25.0 @@ -10329,7 +10574,7 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 jest: 29.7.0(@types/node@22.0.0) - vitest: 2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3) + vitest: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(jest@29.7.0)(vitest@2.0.4)': dependencies: @@ -10344,12 +10589,26 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 jest: 29.7.0(@types/node@22.0.0) - vitest: 2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3) + vitest: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) + + '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.0 + '@testing-library/dom': 10.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@testing-library/user-event@14.5.2(@testing-library/dom@10.1.0)': dependencies: '@testing-library/dom': 10.1.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + '@total-typescript/ts-reset@0.5.1': {} '@types/aria-query@5.0.4': {} @@ -10384,6 +10643,8 @@ snapshots: dependencies: '@types/node': 22.0.0 + '@types/cookie@0.6.0': {} + '@types/cross-spawn@6.0.6': dependencies: '@types/node': 22.0.0 @@ -10456,6 +10717,10 @@ snapshots: '@types/mime@1.3.5': {} + '@types/mute-stream@0.0.4': + dependencies: + '@types/node': 22.0.0 + '@types/node@18.19.42': dependencies: undici-types: 5.26.5 @@ -10500,6 +10765,10 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/statuses@2.0.5': {} + + '@types/tough-cookie@4.0.5': {} + '@types/unist@3.0.2': {} '@types/uuid@9.0.8': {} @@ -10508,6 +10777,8 @@ snapshots: dependencies: '@types/node': 22.0.0 + '@types/wrap-ansi@3.0.0': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.32': @@ -10678,7 +10949,24 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitest/coverage-istanbul@2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3))': + '@vitest/browser@2.0.4(playwright@1.45.3)(typescript@5.5.4)(vitest@2.0.4)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/utils': 2.0.4 + magic-string: 0.30.11 + msw: 2.3.4(typescript@5.5.4) + sirv: 2.0.4 + vitest: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) + ws: 8.18.0 + optionalDependencies: + playwright: 1.45.3 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + + '@vitest/coverage-istanbul@2.0.4(vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.3.6 @@ -10690,7 +10978,7 @@ snapshots: magicast: 0.3.4 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3) + vitest: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) transitivePeerDependencies: - supports-color @@ -10739,7 +11027,7 @@ snapshots: pathe: 1.1.2 sirv: 2.0.4 tinyrainbow: 1.2.0 - vitest: 2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3) + vitest: 2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3) '@vitest/utils@1.6.0': dependencies: @@ -11509,6 +11797,8 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-width@4.1.0: {} + client-only@0.0.1: {} cliui@6.0.0: @@ -11647,6 +11937,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie@0.5.0: {} + cookie@0.6.0: {} core-js-compat@3.37.1: @@ -12984,6 +13276,8 @@ snapshots: graphemer@1.4.0: {} + graphql@16.9.0: {} + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -13050,6 +13344,8 @@ snapshots: he@1.2.0: {} + headers-polyfill@4.0.3: {} + highlight.js@10.7.3: {} hmac-drbg@1.0.1: @@ -13330,6 +13626,8 @@ snapshots: is-negative-zero@2.0.3: {} + is-node-process@1.2.0: {} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -14271,8 +14569,32 @@ snapshots: ms@2.1.3: {} + msw@2.3.4(typescript@5.5.4): + dependencies: + '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 3.1.19 + '@mswjs/interceptors': 0.29.1 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + chalk: 4.1.2 + graphql: 16.9.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.2.2 + strict-event-emitter: 0.5.1 + type-fest: 4.23.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.5.4 + mustache@4.2.0: {} + mute-stream@1.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -14549,6 +14871,8 @@ snapshots: os-homedir@1.0.2: {} + outvariant@1.4.3: {} + p-each-series@3.0.0: {} p-filter@4.1.0: @@ -14696,6 +15020,8 @@ snapshots: path-to-regexp@0.1.7: {} + path-to-regexp@6.2.2: {} + path-type@4.0.0: {} path-type@5.0.0: {} @@ -14919,6 +15245,8 @@ snapshots: dependencies: event-stream: 3.3.4 + psl@1.9.0: {} + public-encrypt@4.0.3: dependencies: bn.js: 4.12.0 @@ -14944,6 +15272,8 @@ snapshots: querystring-es3@0.2.1: {} + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} queue@6.0.2: @@ -15736,6 +16066,8 @@ snapshots: streamsearch@1.1.0: {} + strict-event-emitter@0.5.1: {} + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -16024,6 +16356,13 @@ snapshots: totalist@3.0.1: {} + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + traverse@0.6.8: {} tree-kill@1.2.2: {} @@ -16229,6 +16568,8 @@ snapshots: universal-user-agent@7.0.2: {} + universalify@0.2.0: {} + universalify@2.0.1: {} unpipe@1.0.0: {} @@ -16254,6 +16595,11 @@ snapshots: url-join@5.0.0: {} + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + url@0.11.4: dependencies: punycode: 1.4.1 @@ -16323,7 +16669,7 @@ snapshots: fsevents: 2.3.3 terser: 5.31.3 - vitest@2.0.4(@types/node@22.0.0)(@vitest/ui@2.0.4)(terser@5.31.3): + vitest@2.0.4(@types/node@22.0.0)(@vitest/browser@2.0.4)(@vitest/ui@2.0.4)(terser@5.31.3): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.4 @@ -16346,6 +16692,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.0.0 + '@vitest/browser': 2.0.4(playwright@1.45.3)(typescript@5.5.4)(vitest@2.0.4) '@vitest/ui': 2.0.4(vitest@2.0.4) transitivePeerDependencies: - less @@ -16613,4 +16960,6 @@ snapshots: yocto-queue@1.1.1: {} + yoctocolors-cjs@2.1.2: {} + yoctocolors@2.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6bed9a2..17145f7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -53,12 +53,15 @@ catalog: "storybook-dark-mode": "4.0.2" # Testing + "playwright": "1.45.3" "@playwright/test": "1.45.3" "axe-playwright": "2.0.1" "start-server-and-test": "2.0.5" + "@vitest/browser": "2.0.4" "@vitest/coverage-istanbul": "2.0.4" "@vitest/ui": "2.0.4" "vitest": "2.0.4" + "@testing-library/react": "16.0.0" # CSS "postcss": "8.4.40"