From 322f7757964aef444b5a4e38819ec2c9085673df Mon Sep 17 00:00:00 2001 From: Vick Scarlet Date: Tue, 11 Aug 2026 02:17:31 +0800 Subject: [PATCH] update: hooks, web --- .github/workflows/deploy.yml | 30 +- apps/console/package.json | 2 +- apps/console/tsconfig.json | 30 +- index.html => apps/web/index.html | 5 +- apps/web/package.json | 27 +- apps/web/src/Game.css | 12 + apps/web/src/Game.tsx | 35 + apps/web/src/components/Replaced.css | 50 + apps/web/src/components/Replaced.tsx | 29 + apps/web/src/components/Talent.css | 41 + apps/web/src/components/Talent.tsx | 22 + apps/web/src/components/ThemeToggle.css | 46 + apps/web/src/components/ThemeToggle.tsx | 66 + apps/web/src/config.ts | 60 + apps/web/src/containers/Alloc.css | 112 + apps/web/src/containers/Alloc.tsx | 107 + apps/web/src/containers/Home.css | 17 + apps/web/src/containers/Home.tsx | 17 + apps/web/src/containers/Loading.tsx | 9 + apps/web/src/containers/Play.tsx | 3 + apps/web/src/containers/Summary.tsx | 10 + apps/web/src/containers/TalentPick.css | 22 + apps/web/src/containers/TalentPick.tsx | 39 + apps/web/src/display.ts | 6 + apps/web/src/hooks/storage.ts | 44 + apps/web/src/index.tsx | 21 +- apps/web/src/jotai.ts | 6 + apps/web/src/storage.ts | 12 + apps/web/src/styles/colors.css | 14 + apps/web/src/styles/common.css | 89 + apps/web/tsconfig.json | 34 +- apps/web/vite.config.ts | 5 +- package.json | 10 +- packages/condition/index.ts | 16 +- packages/condition/tsconfig.json | 27 +- packages/core/package.json | 13 + packages/core/src/achievement.spec.ts | 7 +- packages/core/src/achievement.ts | 11 +- packages/core/src/event.ts | 10 +- packages/core/src/game.ts | 65 +- packages/core/src/index.ts | 2 +- packages/core/src/state.spec.ts | 5 +- packages/core/src/state.ts | 16 +- packages/core/src/talent.spec.ts | 3 +- packages/core/src/talent.ts | 20 +- packages/core/tsconfig.json | 30 +- packages/data/package.json | 6 +- packages/data/src/achievement.types.ts | 18 +- packages/data/src/index.ts | 12 + packages/data/src/talent.types.ts | 7 +- packages/data/tsconfig.json | 27 +- packages/hooks/bunfig.toml | 2 + packages/hooks/package.json | 40 + packages/hooks/setup-tests.ts | 12 + packages/hooks/src/alloc.ts | 69 + packages/hooks/src/config.ts | 24 + packages/hooks/src/index.ts | 6 + packages/hooks/src/play.ts | 59 + packages/hooks/src/profile.spec.ts | 14 + packages/hooks/src/profile.ts | 19 + packages/hooks/src/talent.ts | 100 + packages/hooks/tsconfig.json | 7 + packages/vitex/index.ts | 15 + packages/vitex/tsconfig.json | 27 +- pnpm-lock.yaml | 2807 +++++++---------------- thirdparty/bili-toy/tsconfig.json | 24 +- tsconfig.json | 30 + 67 files changed, 2339 insertions(+), 2243 deletions(-) rename index.html => apps/web/index.html (71%) create mode 100644 apps/web/src/Game.css create mode 100644 apps/web/src/Game.tsx create mode 100644 apps/web/src/components/Replaced.css create mode 100644 apps/web/src/components/Replaced.tsx create mode 100644 apps/web/src/components/Talent.css create mode 100644 apps/web/src/components/Talent.tsx create mode 100644 apps/web/src/components/ThemeToggle.css create mode 100644 apps/web/src/components/ThemeToggle.tsx create mode 100644 apps/web/src/config.ts create mode 100644 apps/web/src/containers/Alloc.css create mode 100644 apps/web/src/containers/Alloc.tsx create mode 100644 apps/web/src/containers/Home.css create mode 100644 apps/web/src/containers/Home.tsx create mode 100644 apps/web/src/containers/Loading.tsx create mode 100644 apps/web/src/containers/Play.tsx create mode 100644 apps/web/src/containers/Summary.tsx create mode 100644 apps/web/src/containers/TalentPick.css create mode 100644 apps/web/src/containers/TalentPick.tsx create mode 100644 apps/web/src/display.ts create mode 100644 apps/web/src/hooks/storage.ts create mode 100644 apps/web/src/jotai.ts create mode 100644 apps/web/src/storage.ts create mode 100644 apps/web/src/styles/colors.css create mode 100644 apps/web/src/styles/common.css create mode 100644 packages/data/src/index.ts create mode 100644 packages/hooks/bunfig.toml create mode 100644 packages/hooks/package.json create mode 100644 packages/hooks/setup-tests.ts create mode 100644 packages/hooks/src/alloc.ts create mode 100644 packages/hooks/src/config.ts create mode 100644 packages/hooks/src/index.ts create mode 100644 packages/hooks/src/play.ts create mode 100644 packages/hooks/src/profile.spec.ts create mode 100644 packages/hooks/src/profile.ts create mode 100644 packages/hooks/src/talent.ts create mode 100644 packages/hooks/tsconfig.json create mode 100644 tsconfig.json diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9ad1948..f1ef877 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,24 +6,32 @@ permissions: contents: write jobs: build-and-deploy: - concurrency: ci-${{ github.ref }} # Recommended if you intend to make multiple deployments in quick succession. + concurrency: ci-${{ github.ref }} runs-on: ubuntu-latest steps: - - name: Checkout 🛎️ + - name: 🛎️ Checkout uses: actions/checkout@v4 - - name: Install pnpm + - name: 🛠️ Install Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: 🛠️ Install pnpm uses: pnpm/action-setup@v4 with: - version: 10 + version: latest - - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. - run: | - pnpm install - pnpm xlsx2json - pnpm build + - name: 📦 Install Dependencies + run: pnpm install - - name: Deploy 🚀 + - name: 🏗️ Build data + run: bun build:data + + - name: 🏗️ Build web + run: bun build:web + + - name: 🚀 Deploy uses: JamesIves/github-pages-deploy-action@v4 with: - folder: template # The folder the action should deploy. \ No newline at end of file + folder: apps/web/dist # The folder the action should deploy. \ No newline at end of file diff --git a/apps/console/package.json b/apps/console/package.json index 8c1c879..b2275dc 100644 --- a/apps/console/package.json +++ b/apps/console/package.json @@ -5,7 +5,7 @@ "author": "Vick Scarlet ", "scripts": { "start": "bun run src/index.ts", - "lint": "eslint .", + "lint": "bunx --bun eslint .", "test": "bun test" }, "dependencies": { diff --git a/apps/console/tsconfig.json b/apps/console/tsconfig.json index d2cfae3..751b6ef 100644 --- a/apps/console/tsconfig.json +++ b/apps/console/tsconfig.json @@ -1,32 +1,4 @@ { - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "types": ["bun"], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "paths": { - "@/*": ["./src/*"], - }, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true - }, + "extends": "../../tsconfig.json", "include": ["**/*"] } diff --git a/index.html b/apps/web/index.html similarity index 71% rename from index.html rename to apps/web/index.html index 34616c0..1622230 100644 --- a/index.html +++ b/apps/web/index.html @@ -5,10 +5,11 @@ + 人生重开模拟器 -
- +
+ \ No newline at end of file diff --git a/apps/web/package.json b/apps/web/package.json index 1042132..bc6f050 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,24 +4,31 @@ "version": "3.0.0", "author": "Vick Scarlet ", "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "lint": "eslint", - "test": "vitest" + "dev": "bunx --bun vite", + "build": "bunx --bun vite build", + "preview": "bunx --bun vite preview", + "lint": "bunx --bun eslint", + "test": "bunx --bun vitest" }, "dependencies": { - "@remake/core": "workspace:*", "@remake/data": "workspace:*", - "preact": "^10.26.9" + "@remake/hooks": "workspace:*", + "@remake/vitex": "workspace:*", + "classnames": "^2.5.1", + "jotai": "^2.20.2", + "react": "^19.2.8", + "react-dom": "^19.2.8" }, "devDependencies": { - "@preact/preset-vite": "^2.10.2", - "eslint-config-preact": "^2.0.0", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", + "@vitejs/plugin-react": "^6.0.5", + "eslint-config-react": "^1.1.7", + "jotai-devtools": "^0.14.0", "vite": "^8.1.3", "vitest": "^4.1.10" }, "eslintConfig": { - "extends": "preact" + "extends": "react" } } diff --git a/apps/web/src/Game.css b/apps/web/src/Game.css new file mode 100644 index 0000000..c16c19a --- /dev/null +++ b/apps/web/src/Game.css @@ -0,0 +1,12 @@ +.screen { + min-width: 32rem; + max-width: calc(100dvw - 2rem); + position: relative; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + > * { width: 100%; } +} \ No newline at end of file diff --git a/apps/web/src/Game.tsx b/apps/web/src/Game.tsx new file mode 100644 index 0000000..c674ccf --- /dev/null +++ b/apps/web/src/Game.tsx @@ -0,0 +1,35 @@ +import { useEffect, useState } from 'react' +import { useInit } from '@/hooks/storage' +import { useStep, Step } from '@remake/hooks' +import Home from '@/containers/Home' +import Pick from '@/containers/TalentPick' +import Alloc from '@/containers/Alloc' +import Play from '@/containers/Play' +import Summary from '@/containers/Summary' +import { Loading } from './containers/Loading' +import './Game.css' + +export function Game() { + const [inited, init] = useInit() + const step = useStep() + useEffect(() => { + if (!inited) init() + }, [inited]) + if (!inited) return + switch (step) { + case Step.Idle: + return + case Step.Mode: + case Step.Pick: + return + case Step.Alloc: + return + case Step.Play: + return + case Step.Summary: + return + default: + return null + } +} +export default Game diff --git a/apps/web/src/components/Replaced.css b/apps/web/src/components/Replaced.css new file mode 100644 index 0000000..af877ec --- /dev/null +++ b/apps/web/src/components/Replaced.css @@ -0,0 +1,50 @@ +ul.replaced { + display: flex; + flex-direction: column; + gap: 0.5rem; + li { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + gap: 1rem; + padding: 0; + .talent { + width: 100%; + } + } + li:not(:first-child) { + position: relative; + &::before { + content: ''; + position: absolute; + display: block; + box-sizing: border-box; + border: 0.0625rem solid var(--base-text-color); + border-left: none; + right: 0; + top: -1rem; + margin-right: -1rem; + width: 0.625rem; + height: 1.5rem; + } + + &::after { + content: ''; + position: absolute; + display: block; + box-sizing: border-box; + border: 0.0625rem solid var(--base-text-color); + border-right: none; + border-bottom: none; + right: 0; + top: 0.5rem; + margin-right: -0.6875rem; + margin-top: -0.03125rem; + width: 0.375rem; + height: 0.375rem; + transform: rotate(-45deg); + transform-origin: 0 0; + } + } +} \ No newline at end of file diff --git a/apps/web/src/components/Replaced.tsx b/apps/web/src/components/Replaced.tsx new file mode 100644 index 0000000..51c718f --- /dev/null +++ b/apps/web/src/components/Replaced.tsx @@ -0,0 +1,29 @@ +import type { Talent } from '@remake/data/talent' +import TalentComponent from './Talent' +import talents from '@remake/data/talent' +import './Replaced.css' + +export interface TalentProps { + id: Talent['id'] + chains?: Talent['id'][] +} +export function Replaced({ id, chains }: TalentProps) { + return ( +
    +
  • + +
  • + {chains?.map(id => { + const talent = talents.get(id) + if (!talent) return null + return ( +
  • + +
  • + ) + })} +
+ ) +} + +export default Replaced diff --git a/apps/web/src/components/Talent.css b/apps/web/src/components/Talent.css new file mode 100644 index 0000000..693f793 --- /dev/null +++ b/apps/web/src/components/Talent.css @@ -0,0 +1,41 @@ +.talent { + --color: var(--grade-color); + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 1rem; + line-height: 2rem; + gap: 1rem; + color: var(--color); + background: var(--background, var(--base-background-color)); + cursor: pointer; + user-select: none; + border: 0.0625rem solid var(--grade-color); + transition: all 0.2s ease-in-out; + &.talent-grade-0 { --grade-color: var(--color-grade-0); } + &.talent-grade-1 { --grade-color: var(--color-grade-1); } + &.talent-grade-2 { --grade-color: var(--color-grade-2); } + &.talent-grade-3 { --grade-color: var(--color-grade-3); } + &.selected { + --color: var(--base-background-color); + --background: var(--grade-color); + &:hover { --background: oklch(from var(--grade-color) calc(l + 0.1) c h); } + } + &:hover { --background: oklch(from var(--grade-color) calc(l + 0.5) c h); } + .talent-description { + color: oklch(from var(--color) calc(l + 0.1) c h); + font-size: 0.6rem; + align-self: flex-end; + user-select: none; + &::before { content: '['; margin-right: 0.125rem; } + &::after { content: ']'; margin-left: 0.125rem; } + &::before, &::after { color: var(--color); } + } +} +html[data-theme='dark'] { + .talent{ + &:hover {--background: oklch(from var(--grade-color) calc(l - 0.5) c h);} + &.selected:hover { --background: oklch(from var(--grade-color) calc(l - 0.1) c h);} + .talent-description { color: oklch(from var(--color) calc(l - 0.2) c h); } + } +} \ No newline at end of file diff --git a/apps/web/src/components/Talent.tsx b/apps/web/src/components/Talent.tsx new file mode 100644 index 0000000..10d2687 --- /dev/null +++ b/apps/web/src/components/Talent.tsx @@ -0,0 +1,22 @@ +import type { Talent } from '@remake/data/talent' +import talents from '@remake/data/talent' +import cx from 'classnames' +import './Talent.css' + +export interface TalentProps { + id: Talent['id'] + selected: boolean +} +export function TalentComponent({ id, selected }: TalentProps) { + const talent = talents.get(id) + if (!talent) return null + const grade = talent?.grade ?? 0 + return ( +
+ {talent.name} + {talent.description} +
+ ) +} + +export default TalentComponent diff --git a/apps/web/src/components/ThemeToggle.css b/apps/web/src/components/ThemeToggle.css new file mode 100644 index 0000000..f927128 --- /dev/null +++ b/apps/web/src/components/ThemeToggle.css @@ -0,0 +1,46 @@ +.theme-toggle-btn { + background: transparent; + border: none; + cursor: pointer; + padding: 0.25rem; + border-radius: 50%; + position: fixed; + top: 0.5rem; + right: 0.5rem; + width: 2.5rem; + height: 2.5rem; + display: flex; + align-items: center; + justify-content: center; + -webkit-tap-highlight-color: transparent; + transition: background-color 0.3s; + --hover-color: rgba(0, 0, 0, 0.05); + &:hover { background-color: var(--hover-color);} +} + +.theme-svg { + transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); + transform-origin: center; + .sun-center, .sun-beams, .mask-cutter-group { + transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1); + transform-origin: center; + } + .mask-cutter-group { transform: translate(0.75rem, -0.75rem); } + .sun-center { fill: oklch(from var(--base-text-color) calc(l + 0.2) c h); } + .sun-beams { stroke: oklch(from var(--base-text-color) calc(l + 0.2) c h); } +} + +html[data-theme='dark'] { + .theme-toggle-btn { --hover-color: rgba(255, 255, 255, 0.1); } + .mask-cutter-group { transform: translate(0, 0); } + .theme-svg { transform: rotate(375deg); } + .sun-center { + transform: scale(1.5); + fill: #fbbf24; + } + .sun-beams { + opacity: 0; + transform: scale(0.6); + stroke: #fbbf24; + } +} diff --git a/apps/web/src/components/ThemeToggle.tsx b/apps/web/src/components/ThemeToggle.tsx new file mode 100644 index 0000000..6a2f199 --- /dev/null +++ b/apps/web/src/components/ThemeToggle.tsx @@ -0,0 +1,66 @@ +import { useState, useEffect } from 'react' +import './ThemeToggle.css' + +export function ThemeToggle() { + const [isDark, setIsDark] = useState( + () => matchMedia('(prefers-color-scheme: dark)').matches, + ) + + useEffect(() => { + document.documentElement.dataset.theme = isDark ? 'dark' : 'light' + }, [isDark]) + + return ( + + ) +} + +export default ThemeToggle diff --git a/apps/web/src/config.ts b/apps/web/src/config.ts new file mode 100644 index 0000000..1ec358b --- /dev/null +++ b/apps/web/src/config.ts @@ -0,0 +1,60 @@ +import type { Config } from '@remake/hooks' +import type { TalentGrade } from '@remake/data/talent' + +function gadm(grade: TalentGrade, value: number) { + return new Map([[grade, { mode: 'multiply', value }]]) +} + +export const AdditonMap = { + times: [ + { value: 0, additions: new Map() }, + { value: 10, additions: gadm(2, 2) }, + { value: 30, additions: gadm(2, 3) }, + { value: 50, additions: gadm(2, 4) }, + { value: 70, additions: gadm(2, 5) }, + { value: 100, additions: gadm(2, 6) }, + ], + achievements: [ + { value: 0, additions: new Map() }, + { value: 10, additions: gadm(3, 2) }, + { value: 30, additions: gadm(3, 3) }, + { value: 50, additions: gadm(3, 4) }, + { value: 70, additions: gadm(3, 5) }, + { value: 100, additions: gadm(3, 6) }, + ], +} + +export const BasePoints = 20 + +export const config: Config = { + mode: 10, + pick: 3, + points: BasePoints, + allocate: 10, + pull: { + count: 10, + rate: { + base: new Map([ + [0, 889], + [1, 100], + [2, 10], + [3, 1], + ]), + additions: { + times: value => { + for (const item of AdditonMap.times.reverse()) + if (value >= item.value) return item.additions + return new Map() + }, + achievements: value => { + const size = value.size + for (const item of AdditonMap.achievements.reverse()) + if (size >= item.value) return item.additions + return new Map() + }, + }, + }, + }, +} + +export default config diff --git a/apps/web/src/containers/Alloc.css b/apps/web/src/containers/Alloc.css new file mode 100644 index 0000000..094dfc5 --- /dev/null +++ b/apps/web/src/containers/Alloc.css @@ -0,0 +1,112 @@ +.screen.point-allocation { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 1rem; + width: 100%; + .allocation-input { + display: flex; + gap: 0; + border: 0.0625rem solid var(--base-text-color); + box-sizing: border-box; + width: 100%; + button { + padding: 0; + margin: 0; + width: 2rem; + height: 2rem; + border: none; + text-align: center; + } + input { + flex: 1; + height: 2rem; + width: 2rem; + } + } + .points-detail { + min-width: 100%; + color: var(--color-primary); + display: flex; + position: absolute; + flex-direction: column; + white-space: nowrap; + background: var(--base-background-color); + border: 0.0625rem solid var(--color-primary); + box-sizing: border-box; + top: 0; + left: 0; + transform: translateY(-100%); + margin: 0; + li { + display: flex; + justify-content: space-between; + line-height: 2rem; + padding: 0 0.5rem; + gap: 0.5rem; + } + li:not(:first-child) { + border-top: 0.0625rem solid var(--color-primary); + } + } + > ul.alloc { + display: flex; + flex-direction: row; + justify-content: center; + gap: 0.5rem; + padding: 0; + margin: 0; + list-style: none; + width: 100%; + > li { + flex: 1 0; + display: flex; + position: relative; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0; + > span { + width: 100%; + height: 2rem; + border: 0.0625rem solid var(--base-text-color); + border-bottom: none; + text-align: center; + line-height: 2rem; + box-sizing: border-box; + } + } + > li.left { + > span { + background: var(--color-primary); + color: var(--base-background-color); + border: 0.0625rem solid var(--color-primary); + border-bottom: none; + } + > button { + flex: 1; + font-size: 1rem; + line-height: 2rem; + width: 6rem; + padding: 0; + box-sizing: border-box; + } + } + } + > div { + display: flex; + flex-direction: row; + justify-content: center; + width: 100%; + gap: 0.5rem; + button { flex: 1 0; } + } + > ul.talent-list { + display: flex; + flex-direction: column; + gap: 0.5rem; + width: 100%; + li { width: 100%; } + } +} \ No newline at end of file diff --git a/apps/web/src/containers/Alloc.tsx b/apps/web/src/containers/Alloc.tsx new file mode 100644 index 0000000..88cfc01 --- /dev/null +++ b/apps/web/src/containers/Alloc.tsx @@ -0,0 +1,107 @@ +import { useState } from 'react' +import { useAllocator, usePointRandomizer, useLeftPoints } from '@remake/hooks' +import { usePicked, useReplaced } from '@remake/hooks' +import type { AdditionalPoint } from '@remake/hooks' +import { properties } from '@/display' +import { keys } from '@remake/vitex' +import { BasePoints } from '@/config' +import { talents } from '@remake/data' +import Replaced from '@/components/Replaced' +import './Alloc.css' + +interface AllocInputProps { + point: number + onChange: (point: number) => void +} + +function AllocInput(props: AllocInputProps) { + return ( +
+ + props.onChange(Number(e.target.value))} + /> + +
+ ) +} + +interface PointsDetailProps { + source: AdditionalPoint[] +} + +function PointsDetail({ source }: PointsDetailProps) { + return ( +
    +
  • + 基础 + {BasePoints} +
  • + {source.map(({ talent, points }) => ( +
  • + {talents.get(talent)?.name ?? talent} + {points} +
  • + ))} +
+ ) +} + +export function Alloc() { + const picked = usePicked() + const { + talents: { chains }, + additionalPoints: { source }, + } = useReplaced() + const left = useLeftPoints() + const [allocation, allocator] = useAllocator() + const random = usePointRandomizer() + const [showDetail, setShowDetail] = useState(false) + const handleNext = () => { + // navigate('/life') + } + return ( +
+
    + {Array.from(picked, id => ( +
  • + +
  • + ))} +
+
    +
  • + 剩余点数 + + {showDetail && } +
  • + {keys(allocation).map(key => ( +
  • + {properties[key]} + allocator(key, value)} + /> +
  • + ))} +
+
+ + +
+
+ ) +} +export default Alloc diff --git a/apps/web/src/containers/Home.css b/apps/web/src/containers/Home.css new file mode 100644 index 0000000..1d5b552 --- /dev/null +++ b/apps/web/src/containers/Home.css @@ -0,0 +1,17 @@ +.screen.home { + gap: 5rem; + .title { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + h1 { + font-size: 4rem; + margin: 0; + } + h2 { + font-size: 2rem; + margin: 0; + } + } +} diff --git a/apps/web/src/containers/Home.tsx b/apps/web/src/containers/Home.tsx new file mode 100644 index 0000000..3aae358 --- /dev/null +++ b/apps/web/src/containers/Home.tsx @@ -0,0 +1,17 @@ +import { useRemake } from '@remake/hooks' +import './Home.css' + +export default function Home() { + const remake = useRemake() + return ( +
+
+

人生重开模拟器

+

这垃圾人生一秒也不想待了

+
+ +
+ ) +} diff --git a/apps/web/src/containers/Loading.tsx b/apps/web/src/containers/Loading.tsx new file mode 100644 index 0000000..202a39f --- /dev/null +++ b/apps/web/src/containers/Loading.tsx @@ -0,0 +1,9 @@ +export function Loading() { + return ( +
+

载入中...

+
+ ) +} + +export default Loading diff --git a/apps/web/src/containers/Play.tsx b/apps/web/src/containers/Play.tsx new file mode 100644 index 0000000..bc1ece9 --- /dev/null +++ b/apps/web/src/containers/Play.tsx @@ -0,0 +1,3 @@ +export default function Life() { + return <> +} diff --git a/apps/web/src/containers/Summary.tsx b/apps/web/src/containers/Summary.tsx new file mode 100644 index 0000000..f0a37a7 --- /dev/null +++ b/apps/web/src/containers/Summary.tsx @@ -0,0 +1,10 @@ +export default function Summary() { + return ( +
+

人生总结

+

最终人生评分: {}

+ {/* 展现解锁的成就等 */} + +
+ ) +} diff --git a/apps/web/src/containers/TalentPick.css b/apps/web/src/containers/TalentPick.css new file mode 100644 index 0000000..323d817 --- /dev/null +++ b/apps/web/src/containers/TalentPick.css @@ -0,0 +1,22 @@ +.screen.talent-pick { + display: flex; + flex-direction: column; + justify-content: center; + gap: 1rem; + width: 100%; + ul.talent-list { + display: flex; + flex-direction: column; + gap: 0.5rem; + li { + display: flex; + align-items: center; + justify-content: center; + gap: 1rem; + padding: 0; + .talent { + width: 100%; + } + } + } +} \ No newline at end of file diff --git a/apps/web/src/containers/TalentPick.tsx b/apps/web/src/containers/TalentPick.tsx new file mode 100644 index 0000000..9d5b29d --- /dev/null +++ b/apps/web/src/containers/TalentPick.tsx @@ -0,0 +1,39 @@ +// import { useEffect } from 'react' +import { useTalentPuller, useTalentPicker } from '@remake/hooks' +import { useTalentSubmit, useSubmitIsEnable } from '@remake/hooks' +import TalentComponent from '@/components/Talent' +import './TalentPick.css' + +export default function TalentPick() { + const [pulled, puller] = useTalentPuller() + const [talents, picker] = useTalentPicker() + const [enabled, limit] = useSubmitIsEnable() + const submit = useTalentSubmit() + // useEffect(puller, []) + if (!pulled) + return ( +
+ +
+ ) + return ( +
+
    + {pulled.map(id => ( +
  • picker(id)}> + +
  • + ))} +
+ {enabled ? ( + + ) : ( + + )} +
+ ) +} diff --git a/apps/web/src/display.ts b/apps/web/src/display.ts new file mode 100644 index 0000000..fb83303 --- /dev/null +++ b/apps/web/src/display.ts @@ -0,0 +1,6 @@ +export const properties = { + charm: '颜值', + intelligence: '智力', + strength: '体质', + money: '家境', +} diff --git a/apps/web/src/hooks/storage.ts b/apps/web/src/hooks/storage.ts new file mode 100644 index 0000000..bc12f25 --- /dev/null +++ b/apps/web/src/hooks/storage.ts @@ -0,0 +1,44 @@ +import { useCallback, useTransition } from 'react' +import { atom, useAtom } from 'jotai' +import { useConfigInject, useProfile, useProfileInject } from '@remake/hooks' +import { get, set } from '@/storage' +import { config } from '@/config' + +const initedAtom = atom(false) + +export const useInit = () => { + const configInject = useConfigInject() + const profileInject = useProfileInject() + const [inited, setInited] = useAtom(initedAtom) + const [_, startTransition] = useTransition() + const loader = useCallback(() => { + configInject(config) + startTransition(async () => { + const { profile } = await get(['profile']) + const parsed = profile ? JSON.parse(profile) || {} : {} + profileInject({ + ...parsed, + times: parsed.times || 0, + achievements: new Set(parsed.achievements || []), + events: new Set(parsed.events || []), + talents: new Set(parsed.talents || []), + }) + setInited(true) + }) + }, []) + return [inited, loader] as const +} + +export const useSaver = () => { + const [profile] = useProfile() + const saver = useCallback(() => { + const str = JSON.stringify({ + times: profile.times, + achievements: Array.from(profile.achievements), + events: Array.from(profile.events), + talents: Array.from(profile.talents), + }) + set({ profile: str }) + }, [profile]) + return saver +} diff --git a/apps/web/src/index.tsx b/apps/web/src/index.tsx index f996974..95156cc 100644 --- a/apps/web/src/index.tsx +++ b/apps/web/src/index.tsx @@ -1,6 +1,17 @@ -import { render } from 'preact' -export function App() { - return
Hello
-} +import { createRoot } from 'react-dom/client' +import { StrictMode } from 'react' +import { Game } from './Game' +import { ThemeToggle } from './components/ThemeToggle' +import { Jotai } from './jotai' +import './styles/colors.css' +import './styles/common.css' -render(, document.getElementById('app')!) +const container = document.getElementById('remake')! +const root = createRoot(container) +root.render( + + + + + , +) diff --git a/apps/web/src/jotai.ts b/apps/web/src/jotai.ts new file mode 100644 index 0000000..5582c9f --- /dev/null +++ b/apps/web/src/jotai.ts @@ -0,0 +1,6 @@ +import { useAtomsDevtools } from 'jotai-devtools/utils' +export function Jotai() { + useAtomsDevtools('Store') + return null +} +export default Jotai diff --git a/apps/web/src/storage.ts b/apps/web/src/storage.ts new file mode 100644 index 0000000..097213f --- /dev/null +++ b/apps/web/src/storage.ts @@ -0,0 +1,12 @@ +export async function get(keys: Key[]) { + return Object.fromEntries(keys.map(k => [k, localStorage.getItem(k)])) as { + [K in Key]: string | null + } +} + +export async function set(data: Record) { + for (const key in data) { + localStorage.setItem(key, data[key]) + } + return true +} diff --git a/apps/web/src/styles/colors.css b/apps/web/src/styles/colors.css new file mode 100644 index 0000000..3aa2f6c --- /dev/null +++ b/apps/web/src/styles/colors.css @@ -0,0 +1,14 @@ +:root { + color-scheme: light dark; + --base-text-color: light-dark(#121314, #f9fafb); + --base-background-color: light-dark(#f7f7f7, #121314); + + --color-grade-0: light-dark(#4e5052, #f9fafb); + --color-grade-1: light-dark(#4aa8da, #afe3ff); + --color-grade-2: light-dark(#b03fe4, #e09eff); + --color-grade-3: light-dark(#ffaf2d, #ffe48d); + + --color-primary: light-dark(#61b700, #b9ff69); + --color-info: light-dark(#454ad3, #b5b7ff); + --color-error: light-dark(#e42b2b, #ff6969); +} \ No newline at end of file diff --git a/apps/web/src/styles/common.css b/apps/web/src/styles/common.css new file mode 100644 index 0000000..db0f3f2 --- /dev/null +++ b/apps/web/src/styles/common.css @@ -0,0 +1,89 @@ +html { transition: all 0.2s ease-in-out; } +html[data-theme='light'] { color-scheme: light; } +html[data-theme='dark'] { color-scheme: dark; } +:root { color: var(--base-text-color); } +html { + overflow-y: auto; + overflow-x: auto; + scrollbar-width: none; + -ms-overflow-style: none; + -webkit-overflow-scrolling: touch; + &::-webkit-scrollbar { display: none; } +} +body { + min-height: calc(100dvh - 2rem); + width: calc(100dvw - 2rem); + display: grid; + place-items: center; + margin: 1rem; + padding: 0; + background: var(--base-background-color); + font-family: + -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "PingFang SC", + "Noto Sans SC", "Noto Sans CJK SC", "Noto Sans", + "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.font-mono { + font-family: + "SF Mono", SFMono-Regular, Menlo, Monaco, Consolas, + "Noto Sans Mono CJK SC", "Noto Sans Mono", "Noto Code", + ui-monospace, monospace; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +button { + --style-color: var(--base-text-color); + --style-background: var(--base-background-color); + --border-color: var(--style-color); + --background-color: var(--style-background); + --text-color: var(--style-color); + color: var(--text-color); + cursor: pointer; + box-sizing: border-box; + border: var(--border-color) 0.0625rem solid; + background: var(--background-color); + font-size: 1.2rem; + padding: 0 1rem; + line-height: 2.5rem; + display: inline-flex; + align-items: center; + justify-content: center; + font-family: Arial, sans-serif; + user-select: none; + transition: all 0.2s ease-in-out; + &:hover { + --background-color: var(--style-color); + --text-color: var(--style-background); + } + &.primary { --style-color: var(--color-primary); } + &.info { --style-color: var(--color-info); } + &.error { --style-color: var(--color-error); } +} + +ul { + list-style: none; + padding: 0; + margin: 0; +} + +input { + font-size: 1rem; + padding: 0; + margin: 0; + border: none; + background: var(--base-background-color); + text-align: center; + -moz-appearance: textfield; + appearance: none; + color: var(--base-text-color); + transition: all 0.2s ease-in-out; + &:focus { outline: none; } + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } +} + +@media (max-width: 32rem) { :root { font-size: 2.8vw; } } \ No newline at end of file diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 5b52f39..f4b3cb1 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -1,39 +1,13 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - // Environment setup & latest features "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", "jsx": "react-jsx", - "allowJs": true, - "types": ["preact"], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "jsxImportSource": "preact", + "types": ["react", "vite/client"], + "jsxImportSource": "react", "paths": { "@/*": ["./src/*"], - "@assets/*": ["./assets/*"], - "react": ["./node_modules/preact/compat/"], - "react-dom": ["./node_modules/preact/compat/"] }, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true }, - "include": ["node_modules/vite/client.d.ts", "**/*"] + "include": ["**/*"] } diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 426dcd7..a768e1e 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -1,7 +1,8 @@ import { defineConfig } from 'vite' -import preact from '@preact/preset-vite' +import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [preact()], + plugins: [react()], + resolve: { tsconfigPaths: true }, }) diff --git a/package.json b/package.json index 6633e9e..d592a80 100644 --- a/package.json +++ b/package.json @@ -9,23 +9,25 @@ "build:data": "bun --filter @remake/data build", "preview": "bun --filter @remake/web preview", "start": "bun --filter @remake/console start", - "lint": "eslint", + "lint": "bunx --bun eslint", "lint:console": "bun --filter @remake/console lint", "lint:web": "bun --filter @remake/web lint", "lint:core": "bun --filter @remake/core lint", "lint:data": "bun --filter @remake/data lint", "lint:condition": "bun --filter @remake/condition lint", + "lint:hooks": "bun --filter @remake/hooks lint", "test": "bun --filter @remake/web test", "test:console": "bun --filter @remake/console test", "test:web": "bun --filter @remake/web test", "test:core": "bun --filter @remake/core test", "test:data": "bun --filter @remake/data test", - "test:condition": "bun --filter @remake/condition test" + "test:condition": "bun --filter @remake/condition test", + "test:hooks": "bun --filter @remake/hooks test" }, "devDependencies": { "@types/bun": "1.3.14", - "@typescript-eslint/eslint-plugin": "^8.65.0", - "@typescript-eslint/parser": "^8.65.0", + "@typescript-eslint/eslint-plugin": "^8.66.0", + "@typescript-eslint/parser": "^8.66.0", "@typescript/native": "npm:typescript@^7.0.2", "eslint": "^10.8.0", "typescript": "npm:@typescript/typescript6@^6.0.2" diff --git a/packages/condition/index.ts b/packages/condition/index.ts index cd599da..629d0f2 100644 --- a/packages/condition/index.ts +++ b/packages/condition/index.ts @@ -13,9 +13,7 @@ export function parse(condition: string): ConditionTree { const catchString = (i: number): void => { const str = condition.substring(cursor, i).trim() cursor = i - if (str) { - stack[0]?.push(str) - } + if (str) stack[0]?.push(str) } for (let i = 0; i < length; i++) { @@ -118,13 +116,13 @@ function checkProp(property: PropertyContainer, condition: string): boolean { switch (symbol) { case '>': - return propData > conditionData + return (propData ?? 0) > conditionData case '<': - return propData < conditionData + return (propData ?? 0) < conditionData case '>=': - return propData >= conditionData + return (propData ?? 0) >= conditionData case '<=': - return propData <= conditionData + return (propData ?? 0) <= conditionData case '=': if (propData instanceof Set) { return propData.has(conditionData) @@ -132,7 +130,7 @@ function checkProp(property: PropertyContainer, condition: string): boolean { if (Array.isArray(propData)) { return propData.includes(conditionData) } - return propData == conditionData + return (propData ?? 0) == conditionData case '!=': if (propData instanceof Set) { return !propData.has(conditionData) @@ -140,7 +138,7 @@ function checkProp(property: PropertyContainer, condition: string): boolean { if (Array.isArray(propData)) { return !propData.includes(conditionData) } - return propData != conditionData + return (propData ?? 0) != conditionData case '?': // 🌟 包含判定符(如 属性值 是否在 [1,2,3] 数组范围内) if (propData instanceof Set) { diff --git a/packages/condition/tsconfig.json b/packages/condition/tsconfig.json index 96bc27a..751b6ef 100644 --- a/packages/condition/tsconfig.json +++ b/packages/condition/tsconfig.json @@ -1,29 +1,4 @@ { - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "types": ["bun"], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true - }, + "extends": "../../tsconfig.json", "include": ["**/*"] } diff --git a/packages/core/package.json b/packages/core/package.json index b6402e5..c62f382 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,6 +3,7 @@ "type": "module", "version": "3.0.0", "author": "Vick Scarlet ", + "main": "src/index.ts", "scripts": { "lint": "eslint .", "test": "bun test" @@ -15,5 +16,17 @@ }, "eslintConfig": { "extends": "../../package.json" + }, + "exports": { + ".": { + "types": "./src/index.ts", + "import": "./src/index.ts", + "default": "./src/index.ts" + }, + "./*": { + "types": "./src/*.ts", + "import": "./src/*.ts", + "default": "./src/*.ts" + } } } diff --git a/packages/core/src/achievement.spec.ts b/packages/core/src/achievement.spec.ts index 9ad4795..3177c78 100644 --- a/packages/core/src/achievement.spec.ts +++ b/packages/core/src/achievement.spec.ts @@ -1,6 +1,7 @@ import { expect, test, describe } from 'bun:test' import { createState } from './state' import { trigger } from './achievement' +import { AchievementOpportunity } from '@remake/data' import { enableMapSet } from 'immer' enableMapSet() @@ -20,7 +21,11 @@ describe('Achievement', () => { test('trigger [times:500]', () => { const p = { ...profile, times: 500 } - const result = trigger('END', createState(allocation, []), p) + const result = trigger( + AchievementOpportunity.End, + createState(allocation, []), + p, + ) expect(result.state.achievements).toContain(101) // 既视感 expect(result.state.achievements).toContain(102) // 孟婆愁 expect(result.state.achievements).toContain(103) // 所有人都是我 diff --git a/packages/core/src/achievement.ts b/packages/core/src/achievement.ts index ceb0010..e29f05c 100644 --- a/packages/core/src/achievement.ts +++ b/packages/core/src/achievement.ts @@ -1,13 +1,10 @@ -import type { - Achievement, - AchievementOpportunity, -} from '@remake/data/achievement' -import achievements from '@remake/data/achievement' -import type { GameState, ProfileState } from '@/state' +import type { Achievement, AchievementOpportunity } from '@remake/data' +import { achievements } from '@remake/data' +import type { GameState, ProfileState } from './state' import { createFlatState } from './state' import { check } from '@remake/condition' import { produce } from 'immer' -import type { TriggerResult } from '@/game' +import type { TriggerResult } from './game' const OpportunityMap = Map.groupBy( achievements.keys(), diff --git a/packages/core/src/event.ts b/packages/core/src/event.ts index 43c9f92..a31985d 100644 --- a/packages/core/src/event.ts +++ b/packages/core/src/event.ts @@ -1,11 +1,11 @@ import type { Event } from '@remake/data/event' import events from '@remake/data/event' -import type { Properties } from '@/state' -import type { GameState, ProfileState } from '@/state' -import { propsEffect, createFlatState } from '@/state' +import type { Properties } from './state' +import type { GameState, ProfileState } from './state' +import { propsEffect, createFlatState } from './state' import { check as checkCondition } from '@remake/condition' import { produce } from 'immer' -import type { TriggerResult } from '@/game' +import type { TriggerResult } from './game' export function check( event: Event['id'], @@ -30,7 +30,7 @@ export function trigger( draft.events.add(eventId) if (!effect) return if (effect.LIF) draft.life += effect.LIF - const pe = {} as Partial + const pe: Partial = {} if (effect.CHR) pe.charm = effect.CHR if (effect.INT) pe.intelligence = effect.INT if (effect.STR) pe.strength = effect.STR diff --git a/packages/core/src/game.ts b/packages/core/src/game.ts index 166ed92..d6e0ccb 100644 --- a/packages/core/src/game.ts +++ b/packages/core/src/game.ts @@ -1,26 +1,23 @@ -import ages from '@remake/data/age' -import { propsEffect } from '@/state' -import { enableMapSet, produce } from 'immer' +import type { Achievement, Event, Talent } from '@remake/data' +import { ages, AchievementOpportunity as Ao } from '@remake/data' +import type { Allocation, GameState, ProfileState } from './state' +import { createState, nextProfile, propsEffect } from './state' +import { summary as stateSummary } from './state' +import type { PullOptions, ReplacementResult } from './talent' +import type { AdditionalPoint, AdditionalPoints } from './talent' +import { pull, exclude, replacement, additionalPoints } from './talent' +import { trigger as ttr } from './talent' +import { trigger as atr } from './achievement' +import { trigger as etr, check as ec } from './event' +import type { RNG } from '@remake/vitex' +import { pickWeight } from '@remake/vitex' +import { produce, enableMapSet } from 'immer' enableMapSet() -export type * as achievement from '@/achievement' -export type * as event from '@/event' -export type * as talent from '@/talent' -export type * as state from '@/state' -import type { GameState, ProfileState } from '@/state' -export type { GameState, ProfileState } export interface TriggerResult { state: GameState triggers: T[] } - -export { pull } from '@/talent' -// export { summary, nextProfile } from '@/state' - -import { replacement, additionalPoints } from '@/talent' -import type { ReplacementResult, AdditionalPoints } from '@/talent' -import type { RNG } from '@remake/vitex' - export interface TalentsPickedResult { talents: ReplacementResult additionalPoints: AdditionalPoints @@ -34,8 +31,6 @@ export function talentsPicked( return { talents: r, additionalPoints: ap } } -import { createState } from '@/state' - export interface StartResult { state: GameState achievements: Achievement['id'][] @@ -45,19 +40,9 @@ export function start( ...args: Parameters ): StartResult { const state = createState(...args) - const ar = achievementTrigger('START', state, profile) + const ar = atr(Ao.Start, state, profile) return { state: ar.state, achievements: ar.triggers } } - -import type { Achievement } from '@remake/data/achievement' -import type { Event } from '@remake/data/event' -import type { Talent } from '@remake/data/talent' -import { trigger as achievementTrigger } from '@/achievement' -import { trigger as eventTrigger } from '@/event' -import { trigger as talentTrigger } from '@/talent' -import { check as eventCheck } from '@/event' -import { pickWeight } from '@remake/vitex' - export interface NextResult { state: GameState age: number @@ -76,13 +61,13 @@ export function next( draft.props = propsEffect(state.props, { age: 1 }) }) const age = s.props.current.age - const tr = talentTrigger(s, profile, rng) + const tr = ttr(s, profile, rng) const events = ages .get(age)! - .event.filter(([e]) => eventCheck(e, tr.state, profile)) + .event.filter(([e]) => ec(e, tr.state, profile)) const event = pickWeight(events, rng)! - const er = eventTrigger(event, tr.state, profile) - const ar = achievementTrigger('TRAJECTORY', er.state, profile) + const er = etr(event, tr.state, profile) + const ar = atr(Ao.Trajectory, er.state, profile) const end = ar.state.life < 1 return { state: ar.state, @@ -94,8 +79,6 @@ export function next( } } -import { summary as stateSummary } from '@/state' - export interface SummaryResult { state: GameState summary: number @@ -105,12 +88,11 @@ export function summary( state: GameState, profile: ProfileState, ): SummaryResult { - const ar = achievementTrigger('SUMMARY', state, profile) + const ar = atr(Ao.Summary, state, profile) const s = stateSummary(ar.state) return { state: ar.state, summary: s, achievements: ar.triggers } } -import { nextProfile } from '@/state' export interface EndResult { profile: ProfileState achievements: Achievement['id'][] @@ -121,7 +103,12 @@ export function end( profile: ProfileState, lockedTalent?: Talent['id'], ) { - const ar = achievementTrigger('END', state, profile) + const ar = atr(Ao.End, state, profile) const p = nextProfile(profile, ar.state, lockedTalent) return { profile: p, achievements: ar.triggers } } + +export { pull, exclude } +export type { GameState, ProfileState, Allocation, RNG } +export type { PullOptions, ReplacementResult } +export type { AdditionalPoint, AdditionalPoints } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 2fbd5c4..252d9cd 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1 +1 @@ -export * from '@/game' +export * from './game' diff --git a/packages/core/src/state.spec.ts b/packages/core/src/state.spec.ts index 7bbcd46..57c3152 100644 --- a/packages/core/src/state.spec.ts +++ b/packages/core/src/state.spec.ts @@ -1,10 +1,7 @@ import { expect, test, describe } from 'bun:test' import { parse, type ConditionNode } from '@remake/condition' -import achievements from '@remake/data/achievement' -import events from '@remake/data/event' -import talents from '@remake/data/talent' - +import { achievements, events, talents } from '@remake/data' import type { GameState, ProfileState, Properties } from './state' import { createFlatState, createHLProperties, propsEffect } from './state' import { SupportedFlatStateKeys } from './state' diff --git a/packages/core/src/state.ts b/packages/core/src/state.ts index 81ca331..c9962e4 100644 --- a/packages/core/src/state.ts +++ b/packages/core/src/state.ts @@ -1,8 +1,6 @@ -import type { Talent } from '@remake/data/talent' -import type { Event } from '@remake/data/event' -import type { Achievement } from '@remake/data/achievement' +import type { Achievement, Event, Talent } from '@remake/data' import { produce } from 'immer' -import { sum } from '@remake/vitex' +import { sum, keys } from '@remake/vitex' /** 基础的属性 */ export interface Properties { @@ -112,7 +110,7 @@ type FlatMapper = ( state: FlatTarget, ) => FlatState[Key] -const FlatMappers = { +const FlatMappers: { [Key in FlatStateKey]: FlatMapper } = { AGE: state => state.game.props.current.age, CHR: state => state.game.props.current.charm, INT: state => state.game.props.current.intelligence, @@ -139,9 +137,9 @@ const FlatMappers = { ATLT: state => state.profile.talents, AACH: state => state.profile.achievements, SUM: ({ game }) => summary(game), -} as { [Key in FlatStateKey]: FlatMapper } +} -export const SupportedFlatStateKeys = new Set(Object.keys(FlatMappers)) +export const SupportedFlatStateKeys = new Set(keys(FlatMappers)) const flatStateHandle = { get(target: FlatTarget, prop: Key) { @@ -175,7 +173,7 @@ export function propsEffect(hlp: HLProperties, effect: Partial) { export function highestProperties(a: Properties, b?: Properties): Properties { if (!b) return { ...a } const result = {} as Properties - for (const key of Object.keys(a) as (keyof Properties)[]) { + for (const key of keys(a)) { result[key] = Math.max(a[key], b[key]) } return result @@ -184,7 +182,7 @@ export function highestProperties(a: Properties, b?: Properties): Properties { export function lowestProperties(a: Properties, b?: Properties): Properties { if (!b) return { ...a } const result = {} as Properties - for (const key of Object.keys(a) as (keyof Properties)[]) { + for (const key of keys(a)) { result[key] = Math.min(a[key], b[key]) } return result diff --git a/packages/core/src/talent.spec.ts b/packages/core/src/talent.spec.ts index 41a9807..11a8086 100644 --- a/packages/core/src/talent.spec.ts +++ b/packages/core/src/talent.spec.ts @@ -2,8 +2,7 @@ import { expect, test, describe } from 'bun:test' import type { ProfileState } from './state' import type { PullOptions } from './talent' import { pull, exclude, additionalPoints, replacement } from './talent' -import { createState } from './state' -import talents from '@remake/data/talent' +import { talents } from '@remake/data' import { produce } from 'immer' import { enableMapSet } from 'immer' enableMapSet() diff --git a/packages/core/src/talent.ts b/packages/core/src/talent.ts index 5594bc6..a28c04a 100644 --- a/packages/core/src/talent.ts +++ b/packages/core/src/talent.ts @@ -1,12 +1,12 @@ -import type { Talent, TalentGrade } from '@remake/data/talent' -import talents from '@remake/data/talent' -import type { Properties } from '@/state' -import type { GameState, ProfileState } from '@/state' +import type { Talent, TalentGrade } from '@remake/data' +import { talents } from '@remake/data' +import type { Properties } from './state' +import type { GameState, ProfileState } from './state' import { propsEffect, createFlatState } from './state' import { check } from '@remake/condition' import { pick, pickWeight, type RNG } from '@remake/vitex' import { produce } from 'immer' -import type { TriggerResult } from '@/game' +import type { TriggerResult } from './game' const Grades: TalentGrade[] = [0, 1, 2, 3] as const const GradeMap = Map.groupBy( @@ -16,10 +16,6 @@ const GradeMap = Map.groupBy( export const count = talents.size -export function get(talent: number) { - return talents.get(talent) -} - export type PullRate = Map export type PullRateAddition = { mode: 'add' | 'multiply' @@ -64,7 +60,11 @@ export interface PullOptions { rate: RateOptions } -export function pull(options: PullOptions, profile: ProfileState, rng?: RNG) { +export function pull( + options: PullOptions, + profile: ProfileState, + rng?: RNG, +): Talent['id'][] { const rate = Array.from( talentRateWithAddition(options.rate, profile).entries(), ) diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index d2cfae3..751b6ef 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,32 +1,4 @@ { - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "types": ["bun"], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "paths": { - "@/*": ["./src/*"], - }, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true - }, + "extends": "../../tsconfig.json", "include": ["**/*"] } diff --git a/packages/data/package.json b/packages/data/package.json index 9a120ad..a15c845 100644 --- a/packages/data/package.json +++ b/packages/data/package.json @@ -5,11 +5,15 @@ "main": "src/index.ts", "author": "Vick Scarlet ", "scripts": { - "build": "bunx --bun v-transform@3.0.1 transform -t ts -w src -d dist \"**/[!~$]*.xlsx\" ", + "build": "bunx --bun v-transform transform -t ts -w src -d dist \"**/[!~$]*.xlsx\" --map", "lint": "eslint .", "test": "bun test" }, "exports": { + ".": { + "types": "./src/index.ts", + "import": "./src/index.ts" + }, "./*": { "types": "./dist/*.ts", "import": "./dist/*.ts" diff --git a/packages/data/src/achievement.types.ts b/packages/data/src/achievement.types.ts index 1befe49..278ebfb 100644 --- a/packages/data/src/achievement.types.ts +++ b/packages/data/src/achievement.types.ts @@ -1,12 +1,18 @@ /** 成就稀有度 */ -export type AchievementGrade = 0 | 1 | 2 | 3 +export enum AchievementGrade { + White = 0, + Blue = 1, + Purple = 2, + Orange = 3, +} /** 成就触发时机 */ -export type AchievementOpportunity = - | 'START' // 分配完成点数,点击开始新人生后 - | 'TRAJECTORY' // 每一年的人生经历中 - | 'SUMMARY' // 人生结束,点击人生总结后 - | 'END' // 游戏完成,点击重开 重开次数在这之后才会+1 +export enum AchievementOpportunity { + Start = 'START', // 分配完成点数,点击开始新人生后 + Trajectory = 'TRAJECTORY', // 每一年的人生经历中 + Summary = 'SUMMARY', // 人生结束,点击人生总结后 + End = 'END', // 游戏完成,点击重开 重开次数在这之后才会+1 +} /** 成就 */ export type Achievement = { diff --git a/packages/data/src/index.ts b/packages/data/src/index.ts new file mode 100644 index 0000000..5e2bd1a --- /dev/null +++ b/packages/data/src/index.ts @@ -0,0 +1,12 @@ +export * from '../dist/achievement' +export { default as achievements } from '../dist/achievement' +export * from '../dist/age' +export { default as ages } from '../dist/age' +export * from '../dist/character' +export { default as characters } from '../dist/character' +export * from '../dist/event' +export { default as events } from '../dist/event' +export * from '../dist/specialthanks' +export { default as specialThanks } from '../dist/specialthanks' +export * from '../dist/talent' +export { default as talents } from '../dist/talent' diff --git a/packages/data/src/talent.types.ts b/packages/data/src/talent.types.ts index 7a1b1e1..dd0f162 100644 --- a/packages/data/src/talent.types.ts +++ b/packages/data/src/talent.types.ts @@ -1,5 +1,10 @@ /** 天赋稀有度 */ -export type TalentGrade = 0 | 1 | 2 | 3 +export enum TalentGrade { + White = 0, + Blue = 1, + Purple = 2, + Orange = 3, +} /** 天赋效果 */ export type TalentEffect = { diff --git a/packages/data/tsconfig.json b/packages/data/tsconfig.json index 96bc27a..751b6ef 100644 --- a/packages/data/tsconfig.json +++ b/packages/data/tsconfig.json @@ -1,29 +1,4 @@ { - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "types": ["bun"], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true - }, + "extends": "../../tsconfig.json", "include": ["**/*"] } diff --git a/packages/hooks/bunfig.toml b/packages/hooks/bunfig.toml new file mode 100644 index 0000000..4c34c96 --- /dev/null +++ b/packages/hooks/bunfig.toml @@ -0,0 +1,2 @@ +[test] +preload = ["./setup-tests.ts"] # 在运行测试前加载环境 diff --git a/packages/hooks/package.json b/packages/hooks/package.json new file mode 100644 index 0000000..5891d7e --- /dev/null +++ b/packages/hooks/package.json @@ -0,0 +1,40 @@ +{ + "name": "@remake/hooks", + "type": "module", + "version": "3.0.0", + "author": "Vick Scarlet ", + "main": "./src/index.ts", + "scripts": { + "lint": "bunx --bun eslint", + "test": "bun test" + }, + "dependencies": { + "@remake/core": "workspace:*", + "@remake/data": "workspace:*", + "@remake/vitex": "workspace:*" + }, + "peerDependencies": { + "jotai": "^2.20.2", + "react": "^19.2.8" + }, + "devDependencies": { + "@happy-dom/global-registrator": "^20.11.1", + "@testing-library/jest-dom": "^7.0.0", + "@testing-library/react": "^16.3.2", + "@types/react": "^19.2.18", + "eslint-config-react": "^1.1.7" + }, + "eslintConfig": { + "extends": "react" + }, + "exports": { + ".": { + "import": "./src/index.ts", + "types": "./src/index.ts" + }, + "./*": { + "import": "./src/*.ts", + "types": "./src/*.ts" + } + } +} diff --git a/packages/hooks/setup-tests.ts b/packages/hooks/setup-tests.ts new file mode 100644 index 0000000..65a74d3 --- /dev/null +++ b/packages/hooks/setup-tests.ts @@ -0,0 +1,12 @@ +import { GlobalRegistrator } from '@happy-dom/global-registrator' +GlobalRegistrator.register() +import { afterEach, expect } from 'bun:test' +import { cleanup } from '@testing-library/react' +import * as matchers from '@testing-library/jest-dom/matchers' + +expect.extend(matchers) + +// Optional: cleans up `render` after each test +afterEach(() => { + cleanup() +}) diff --git a/packages/hooks/src/alloc.ts b/packages/hooks/src/alloc.ts new file mode 100644 index 0000000..6476a4f --- /dev/null +++ b/packages/hooks/src/alloc.ts @@ -0,0 +1,69 @@ +import { useCallback } from 'react' +import { atom, useAtom, useAtomValue, useSetAtom } from 'jotai' +import { useConfig } from './config' +import { useReplaced } from './talent' +import type { Allocation } from '@remake/core' +import type { RNG } from '@remake/vitex' +import { keys, shuffle, random as frandom } from '@remake/vitex' + +const init: Allocation = { charm: 0, intelligence: 0, strength: 0, money: 0 } +const allocAtom = atom(init) + +const alloced = (alloc: Allocation) => + Object.values(alloc).reduce((a, b) => a + b, 0) + +export const usePoints = () => { + const { points } = useConfig() + const { additionalPoints } = useReplaced() + return Math.max(points + additionalPoints.points, 0) +} + +export const useLeftPoints = () => { + const points = usePoints() + const alloc = useAtomValue(allocAtom) + return points - alloced(alloc) +} + +export const useAllocator = () => { + const { allocate } = useConfig() + const total = usePoints() + const [alloc, setAlloc] = useAtom(allocAtom) + const allocator = useCallback( + (key: keyof Allocation, value: number) => { + setAlloc(prev => { + const left = total - alloced(prev) + prev[key] + const max = Math.min(left, allocate) + const final = Math.max(Math.min(max, value), 0) + if (prev[key] === final) return prev + return { ...prev, [key]: final } + }) + }, + [allocate, total], + ) + return [alloc, allocator] as const +} + +export const usePointRandomizer = () => { + const { allocate } = useConfig() + const total = usePoints() + const setAlloc = useSetAtom(allocAtom) + return useCallback( + (rng?: RNG) => { + const suffled = shuffle(keys(init), rng) + let left = total + const alloc = { ...init } + while (suffled.length) { + const key = suffled.pop()! + const max = Math.min(allocate, left) + const min = Math.max(0, left - suffled.length * allocate) + const value = frandom(max, min, rng) + alloc[key] = value + left -= value + } + setAlloc(alloc) + }, + [allocate, total], + ) +} + +export const useAllocSubmit = () => {} diff --git a/packages/hooks/src/config.ts b/packages/hooks/src/config.ts new file mode 100644 index 0000000..3c9e3e2 --- /dev/null +++ b/packages/hooks/src/config.ts @@ -0,0 +1,24 @@ +import { useCallback } from 'react' +import { atom, useSetAtom, useAtomValue } from 'jotai' +import type { PullOptions } from '@remake/core' + +export interface Config { + pick: number + pull: PullOptions + points: number + allocate: number + mode: number +} + +export const configAtom = atom(null) + +export const useConfigInject = () => { + const setConfig = useSetAtom(configAtom) + return useCallback((config: Config) => setConfig(config), [setConfig]) +} + +export const useConfig = () => { + const config = useAtomValue(configAtom) + if (!config) throw new Error('Game config is not set') + return config +} diff --git a/packages/hooks/src/index.ts b/packages/hooks/src/index.ts new file mode 100644 index 0000000..91ad7c0 --- /dev/null +++ b/packages/hooks/src/index.ts @@ -0,0 +1,6 @@ +export * from './config' +export * from './profile' +export * from './talent' +export * from './play' +export * from './alloc' +export type * from '@remake/core' diff --git a/packages/hooks/src/play.ts b/packages/hooks/src/play.ts new file mode 100644 index 0000000..7630986 --- /dev/null +++ b/packages/hooks/src/play.ts @@ -0,0 +1,59 @@ +import { useTransition, useCallback } from 'react' +import { atom, useSetAtom, useAtomValue, useAtom } from 'jotai' +import { useConfig } from './config' +import { useProfile } from './profile' +import { end } from '@remake/core' +import type { GameState } from '@remake/core' +import type { Talent } from '@remake/data/talent' + +export enum Step { + Idle = 'idle', + Mode = 'mode', + Pick = 'pick', + Alloc = 'alloc', + Play = 'play', + Summary = 'summary', +} + +const stepAtom = atom(Step.Idle) +const gameStateAtom = atom(null) + +export const useStep = () => useAtomValue(stepAtom) +export const useSetStep = () => useSetAtom(stepAtom) + +export const useRemake = () => { + const config = useConfig() + const [profile] = useProfile() + const setStep = useSetAtom(stepAtom) + return useCallback(() => { + const step = profile.times < config.mode ? Step.Pick : Step.Mode + setStep(step) + }, [config, profile, setStep]) +} + +export const useEnd = () => { + const [profile, setProfile] = useProfile() + const [step, setStep] = useAtom(stepAtom) + const [state, setState] = useAtom(gameStateAtom) + const [pending, startTransition] = useTransition() + const ender = useCallback( + (talent?: Talent['id']) => { + startTransition(async () => { + if (!state || step === Step.Summary) + throw new Error( + 'Game state is not available or already ended.', + ) + const { profile: next, achievements } = end( + state, + profile, + talent, + ) + setStep(Step.Idle) + setState(null) + setProfile(next) + }) + }, + [state, step, profile, setStep, setState, setProfile], + ) + return [pending, ender] as const +} diff --git a/packages/hooks/src/profile.spec.ts b/packages/hooks/src/profile.spec.ts new file mode 100644 index 0000000..ac52a9c --- /dev/null +++ b/packages/hooks/src/profile.spec.ts @@ -0,0 +1,14 @@ +import { describe, test, expect } from 'bun:test' +import { screen, renderHook } from '@testing-library/react' +import { useProfile, useProfileInject } from './profile' + +describe('profile', () => { + test('inject', () => { + expect(() => renderHook(() => useProfile())).toThrow() + // const inject = renderHook(() => useProfileInject()) + }) + test('no inject throw', () => { + expect(() => renderHook(() => useProfile())).toThrow() + // const inject = renderHook(() => useProfileInject()) + }) +}) diff --git a/packages/hooks/src/profile.ts b/packages/hooks/src/profile.ts new file mode 100644 index 0000000..40f66d2 --- /dev/null +++ b/packages/hooks/src/profile.ts @@ -0,0 +1,19 @@ +import { useCallback } from 'react' +import { atom, useAtom, useSetAtom } from 'jotai' +import type { ProfileState } from '@remake/core' + +const profileAtom = atom(null) + +export const useProfile = () => { + const [profile, setProfile] = useAtom(profileAtom) + if (!profile) throw new Error('Profile is not loaded') + return [profile, setProfile] as const +} + +export const useProfileInject = () => { + const setProfile = useSetAtom(profileAtom) + return useCallback( + (profile: ProfileState) => setProfile(profile), + [setProfile], + ) +} diff --git a/packages/hooks/src/talent.ts b/packages/hooks/src/talent.ts new file mode 100644 index 0000000..4824784 --- /dev/null +++ b/packages/hooks/src/talent.ts @@ -0,0 +1,100 @@ +import { useState, useCallback } from 'react' +import { atom, useAtom, useAtomValue, useSetAtom } from 'jotai' +import { useConfig } from './config' +import { useProfile } from './profile' +import { useSetStep, Step } from './play' +import { pull, exclude, talentsPicked } from '@remake/core' +import type { TalentsPickedResult, RNG } from '@remake/core' +import type { Talent } from '@remake/data/talent' + +const pickedAtom = atom(new Set()) +const replacedAtom = atom(null) + +export const usePicked = () => { + const picked = useAtomValue(pickedAtom) + if (!picked) throw new Error('No talents picked') + return picked +} +export const useReplaced = () => { + const replaced = useAtomValue(replacedAtom) + if (!replaced) throw new Error('No talents replaced') + return replaced +} + +export const useTalentPuller = () => { + const { pull: p } = useConfig() + const [profile] = useProfile() + const [pulled, setPulled] = useState(null) + const puller = useCallback( + (rng?: RNG) => setPulled(pull(p, profile, rng)), + // (rng?: RNG) => + // setPulled([ + // 1142, 1143, 1144, 1145, 1146, 1086, 1122, 1111, 1130, 1048, + // ]), + [p, profile, setPulled], + ) + return [pulled, puller] as const +} + +export type TalentPickerResult = + | { + type: 'ok' + talent?: never + } + | { + type: 'not-enough' + talent?: never + } + | { + type: 'exclude' + talent: Talent['id'] + } + +export const useTalentPicker = () => { + const { pick } = useConfig() + const [picked, setPicked] = useAtom(pickedAtom) + const picker = useCallback( + (talent: Talent['id']): TalentPickerResult => { + if (!picked) { + setPicked(new Set([talent])) + return { type: 'ok' } + } + if (picked.has(talent)) { + const next = new Set(picked) + next.delete(talent) + setPicked(next) + return { type: 'ok' } + } + if (picked.size >= pick) return { type: 'not-enough' } + const e = exclude(talent, picked) + if (e) return { type: 'exclude', talent: e } + const next = new Set([...picked, talent]) + setPicked(next) + return { type: 'ok' } + }, + [pick, picked, setPicked], + ) + return [picked, picker] as const +} + +export const useSubmitIsEnable = () => { + const { pick } = useConfig() + const picked = useAtomValue(pickedAtom) + const enabled = picked.size >= pick + return [enabled, pick] as const +} + +export const useTalentSubmit = () => { + const picked = useAtomValue(pickedAtom) + const setReplaced = useSetAtom(replacedAtom) + const [enabled] = useSubmitIsEnable() + const next = useSetStep() + return useCallback( + (rng?: RNG) => { + if (!enabled) throw new Error('Not enough talents picked') + setReplaced(talentsPicked(picked, rng)) + next(Step.Alloc) + }, + [enabled, picked, setReplaced, next], + ) +} diff --git a/packages/hooks/tsconfig.json b/packages/hooks/tsconfig.json new file mode 100644 index 0000000..0e857c9 --- /dev/null +++ b/packages/hooks/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["react", "bun"], + }, + "include": ["**/*"] +} diff --git a/packages/vitex/index.ts b/packages/vitex/index.ts index 2aa3cf5..c3aad4a 100644 --- a/packages/vitex/index.ts +++ b/packages/vitex/index.ts @@ -22,3 +22,18 @@ export function pickWeight(items: WeightItem[], rng?: RNG) { export function sum(arr: number[]) { return arr.reduce((sum, v) => sum + v, 0) } + +export function shuffle(array: T[], rng?: RNG): T[] { + const result = [...array] + for (let i = result.length - 1; i > 0; i--) { + const j = random(i, 0, rng) + const temp = result[i] + result[i] = result[j]! + result[j] = temp! + } + return result +} + +export function keys(obj: T): (keyof T)[] { + return Object.keys(obj) as (keyof T)[] +} diff --git a/packages/vitex/tsconfig.json b/packages/vitex/tsconfig.json index 96bc27a..751b6ef 100644 --- a/packages/vitex/tsconfig.json +++ b/packages/vitex/tsconfig.json @@ -1,29 +1,4 @@ { - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "types": ["bun"], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true - }, + "extends": "../../tsconfig.json", "include": ["**/*"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 036d8c2..1279254 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,17 +12,17 @@ importers: specifier: 1.3.14 version: 1.3.14 '@typescript-eslint/eslint-plugin': - specifier: ^8.65.0 - version: 8.65.0(@typescript-eslint/parser@8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)))(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)) + specifier: ^8.66.0 + version: 8.66.0(@typescript-eslint/parser@8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) '@typescript-eslint/parser': - specifier: ^8.65.0 - version: 8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)) + specifier: ^8.66.0 + version: 8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) '@typescript/native': specifier: npm:typescript@^7.0.2 version: typescript@7.0.2 eslint: specifier: ^10.8.0 - version: 10.8.0(jiti@2.7.0) + version: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) typescript: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' @@ -38,28 +38,49 @@ importers: apps/web: dependencies: - '@remake/core': - specifier: workspace:* - version: link:../../packages/core '@remake/data': specifier: workspace:* version: link:../../packages/data - preact: - specifier: ^10.26.9 - version: 10.29.7 + '@remake/hooks': + specifier: workspace:* + version: link:../../packages/hooks + '@remake/vitex': + specifier: workspace:* + version: link:../../packages/vitex + classnames: + specifier: ^2.5.1 + version: 2.5.1 + jotai: + specifier: ^2.20.2 + version: 2.20.2(@types/react@19.2.18)(react@19.2.8) + react: + specifier: ^19.2.8 + version: 19.2.8 + react-dom: + specifier: ^19.2.8 + version: 19.2.8(react@19.2.8) devDependencies: - '@preact/preset-vite': - specifier: ^2.10.2 - version: 2.10.6(@babel/core@7.29.7)(preact@10.29.7)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) - eslint-config-preact: - specifier: ^2.0.0 - version: 2.0.0(eslint@10.8.0(jiti@2.7.0)) + '@types/react': + specifier: ^19.2.18 + version: 19.2.18 + '@types/react-dom': + specifier: ^19.2.4 + version: 19.2.4(@types/react@19.2.18) + '@vitejs/plugin-react': + specifier: ^6.0.5 + version: 6.0.5(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) + eslint-config-react: + specifier: ^1.1.7 + version: 1.1.7 + jotai-devtools: + specifier: ^0.14.0 + version: 0.14.0(@types/react@19.2.18)(jotai@2.20.2(@types/react@19.2.18)(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(redux@5.0.1) vite: specifier: ^8.1.3 version: 8.1.5(@types/node@26.1.2)(jiti@2.7.0) vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.2)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) + version: 4.1.10(@types/node@26.1.2)(happy-dom@20.11.1)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) packages/condition: {} @@ -80,115 +101,59 @@ importers: packages/data: {} + packages/hooks: + dependencies: + '@remake/core': + specifier: workspace:* + version: link:../core + '@remake/data': + specifier: workspace:* + version: link:../data + '@remake/vitex': + specifier: workspace:* + version: link:../vitex + jotai: + specifier: ^2.20.2 + version: 2.20.2(@types/react@19.2.18)(react@19.2.8) + react: + specifier: ^19.2.8 + version: 19.2.8 + devDependencies: + '@happy-dom/global-registrator': + specifier: ^20.11.1 + version: 20.11.1 + '@testing-library/jest-dom': + specifier: ^7.0.0 + version: 7.0.0(@testing-library/dom@10.4.1) + '@testing-library/react': + specifier: ^16.3.2 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@types/react': + specifier: ^19.2.18 + version: 19.2.18 + eslint-config-react: + specifier: ^1.1.7 + version: 1.1.7 + packages/vitex: {} thirdparty/bili-toy: {} packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.7': - resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.7': - resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} - engines: {node: '>=6.9.0'} - - '@babel/eslint-parser@7.29.7': - resolution: {integrity: sha512-zxt+UJTOMKvUt3yOg+D58MLuz334pHp93qifMFcjIIO+9hN6t+ufw2gi7vDPMpxvfnHRR+3VVXvIjineCcgyXw==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - - '@babel/generator@7.29.7': - resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.29.7': - resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.29.7': - resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.29.7': - resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.29.7': - resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.29.7': - resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.29.7': - resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.29.7': - resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.29.7': - resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.29.7': - resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.7': - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.29.7': - resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.29.7': - resolution: {integrity: sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.29.7': - resolution: {integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.29.7': - resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.7': - resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} '@emnapi/core@1.11.1': @@ -222,10 +187,6 @@ packages: resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/js@9.39.5': - resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@3.0.5': resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -234,6 +195,31 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + + '@happy-dom/global-registrator@20.11.1': + resolution: {integrity: sha512-1C0wwHiyMlEdsbrJqff5ORE2PwaXBOam5rMqkZVOReAezd5nt6Tl/WGg28UAo75Ziuwchs0KaF8lvnn2oAtvJA==} + engines: {node: '>=20.0.0'} + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -254,27 +240,28 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@mantine/code-highlight@7.17.4': + resolution: {integrity: sha512-Ewi4X/4a5Lbty7MmOg5OTOv7QexxuVA5dwUZ79zWEvqB3e/AHzGK//5Nb92x78FvmuEZ9M0rK5eRtWTT/+4zeA==} + peerDependencies: + '@mantine/core': 7.17.4 + '@mantine/hooks': 7.17.4 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x - '@mdn/browser-compat-data@5.7.6': - resolution: {integrity: sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==} + '@mantine/core@7.17.4': + resolution: {integrity: sha512-Ea4M/98jxgIWCuxCdM0YIotVYjfLTGQsfIA6zDg0LsClgjo/ZLnnh4zbi+bLNgM+GGjP4ju7gv4MZvaTKuLO8g==} + peerDependencies: + '@mantine/hooks': 7.17.4 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x - '@mdn/browser-compat-data@6.1.5': - resolution: {integrity: sha512-PzdZZzRhcXvKB0begee28n5lvwAcinGKYuLZOVxHAZm+n7y01ddEGfdS1ZXRuVcV+ndG6mSEAE8vgudom5UjYg==} + '@mantine/hooks@7.17.4': + resolution: {integrity: sha512-PBcJxDAfGm8k1/JJmaDcxzRVQ3JSE1iXGktbgGz+qEOJmCxwbbAYe+CtGFFgi1xX2bPZ+7dtRr/+XFhnKtt/aw==} + peerDependencies: + react: ^18.x || ^19.x '@napi-rs/wasm-runtime@1.2.0': resolution: {integrity: sha512-kDoONqMa+VnZ4vvvu/ZUurpJ4gkZU57e7g69qpNgWhYcZFPUHZM2CEMKm+cG6ufDVALbjMvfmMjFVqaK7uEMnA==} @@ -283,34 +270,13 @@ packages: '@emnapi/core': ^2.0.0-alpha.3 '@emnapi/runtime': ^2.0.0-alpha.3 - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@preact/preset-vite@2.10.6': - resolution: {integrity: sha512-ZZ5RIT2ZVXg8UxRA8VZpoT8CdpDG7RFIqOT4bELqNBp85+HKvQBbgmh3gsoW1UOQXx26TLe+ZRNKI7q281Kckw==} + '@redux-devtools/extension@3.3.0': + resolution: {integrity: sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==} peerDependencies: - '@babel/core': 7.x - vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x - - '@prefresh/babel-plugin@0.5.3': - resolution: {integrity: sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==} - - '@prefresh/core@1.5.10': - resolution: {integrity: sha512-7yPTFbG56sutaFu8krp3B4a200KOFUvrtlllKWRuLjsYXo9UUucHOZRcer+gtgMkFTpv6ob8TGcTwA32bSwa1w==} - peerDependencies: - preact: ^10.0.0 || ^11.0.0-0 - - '@prefresh/utils@1.2.1': - resolution: {integrity: sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==} - - '@prefresh/vite@2.4.12': - resolution: {integrity: sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==} - peerDependencies: - preact: ^10.4.0 || ^11.0.0-0 - vite: '>=2.0.0' + redux: ^3.1.0 || ^4.0.0 || ^5.0.0 '@rolldown/binding-android-arm64@1.1.5': resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} @@ -410,25 +376,43 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/pluginutils@4.2.1': - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - - '@rollup/pluginutils@5.4.0': - resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@7.0.0': + resolution: {integrity: sha512-HKAH9C6mBo5yBG6yRO5i43L2iisencAo5z+o5P/saHUoY+miC5ivXRxHBJcFyB5ypPNxHJdK3BoF/3O4DIptMg==} + engines: {node: '>=22', npm: '>=6', yarn: '>=1'} + peerDependencies: + '@testing-library/dom': '>=10 <11' + + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/base16@1.0.5': + resolution: {integrity: sha512-OzOWrTluG9cwqidEzC/Q6FAmIPcnZfm8BFRlIx0+UIUqnuAmi5OS88O0RpT3Yz6qdmqObvUhasrbNsCofE4W9A==} + '@types/bun@1.3.14': resolution: {integrity: sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw==} @@ -447,66 +431,83 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/lodash@4.17.25': + resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==} + '@types/node@26.1.2': resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} - '@typescript-eslint/eslint-plugin@8.65.0': - resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==} + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@typescript-eslint/eslint-plugin@8.66.0': + resolution: {integrity: sha512-p088eaGrzYz1s+7cov0aMOCkNGTJlVxF4jgubf28c8L0Cv9Rloj8YBHnv4hXLq6IIEE1AsjNWavO+k+8kP2Y0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.65.0 + '@typescript-eslint/parser': ^8.66.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.65.0': - resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==} + '@typescript-eslint/parser@8.66.0': + resolution: {integrity: sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.65.0': - resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} + '@typescript-eslint/project-service@8.66.0': + resolution: {integrity: sha512-7MthGPTt4BP69lSryqpqq8HQqxuzynssckL/jyDyk3+TNMQ3y2jFWkptCrktWvBrP+EH787Nl5N5Qpw7WZg+5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.65.0': - resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==} + '@typescript-eslint/scope-manager@8.66.0': + resolution: {integrity: sha512-8TGcH25j9zqJ/IULB/ppyhRvxA8QYfFEZ7nfbg6/BN9spDgb8fPWQXlE5l8TWBL50EtUx007uZ1o9VOwrq2/9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.65.0': - resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==} + '@typescript-eslint/tsconfig-utils@8.66.0': + resolution: {integrity: sha512-9D5gLYZG4rOjcoag8MQ/fWI8WqA9wcPDyOGyWtWFhvM1lHRbliqUSPIY5J3zqCU1tvSwzXxnnjhQhz5Ne7mJ4g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.65.0': - resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==} + '@typescript-eslint/type-utils@8.66.0': + resolution: {integrity: sha512-LG2dWfjZQQp0ADtAu/EWJVayefGL2UEZ3CDeI44D9v3rXB/WYUqE/jpO28KrEKul5AySrmI+Zh1v6v+xW2U9+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.65.0': - resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} + '@typescript-eslint/types@8.66.0': + resolution: {integrity: sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.65.0': - resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==} + '@typescript-eslint/typescript-estree@8.66.0': + resolution: {integrity: sha512-8/x4INiiQb10jGgXYD7116/zQ+OL84ZIFn0za68wwFHCanT/VLbBEroWht8RV8fn0/ZCAoazHLQgwUC0UQcDfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.65.0': - resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==} + '@typescript-eslint/utils@8.66.0': + resolution: {integrity: sha512-jasearZPolBw5NJNYGMwxzHMF83niVWmMU1VdHzG1CyfI2VS7f7nZltnKtHcg20hW+7Uo5GfK4MeDPoU3qI8EA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.65.0': - resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==} + '@typescript-eslint/visitor-keys@8.66.0': + resolution: {integrity: sha512-dkKR8q+lKciskj1Y3vthHktl+3cMLWGyVUP23bRiPZ5O9BRT++4EqDDV+TVeIKBL1VXVEqrJlz8MYbcnvJcAlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/typescript-aix-ppc64@7.0.2': @@ -633,6 +634,19 @@ packages: resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} hasBin: true + '@vitejs/plugin-react@6.0.5': + resolution: {integrity: sha512-BOVzne/NL162sMdResB25mUv+vWMF5NoAjNf09TeGlE7ZpszZWSD3winycicLJw72yeVsoCn/2kOhEuCvEShMA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + '@vitest/expect@4.1.10': resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} @@ -675,105 +689,80 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-metadata-inferer@0.8.1: - resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-plugin-transform-hook-names@1.0.2: - resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} - peerDependencies: - '@babel/core': ^7.12.10 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.11.6: - resolution: {integrity: sha512-69D/imtToCsIcAl8WBS2YaRwA4jO/j0HhU+hELqMEu9f54MoUtI6+XH5mrKU8rEFNEk/Ui1I2MK4/JkWacclGw==} - engines: {node: '>=6.0.0'} - hasBin: true - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - brace-expansion@1.1.16: - resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} + base16@1.0.0: + resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} brace-expansion@5.0.9: resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} engines: {node: 20 || >=22} - browserslist@4.28.7: - resolution: {integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} bun-types@1.3.14: resolution: {integrity: sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==} - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - caniuse-lite@1.0.30001806: - resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -782,24 +771,11 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -813,128 +789,44 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + diff-match-patch@1.0.5: + resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - electron-to-chromium@1.5.398: - resolution: {integrity: sha512-AsvhAxopJGh6museTDMIjn6JpDYOfgu4RLlygomt87MUwBUqTfd/1EiPtx10/LZE8xpTvkP2E9Gafq7lkLtodQ==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} - es-abstract-get@1.0.0: - resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} - engines: {node: '>= 0.4'} - - es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.4.0: - resolution: {integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==} - engines: {node: '>= 0.4'} - es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} - es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.4: - resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} - engines: {node: '>= 0.4'} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-preact@2.0.0: - resolution: {integrity: sha512-TFj70lEE7y3R9DQAFJ/clRfVmyaXdwE3q56gA9zm+iTmlpYjtZKtV1jv/jtgdF2LqgvJjlGlGE1rHVwE9yNdkg==} - peerDependencies: - eslint: ^8.57.1 || ^9.0.0 - - eslint-plugin-compat@6.2.1: - resolution: {integrity: sha512-gLKqUH+lQcCL+HzsROUjBDvakc5Zaga51Y4ZAkPCXc41pzKBfyluqTr2j8zOx8QQQb7zyglu1LVoL5aSNWf2SQ==} - engines: {node: '>=18.x'} - peerDependencies: - eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-config-react@1.1.7: + resolution: {integrity: sha512-P4Z6u68wf0BvIvZNu+U8uQsk3DcZ1CcCI1XpUkJlG6vOa+iVcSQLgE01f2DB2kXlKRcT8/3dsH+wveLgvEgbkQ==} eslint-scope@9.1.2: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -965,17 +857,10 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1020,91 +905,30 @@ packages: flatted@3.4.4: resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.2.0: - resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} + happy-dom@20.11.1: + resolution: {integrity: sha512-XSt8tMzbW9ymE7687xztkO1ckR7qJNQ3LywY9vlYGhGi3zXrGBHuUo2Cl1ztZaICW+1eAGdkLbj6iwVqDT33kg==} + engines: {node: '>=20.0.0'} - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} - engines: {node: '>=18'} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} @@ -1117,136 +941,66 @@ packages: immer@11.1.15: resolution: {integrity: sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==} + immutable@4.3.9: + resolution: {integrity: sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-document.all@1.0.0: - resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} - engines: {node: '>= 0.4'} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true + jotai-devtools@0.14.0: + resolution: {integrity: sha512-vtUE3hlcZJeBpaziPMu07jB0kWu5MWUsGAsYBUUFBbTcE8Tzumb2+ZV6lPrIgEAJmVg5ZD1vf73URDzdgoKZaw==} + engines: {node: '>=14.0.0'} + peerDependencies: + jotai: '>=2.20.0' + react: '>=17.0.0' + + jotai@2.20.2: + resolution: {integrity: sha512-aHB4CNb9qRcyf0mwSB6EO5bCGAjx8cTwFgOFCE2leOnTzqACbnSWG8XoWB3LxCT1Qoj03I1OWAHszDmN4uHb/w==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@babel/core': '>=7.0.0' + '@babel/template': '>=7.0.0' + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@babel/template': + optional: true + '@types/react': + optional: true + react: + optional: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1256,21 +1010,14 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + jsondiffpatch@0.5.0: + resolution: {integrity: sha512-Quz3MvAwHxVYNXsOByL7xI5EB2WYOeFswqaHIA3qOK3isRWTxiplBEocmmru6XmxDB2L7jDNYtYA4FyimoAFEw==} + engines: {node: '>=8.17.0'} hasBin: true - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1353,30 +1100,24 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + lodash.curry@4.1.1: + resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} minimatch@10.2.6: resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1388,48 +1129,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-exports-info@1.6.2: - resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} - engines: {node: '>= 0.4'} - - node-html-parser@6.1.13: - resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - - node-releases@2.0.51: - resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} - engines: {node: '>=18'} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - obug@2.1.4: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} @@ -1438,10 +1137,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - own-keys@1.0.2: - resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} - engines: {node: '>= 0.4'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1458,104 +1153,126 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - picomatch@4.0.5: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - postcss@8.5.24: resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==} engines: {node: ^10 || ^12 || >=14} - preact@10.29.7: - resolution: {integrity: sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==} - peerDependencies: - preact-render-to-string: '>=5' - peerDependenciesMeta: - preact-render-to-string: - optional: true - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-base16-styling@0.9.1: + resolution: {integrity: sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw==} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} + peerDependencies: + react: ^19.2.8 - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + react-error-boundary@5.0.0: + resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==} + peerDependencies: + react: '>=16.13.1' - resolve@2.0.0-next.7: - resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} - engines: {node: '>= 0.4'} - hasBin: true + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-json-tree@0.18.0: + resolution: {integrity: sha512-Qe6HKSXrr++n9Y31nkRJ3XvQMATISpqigH1vEKhLwB56+nk5thTP0ITThpjxY6ZG/ubpVq/aEHIcyLP/OPHxeA==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-number-format@5.4.5: + resolution: {integrity: sha512-y8O2yHHj3w0aE9XO8d2BCcUOOdQTRSVq+WIuMlLVucAm5XNjJAy+BoOJiuQMldVYVOKTMyvVNfnbl2Oqp+YxGw==} + peerDependencies: + react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-resizable-panels@2.1.7: + resolution: {integrity: sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==} + peerDependencies: + react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-textarea-autosize@8.5.9: + resolution: {integrity: sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} rolldown@1.1.5: resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1564,72 +1281,32 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.1: - resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} - engines: {node: '>= 0.4'} - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - simple-code-frame@1.3.0: - resolution: {integrity: sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - stack-trace@1.0.0: - resolution: {integrity: sha512-H6D7134xi6qONvh7ZHKgviXf+rd3vhGBSvebPZCaUkd8zvQ+7PtDw6CljPTe4cXWNf2IKZGNqw6VJXSb9IgBpA==} - engines: {node: '>=20.0.0'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.11: - resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.10: - resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1659,21 +1336,9 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} @@ -1685,26 +1350,58 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - vite-prerender-plugin@0.5.13: - resolution: {integrity: sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} peerDependencies: - vite: 5.x || 6.x || 7.x || 8.x + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-composed-ref@1.4.0: + resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-isomorphic-layout-effect@1.2.1: + resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-latest@1.3.0: + resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true vite@8.1.5: resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} @@ -1790,21 +1487,9 @@ packages: jsdom: optional: true - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} - engines: {node: '>= 0.4'} + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -1820,159 +1505,35 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + ws@8.21.2: + resolution: {integrity: sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zimmerframe@1.1.4: - resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} - snapshots: + '@adobe/css-tools@4.5.0': {} + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.7': {} - - '@babel/core@7.29.7': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.29.7(@babel/core@7.29.7)(eslint@10.8.0(jiti@2.7.0))': - dependencies: - '@babel/core': 7.29.7 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 10.8.0(jiti@2.7.0) - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.29.7': - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.29.7': - dependencies: - '@babel/types': 7.29.7 - - '@babel/helper-compilation-targets@7.29.7': - dependencies: - '@babel/compat-data': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.7 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.29.7': {} - - '@babel/helper-module-imports@7.29.7': - dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.29.7': {} - - '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.29.7': {} - - '@babel/helpers@7.29.7': - dependencies: - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 - - '@babel/parser@7.29.7': - dependencies: - '@babel/types': 7.29.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/template@7.29.7': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - - '@babel/traverse@7.29.7': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.29.7': - dependencies: - '@babel/helper-string-parser': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 + '@babel/runtime@7.29.7': {} '@emnapi/core@1.11.1': dependencies: @@ -1990,17 +1551,17 @@ snapshots: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.8.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))': dependencies: - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@7.2.0)': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.6 transitivePeerDependencies: - supports-color @@ -2013,8 +1574,6 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@9.39.5': {} - '@eslint/object-schema@3.0.5': {} '@eslint/plugin-kit@0.7.2': @@ -2022,6 +1581,39 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/react-dom@2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@floating-ui/react@0.26.28(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + tabbable: 6.5.0 + + '@floating-ui/utils@0.2.12': {} + + '@happy-dom/global-registrator@20.11.1': + dependencies: + '@types/node': 26.1.2 + happy-dom: 20.11.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -2038,28 +1630,34 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.31': + '@mantine/code-highlight@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.2.8))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@mantine/hooks@7.17.4(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.2.8))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@mantine/hooks': 7.17.4(react@19.2.8) + clsx: 2.1.1 + highlight.js: 11.11.1 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - '@mdn/browser-compat-data@5.7.6': {} + '@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.2.8))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/react': 0.26.28(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@mantine/hooks': 7.17.4(react@19.2.8) + clsx: 2.1.1 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-number-format: 5.4.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react-remove-scroll: 2.7.2(@types/react@19.2.18)(react@19.2.8) + react-textarea-autosize: 8.5.9(@types/react@19.2.18)(react@19.2.8) + type-fest: 4.41.0 + transitivePeerDependencies: + - '@types/react' - '@mdn/browser-compat-data@6.1.5': {} + '@mantine/hooks@7.17.4(react@19.2.8)': + dependencies: + react: 19.2.8 '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: @@ -2068,50 +1666,13 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - '@oxc-project/types@0.139.0': {} - '@preact/preset-vite@2.10.6(@babel/core@7.29.7)(preact@10.29.7)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0))': + '@redux-devtools/extension@3.3.0(redux@5.0.1)': dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7) - '@prefresh/vite': 2.4.12(preact@10.29.7)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) - '@rollup/pluginutils': 5.4.0 - babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.7) - debug: 4.4.3 - magic-string: 0.30.21 - picocolors: 1.1.1 - vite: 8.1.5(@types/node@26.1.2)(jiti@2.7.0) - vite-prerender-plugin: 0.5.13(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) - zimmerframe: 1.1.4 - transitivePeerDependencies: - - preact - - rollup - - supports-color - - '@prefresh/babel-plugin@0.5.3': {} - - '@prefresh/core@1.5.10(preact@10.29.7)': - dependencies: - preact: 10.29.7 - - '@prefresh/utils@1.2.1': {} - - '@prefresh/vite@2.4.12(preact@10.29.7)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0))': - dependencies: - '@babel/core': 7.29.7 - '@prefresh/babel-plugin': 0.5.3 - '@prefresh/core': 1.5.10(preact@10.29.7) - '@prefresh/utils': 1.2.1 - '@rollup/pluginutils': 4.2.1 - preact: 10.29.7 - vite: 8.1.5(@types/node@26.1.2)(jiti@2.7.0) - transitivePeerDependencies: - - supports-color + '@babel/runtime': 7.29.7 + immutable: 4.3.9 + redux: 5.0.1 '@rolldown/binding-android-arm64@1.1.5': optional: true @@ -2164,24 +1725,48 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@4.2.1': - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.2 - - '@rollup/pluginutils@5.4.0': - dependencies: - '@types/estree': 1.0.9 - estree-walker: 2.0.2 - picomatch: 4.0.5 - '@standard-schema/spec@1.1.0': {} + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.29.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@7.0.0(@testing-library/dom@10.4.1)': + dependencies: + '@adobe/css-tools': 4.5.0 + '@testing-library/dom': 10.4.1 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@testing-library/dom': 10.4.1 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true + '@types/aria-query@5.0.4': {} + + '@types/base16@1.0.5': {} + '@types/bun@1.3.14': dependencies: bun-types: 1.3.14 @@ -2199,19 +1784,35 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/lodash@4.17.25': {} + '@types/node@26.1.2': dependencies: undici-types: 8.3.0 - '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)))(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0))': + '@types/react-dom@19.2.4(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@types/react@19.2.18': + dependencies: + csstype: 3.2.3 + + '@types/whatwg-mimetype@3.0.2': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 26.1.2 + + '@typescript-eslint/eslint-plugin@8.66.0(@typescript-eslint/parser@8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/type-utils': 8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)) - '@typescript-eslint/utils': 8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)) - '@typescript-eslint/visitor-keys': 8.65.0 - eslint: 10.8.0(jiti@2.7.0) + '@typescript-eslint/parser': 8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/type-utils': 8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + '@typescript-eslint/utils': 8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + '@typescript-eslint/visitor-keys': 8.66.0 + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) @@ -2219,57 +1820,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0))': + '@typescript-eslint/parser@8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/visitor-keys': 8.65.0 - debug: 4.4.3 - eslint: 10.8.0(jiti@2.7.0) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + '@typescript-eslint/visitor-keys': 8.66.0 + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.65.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/project-service@8.66.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.65.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/types': 8.65.0 - debug: 4.4.3 + '@typescript-eslint/tsconfig-utils': 8.66.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.66.0 + debug: 4.4.3(supports-color@7.2.0) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.65.0': + '@typescript-eslint/scope-manager@8.66.0': dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/visitor-keys': 8.66.0 - '@typescript-eslint/tsconfig-utils@8.65.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.66.0(@typescript/typescript6@6.0.2)': dependencies: typescript: '@typescript/typescript6@6.0.2' - '@typescript-eslint/type-utils@8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0))': + '@typescript-eslint/type-utils@8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/utils': 8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)) - debug: 4.4.3 - eslint: 10.8.0(jiti@2.7.0) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + '@typescript-eslint/utils': 8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.65.0': {} + '@typescript-eslint/types@8.66.0': {} - '@typescript-eslint/typescript-estree@8.65.0(@typescript/typescript6@6.0.2)': + '@typescript-eslint/typescript-estree@8.66.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0)': dependencies: - '@typescript-eslint/project-service': 8.65.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.65.0(@typescript/typescript6@6.0.2) - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/visitor-keys': 8.65.0 - debug: 4.4.3 + '@typescript-eslint/project-service': 8.66.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + '@typescript-eslint/tsconfig-utils': 8.66.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/visitor-keys': 8.66.0 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.6 semver: 7.8.5 tinyglobby: 0.2.17 @@ -2278,20 +1879,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.65.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0))': + '@typescript-eslint/utils@8.66.0(@typescript/typescript6@6.0.2)(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(@typescript/typescript6@6.0.2) - eslint: 10.8.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0)) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.65.0': + '@typescript-eslint/visitor-keys@8.66.0': dependencies: - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/types': 8.66.0 eslint-visitor-keys: 5.0.1 '@typescript/typescript-aix-ppc64@7.0.2': @@ -2358,6 +1959,11 @@ snapshots: dependencies: '@typescript/old': typescript@6.0.3 + '@vitejs/plugin-react@6.0.5(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.1.5(@types/node@26.1.2)(jiti@2.7.0) + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 @@ -2412,130 +2018,70 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 + ansi-regex@5.0.1: {} - array-includes@3.1.9: + ansi-styles@4.3.0: dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 + color-convert: 2.0.1 - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-shim-unscopables: 1.1.0 + ansi-styles@5.2.0: {} - array.prototype.flat@1.3.3: + aria-query@5.3.0: dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-shim-unscopables: 1.1.0 + dequal: 2.0.3 - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 + aria-query@5.3.2: {} assertion-error@2.0.1: {} - ast-metadata-inferer@0.8.1: - dependencies: - '@mdn/browser-compat-data': 5.7.6 - - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - babel-plugin-transform-hook-names@1.0.2(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - - balanced-match@1.0.2: {} - balanced-match@4.0.4: {} - baseline-browser-mapping@2.11.6: {} - - boolbase@1.0.0: {} - - brace-expansion@1.1.16: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 + base16@1.0.0: {} brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 - browserslist@4.28.7: + buffer-image-size@0.6.4: dependencies: - baseline-browser-mapping: 2.11.6 - caniuse-lite: 1.0.30001806 - electron-to-chromium: 1.5.398 - node-releases: 2.0.51 - update-browserslist-db: 1.2.3(browserslist@4.28.7) + '@types/node': 26.1.2 bun-types@1.3.14: dependencies: '@types/node': 26.1.2 - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - caniuse-lite@1.0.30001806: {} - chai@6.2.2: {} - concat-map@0.0.1: {} + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + classnames@2.5.1: {} + + clsx@2.1.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 convert-source-map@2.0.0: {} @@ -2545,259 +2091,37 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 + css.escape@1.5.1: {} - css-what@6.2.2: {} + csstype@3.2.3: {} - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 deep-is@0.1.4: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 + dequal@2.0.3: {} detect-libc@2.1.2: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 + detect-node-es@1.1.0: {} - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 + diff-match-patch@1.0.5: {} - domelementtype@2.3.0: {} + dom-accessibility-api@0.5.16: {} - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 + dom-accessibility-api@0.6.3: {} - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - electron-to-chromium@1.5.398: {} - - entities@4.5.0: {} - - es-abstract-get@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - is-callable: 1.2.7 - object-inspect: 1.13.4 - - es-abstract@1.24.2: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.4 - function.prototype.name: 1.2.0 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.2 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.4 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.11 - string.prototype.trimend: 1.0.10 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.8 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.22 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.4.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - math-intrinsics: 1.1.0 + entities@7.0.1: {} es-module-lexer@2.3.1: {} - es-object-atoms@1.1.2: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.4 - - es-to-primitive@1.3.4: - dependencies: - es-abstract-get: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - escalade@3.2.0: {} - escape-string-regexp@4.0.0: {} - eslint-config-preact@2.0.0(eslint@10.8.0(jiti@2.7.0)): - dependencies: - '@babel/core': 7.29.7 - '@babel/eslint-parser': 7.29.7(@babel/core@7.29.7)(eslint@10.8.0(jiti@2.7.0)) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) - '@eslint/js': 9.39.5 - eslint: 10.8.0(jiti@2.7.0) - eslint-plugin-compat: 6.2.1(eslint@10.8.0(jiti@2.7.0)) - eslint-plugin-react: 7.37.5(eslint@10.8.0(jiti@2.7.0)) - eslint-plugin-react-hooks: 5.2.0(eslint@10.8.0(jiti@2.7.0)) - globals: 16.5.0 - transitivePeerDependencies: - - supports-color - - eslint-plugin-compat@6.2.1(eslint@10.8.0(jiti@2.7.0)): - dependencies: - '@mdn/browser-compat-data': 6.1.5 - ast-metadata-inferer: 0.8.1 - browserslist: 4.28.7 - eslint: 10.8.0(jiti@2.7.0) - find-up: 5.0.0 - globals: 15.15.0 - lodash.memoize: 4.1.2 - semver: 7.8.5 - - eslint-plugin-react-hooks@5.2.0(eslint@10.8.0(jiti@2.7.0)): - dependencies: - eslint: 10.8.0(jiti@2.7.0) - - eslint-plugin-react@7.37.5(eslint@10.8.0(jiti@2.7.0)): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.4.0 - eslint: 10.8.0(jiti@2.7.0) - estraverse: 5.3.0 - hasown: 2.0.4 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.7 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + eslint-config-react@1.1.7: {} eslint-scope@9.1.2: dependencies: @@ -2806,17 +2130,15 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-visitor-keys@2.1.0: {} - eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@5.0.1: {} - eslint@10.8.0(jiti@2.7.0): + eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@7.2.0) '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -2826,7 +2148,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -2863,12 +2185,8 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} - estraverse@5.3.0: {} - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -2903,93 +2221,31 @@ snapshots: flatted@3.4.4: {} - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - function.prototype.name@1.2.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - es-define-property: 1.0.1 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - hasown: 2.0.4 - is-callable: 1.2.7 - is-document.all: 1.0.0 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.2 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 + get-nonce@1.0.1: {} glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - globals@15.15.0: {} - - globals@16.5.0: {} - - globalthis@1.0.4: + happy-dom@20.11.1: dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 + '@types/node': 26.1.2 + '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 + entities: 7.0.1 + whatwg-mimetype: 3.0.0 + ws: 8.21.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate - gopd@1.2.0: {} + has-flag@4.0.0: {} - has-bigints@1.1.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.4: - dependencies: - function-bind: 1.1.2 - - he@1.2.0: {} + highlight.js@11.11.1: {} ignore@5.3.2: {} @@ -2997,143 +2253,53 @@ snapshots: immer@11.1.15: {} + immutable@4.3.9: {} + imurmurhash@0.1.4: {} - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.4 - side-channel: 1.1.1 + indent-string@4.0.0: {} - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.2: - dependencies: - hasown: 2.0.4 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-document.all@1.0.0: - dependencies: - call-bound: 1.0.4 + is-arrayish@0.3.4: {} is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.22 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - isexe@2.0.0: {} - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 + javascript-stringify@2.1.0: {} jiti@2.7.0: optional: true - js-tokens@4.0.0: {} + jotai-devtools@0.14.0(@types/react@19.2.18)(jotai@2.20.2(@types/react@19.2.18)(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(redux@5.0.1): + dependencies: + '@mantine/code-highlight': 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.2.8))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@mantine/hooks@7.17.4(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.2.8))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@mantine/hooks': 7.17.4(react@19.2.8) + '@redux-devtools/extension': 3.3.0(redux@5.0.1) + clsx: 2.1.1 + javascript-stringify: 2.1.0 + jotai: 2.20.2(@types/react@19.2.18)(react@19.2.8) + jsondiffpatch: 0.5.0 + react: 19.2.8 + react-base16-styling: 0.9.1 + react-error-boundary: 5.0.0(react@19.2.8) + react-json-tree: 0.18.0(@types/react@19.2.18)(react@19.2.8) + react-resizable-panels: 2.1.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - react-dom + - redux - jsesc@3.1.0: {} + jotai@2.20.2(@types/react@19.2.18)(react@19.2.8): + optionalDependencies: + '@types/react': 19.2.18 + react: 19.2.8 + + js-tokens@4.0.0: {} json-buffer@3.0.1: {} @@ -3141,21 +2307,15 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} - - jsx-ast-utils@3.3.5: + jsondiffpatch@0.5.0: dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 + chalk: 3.0.0 + diff-match-patch: 1.0.5 keyv@4.5.4: dependencies: json-buffer: 3.0.1 - kolorist@1.8.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -3214,90 +2374,26 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.memoize@4.1.2: {} + lodash.curry@4.1.1: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 + lz-string@1.5.0: {} magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - math-intrinsics@1.1.0: {} + min-indent@1.0.1: {} minimatch@10.2.6: dependencies: brace-expansion: 5.0.9 - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.16 - ms@2.1.3: {} nanoid@3.3.16: {} natural-compare@1.4.0: {} - node-exports-info@1.6.2: - dependencies: - array.prototype.flatmap: 1.3.3 - es-errors: 1.3.0 - object.entries: 1.1.9 - semver: 6.3.1 - - node-html-parser@6.1.13: - dependencies: - css-select: 5.2.2 - he: 1.2.0 - - node-releases@2.0.51: {} - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - obug@2.1.4: {} optionator@0.9.4: @@ -3309,13 +2405,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - own-keys@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -3328,66 +2417,112 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: {} - pathe@2.0.3: {} picocolors@1.1.1: {} - picomatch@2.3.2: {} - picomatch@4.0.5: {} - possible-typed-array-names@1.1.0: {} - postcss@8.5.24: dependencies: nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.29.7: {} - prelude-ls@1.2.1: {} - prop-types@15.8.1: + pretty-format@27.5.1: dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 punycode@2.3.1: {} - react-is@16.13.1: {} - - reflect.getprototypeof@1.0.10: + react-base16-styling@0.9.1: dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 + '@babel/runtime': 7.29.7 + '@types/base16': 1.0.5 + '@types/lodash': 4.17.25 + base16: 1.0.0 + color: 3.2.1 + csstype: 3.2.3 + lodash.curry: 4.1.1 - regexp.prototype.flags@1.5.4: + react-dom@19.2.8(react@19.2.8): dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + react: 19.2.8 + scheduler: 0.27.0 - resolve@2.0.0-next.7: + react-error-boundary@5.0.0(react@19.2.8): dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - node-exports-info: 1.6.2 - object-keys: 1.1.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + '@babel/runtime': 7.29.7 + react: 19.2.8 + + react-is@17.0.2: {} + + react-json-tree@0.18.0(@types/react@19.2.18)(react@19.2.8): + dependencies: + '@babel/runtime': 7.29.7 + '@types/lodash': 4.17.25 + '@types/react': 19.2.18 + react: 19.2.8 + react-base16-styling: 0.9.1 + + react-number-format@5.4.5(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react-remove-scroll@2.7.2(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.2.8) + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.2.8) + use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + react-resizable-panels@2.1.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + get-nonce: 1.0.1 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react-textarea-autosize@8.5.9(@types/react@19.2.18)(react@19.2.8): + dependencies: + '@babel/runtime': 7.29.7 + react: 19.2.8 + use-composed-ref: 1.4.0(@types/react@19.2.18)(react@19.2.8) + use-latest: 1.3.0(@types/react@19.2.18)(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + + react@19.2.8: {} + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + redux@5.0.1: {} rolldown@1.1.5: dependencies: @@ -3410,152 +2545,37 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.1.5 '@rolldown/binding-win32-x64-msvc': 1.1.5 - safe-array-concat@1.1.4: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - semver@6.3.1: {} + scheduler@0.27.0: {} semver@7.8.5: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - side-channel-list@1.0.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.1 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} - simple-code-frame@1.3.0: + simple-swizzle@0.2.4: dependencies: - kolorist: 1.8.0 + is-arrayish: 0.3.4 source-map-js@1.2.1: {} - source-map@0.7.6: {} - - stack-trace@1.0.0: {} - stackback@0.0.2: {} std-env@4.2.0: {} - stop-iteration-iterator@1.1.0: + strip-indent@3.0.0: dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 + min-indent: 1.0.1 - string.prototype.matchall@4.0.12: + supports-color@7.2.0: dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.1 + has-flag: 4.0.0 - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.2 - - string.prototype.trim@1.2.11: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - safe-regex-test: 1.1.0 - - string.prototype.trimend@1.0.10: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - supports-preserve-symlinks-flag@1.0.0: {} + tabbable@6.5.0: {} tinybench@2.9.0: {} @@ -3572,45 +2592,13 @@ snapshots: dependencies: typescript: '@typescript/typescript6@6.0.2' - tslib@2.8.1: - optional: true + tslib@2.8.1: {} type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.8: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 + type-fest@4.41.0: {} typescript@6.0.3: {} @@ -3637,34 +2625,45 @@ snapshots: '@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2 - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - undici-types@8.3.0: {} - update-browserslist-db@1.2.3(browserslist@4.28.7): - dependencies: - browserslist: 4.28.7 - escalade: 3.2.0 - picocolors: 1.1.1 - uri-js@4.4.1: dependencies: punycode: 2.3.1 - vite-prerender-plugin@0.5.13(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)): + use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.2.8): dependencies: - kolorist: 1.8.0 - magic-string: 0.30.21 - node-html-parser: 6.1.13 - simple-code-frame: 1.3.0 - source-map: 0.7.6 - stack-trace: 1.0.0 - vite: 8.1.5(@types/node@26.1.2)(jiti@2.7.0) + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-composed-ref@1.4.0(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 + + use-isomorphic-layout-effect@1.2.1(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 + + use-latest@1.3.0(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.18)(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + use-sidecar@1.1.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0): dependencies: @@ -3678,7 +2677,7 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 - vitest@4.1.10(@types/node@26.1.2)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)): + vitest@4.1.10(@types/node@26.1.2)(happy-dom@20.11.1)(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)): dependencies: '@vitest/expect': 4.1.10 '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@26.1.2)(jiti@2.7.0)) @@ -3702,49 +2701,11 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.2 + happy-dom: 20.11.1 transitivePeerDependencies: - msw - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.2.0 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.22 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.22: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 + whatwg-mimetype@3.0.0: {} which@2.0.2: dependencies: @@ -3757,8 +2718,6 @@ snapshots: word-wrap@1.2.5: {} - yallist@3.1.1: {} + ws@8.21.2: {} yocto-queue@0.1.0: {} - - zimmerframe@1.1.4: {} diff --git a/thirdparty/bili-toy/tsconfig.json b/thirdparty/bili-toy/tsconfig.json index a907865..11010a0 100644 --- a/thirdparty/bili-toy/tsconfig.json +++ b/thirdparty/bili-toy/tsconfig.json @@ -1,29 +1,7 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - // Environment setup & latest features "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "types": [], - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": true, - "noUnusedParameters": true, - "noPropertyAccessFromIndexSignature": false, - "noImplicitAny": true }, "include": ["**/*"] } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7810d06 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "skipLibCheck": true, + "types": ["bun"], + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": true, + "noUnusedParameters": true, + "noPropertyAccessFromIndexSignature": false, + "noImplicitAny": true + }, + "exclude": ["**/node_modules", "**/dist", "**/build"] +}