offline-first, p2p synced, atproto enabled, feed reader
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

first pass at some ui in solidjs

+1073 -4753
+323
CLAUDE.md
··· 1 + # CLAUDE.md 2 + 3 + This file provides guidance to Claude Code when working with code in this repository. 4 + 5 + ## Project Overview 6 + 7 + **Feedline** (feedline.at) is a local-first, peer-to-peer RSS reader and podcast client with ATProto integration. Think Google Reader meets BitTorrent - your data lives on your devices, syncs peer-to-peer via the Realm protocol, with optional ATProto for discovery and public sharing. 8 + 9 + **Key Technologies:** TypeScript, Solid.js, Vite, Dexie.js (IndexedDB), better-sqlite3, Express, WebRTC (simple-peer), WebSockets, Zod 10 + 11 + **Current Status:** Early development - porting realm protocol from prototype (skypod-node) and establishing architecture patterns. Realm sync works; feed/podcast features are in progress. 12 + 13 + ## Development Commands 14 + 15 + ### Starting Development 16 + 17 + ```bash 18 + npm run dev 19 + ``` 20 + 21 + Starts all development services concurrently using wireit: 22 + 23 + - Vite dev server (frontend) 24 + - Backend server (WebSocket + API) 25 + - Type-checking in watch mode 26 + 27 + ### Running Tests 28 + 29 + ```bash 30 + npm run test # Run all tests once 31 + npm run start:tests # Run tests in watch mode 32 + ``` 33 + 34 + Tests use Jest with ts-jest. Test files are named `*.spec.ts` or `*.spec.tsx`. 35 + 36 + To run a single test file: 37 + 38 + ```bash 39 + npx jest src/path/to/file.spec.ts 40 + ``` 41 + 42 + ### Linting and Type-Checking 43 + 44 + ```bash 45 + npm run lint # Run ESLint 46 + npm run types # Run TypeScript type-checking 47 + npm run build # Build production frontend 48 + ``` 49 + 50 + ### Production 51 + 52 + ```bash 53 + npm run start:prod # Build and run production server 54 + ``` 55 + 56 + ### Version Control 57 + 58 + This project uses **Jujutsu** (`jj`) for version control, not Git. Common operations: 59 + 60 + ```bash 61 + jj status # Check working copy status 62 + jj diff # View changes 63 + jj commit -m "message" # Create commit 64 + jj log # View history 65 + ``` 66 + 67 + ## Architecture 68 + 69 + ### High-Level Vision 70 + 71 + Feedline is built on three layers: 72 + 73 + 1. **Lib Layer** (`#lib/*`) - Pure utilities (async primitives, crypto, schema helpers) 74 + 2. **Realm Layer** (`#realm/*`) - Generic P2P action sync protocol (frontend-agnostic) 75 + 3. **Feedline Layer** (`#feedline/*`) - RSS/podcast application logic 76 + 77 + The Realm protocol enables devices to sync "actions" (state changes) in a causally-ordered, offline-first manner. Feedline builds podcast/RSS features on top by defining domain-specific actions like `feed:add`, `feed:patch`, `entry:analyzed`. 78 + 79 + ### Module Structure 80 + 81 + The codebase uses path aliases configured in both `package.json` (imports) and `tsconfig.json` (paths): 82 + 83 + - **`#lib/*`** (`src/lib/`) - Reusable utilities that could be extracted to separate packages 84 + - `async/` - Async primitives (semaphore, blocking queue, aborts, sleep) 85 + - `crypto/` - JWT, JWK, cipher utilities 86 + - `schema/` - Zod schema helpers (brands, JSON validation) 87 + - `errors.ts`, `types.ts`, `utils.ts` - General utilities 88 + 89 + - **`#realm/*`** (`src/realm/`) - P2P action sync protocol (frontend-agnostic) 90 + - `logical-clock.ts` - Hybrid Logical Clock (HLC) for causal ordering 91 + - `protocol/` - Message schemas and protocol definitions 92 + - `schema/` - Realm-specific schemas (actions, identities, timestamps) 93 + - `client/` - Client-side realm connection management 94 + - `server/` - Server-side signaling and relay (server acts as peer) 95 + 96 + - **`#feedline/*`** (`src/feedline/`) - Application layer (RSS/podcast domain) 97 + - `client/` - Frontend application 98 + - `server/` - Backend services 99 + - `worker/` - Background job processing (planned) 100 + - `scheduler/` - Feed refresh scheduling (planned) 101 + - `cmd/` - CLI tools 102 + 103 + - **`#spec/*`** (`src/spec/`) - Test helpers and integration test utilities 104 + 105 + **Always use these path aliases** for imports across module boundaries. Never use relative paths like `../../../realm/`. 106 + 107 + ### Data Storage 108 + 109 + **Client (Browser):** 110 + 111 + - **IndexedDB via Dexie.js** 112 + - Realm actions database (managed by `#realm/*`) 113 + - Feedline materialized views (managed by `#feedline/*`, separate DB) 114 + - Private keys storage (IndexedDB provides secure, per-origin isolation) 115 + 116 + **Server (Node.js):** 117 + 118 + - **better-sqlite3** 119 + - Realm databases (one per realm, stores actions) 120 + - Job queue database (planned) 121 + - Note: Would prefer node:sqlite, but Nix doesn't have good support yet 122 + 123 + These are **completely separate** - realm maintains the action log, feedline materializes a queryable schema from those actions. 124 + 125 + ### Realm Protocol (The Complex Part) 126 + 127 + The realm protocol is the most intricate piece of the codebase. It uses a **Hybrid Logical Clock (HLC)** for causal ordering of events across distributed peers. 128 + 129 + **Key Concepts:** 130 + 131 + 1. **Actions** - Immutable state changes (like Redux actions, but distributed) 132 + 2. **HLC Timestamps** - Format: `lc:seconds:counter:identid` - provides total ordering even with clock skew 133 + 3. **PULL for Catch-up** - New clients pull complete history from one peer 134 + 4. **PUSH for Updates** - All clients push their new actions to all connected peers (with deduplication via knowledge vectors) 135 + 136 + **When working on realm code:** 137 + 138 + - Ordering is critical - never break HLC timestamp comparison logic 139 + - Actions are append-only, never mutate 140 + - Server is just another peer, no special privileges 141 + - WebSocket is for signaling; WebRTC data channels do the heavy lifting 142 + 143 + **Important Files:** 144 + 145 + - `src/realm/logical-clock.ts` - HLC implementation 146 + - `src/realm/protocol/` - Message schemas (Zod) 147 + - `src/realm/client/realm.ts` - Client-side connection management 148 + - `src/realm/server/driver-realm.ts` - Server-side realm driver 149 + 150 + **Tests exist and should be reviewed** - the server peer implementation works but needs code review for correctness. 151 + 152 + ### Action-Driven Architecture 153 + 154 + Everything in Feedline flows through actions: 155 + 156 + ```typescript 157 + // Example: User adds a feed 158 + { 159 + type: 'feed:add', 160 + payload: { 161 + url: 'https://example.com/feed.rss', 162 + private: false 163 + }, 164 + clock: '0:1735689234:0:alice123', 165 + actor: 'alice123' 166 + } 167 + ``` 168 + 169 + Actions sync across all devices via realm. Each device materializes its own queryable database from the action log. 170 + 171 + **Server as Peer:** The server doesn't have special APIs - it just creates actions like any other peer (e.g., `feed:patch` with new episodes after refresh). 172 + 173 + ## Design Decisions & Open Questions 174 + 175 + ### Decided 176 + 177 + - **Realm protocol is frontend-agnostic** - No Solid/React dependencies in `#realm/*` 178 + - **Action-driven architecture** - All state changes flow through realm actions 179 + - **Server as peer** - No special server APIs, server creates actions like any client 180 + - **Offline-first** - Clients work independently, sync when connected 181 + - **IndexedDB for client** - Needed for secure private key storage 182 + - **Path aliases** - Always use `#lib/*`, `#realm/*`, `#feedline/*` 183 + - **Wireit for task orchestration** - Handles build dependencies and watch mode 184 + - **Jujutsu for VCS** - Using `jj` instead of `git` 185 + - **Solid.js for UI** - Migrated from Preact to Solid for better performance and modern reactive primitives 186 + 187 + ### Still Figuring Out 188 + 189 + - **Job queue architecture** - Designed (Piscina workers, shared job DB) but not implemented yet 190 + - **WebTorrent integration** - Planned for P2P audio distribution, not started 191 + - **ATProto integration** - Will be used for discovery and optional public sharing, design in progress 192 + - **TypeDoc** - Experimenting with API docs generation, unclear if worth it 193 + - **Server/client split in `#feedline/*`** - May organize feedline layer into server/client subdirs, not decided 194 + 195 + ## Code Style & Patterns 196 + 197 + - **Strict TypeScript** - `strict: true`, `noImplicitAny: true` 198 + - **Zod for validation** - All schemas defined with Zod, used for both types and runtime validation 199 + - **Branded types** - Use Zod brands for semantic types (IdentID, RealmID, etc.) 200 + - **ESLint + Prettier** - Auto-formatting and linting enforced 201 + - **Solid Signals** - Using Solid's built-in reactive primitives (createSignal, createEffect, etc.) 202 + 203 + ## Working with Claude 204 + 205 + **What Claude should know:** 206 + 207 + Mainly: **You're a Great Rubber Duck** - Claude should ask questions, suggest patterns, and help think through design decisions; rarely should we jump to implementation of anything, and Claude should assume the user would prefer to do implementation themselves. 208 + 209 + 1. **This is early-stage** - Architecture is being established, patterns are still evolving 210 + 2. **Realm protocol is sacred** - Don't break HLC ordering, action immutability, or sync logic 211 + 3. **Layer boundaries matter** - Keep `#lib/*` pure, `#realm/*` frontend-agnostic, `#feedline/*` application-specific 212 + 4. **Tests are concrete** - Written after structure is stable to "lock in" decisions 213 + 214 + **When suggesting code:** 215 + 216 + - Respect the layer boundaries 217 + - Use path aliases 218 + - Follow the action-driven pattern 219 + - Ask if you're unsure whether something belongs in lib/realm/feedline 220 + - Point out potential issues with distributed sync or causal ordering 221 + 222 + **Current focus areas:** 223 + 224 + - Porting realm protocol from prototype (needs review) 225 + - Establishing feedline action schemas 226 + - Designing job queue for background work (not implemented yet) 227 + - Building out Solid.js UI components 228 + 229 + ## Testing Strategy 230 + 231 + Tests are written **after** the structure is stable - think of them as "pouring concrete" to lock in architectural decisions. 232 + 233 + **Test organization:** 234 + 235 + - Unit tests alongside source: `foo.ts` → `foo.spec.ts` 236 + - Integration tests in `#spec/*` 237 + - Use `@jest/globals` for Jest functions 238 + - Path aliases work in tests (configured in `jest.config.js`) 239 + 240 + **What needs testing:** 241 + 242 + - Realm protocol correctness (HLC ordering, sync protocol) 243 + - Action materialization (replaying action logs correctly) 244 + - Server peer behavior (relay, storage, deduplication) 245 + 246 + ## Roadmap 247 + 248 + Based on `tmp-analizer/FEEDLINE_ARCHITECTURE.md`, the planned implementation phases are: 249 + 250 + ### Phase 1: Foundation (In Progress) 251 + 252 + - ✅ Basic realm protocol ported (needs review) 253 + - 🔄 Realm client/server architecture 254 + - ⏳ Action sync verification 255 + - ⏳ Feed schemas 256 + 257 + ### Phase 2: Feed Tracking (Not Started) 258 + 259 + - `feed:track` / `feed:untrack` actions 260 + - Server-side scheduler 261 + - RSS fetcher 262 + - `feed:patch` action creator 263 + 264 + ### Phase 3: Analysis Integration (Planned) 265 + 266 + - Analysis worker service (Piscina-based job queue) 267 + - `entry:analyzed` action 268 + - Static file server 269 + - Audio processing 270 + 271 + ### Phase 4: WebTorrent P2P (Planned) 272 + 273 + - RealmTorrentManager 274 + - Separate WebRTC connections for torrents 275 + - Stream source switching 276 + 277 + ### Phase 5: ATProto Integration (Planned) 278 + 279 + - Publisher service (opt-in) 280 + - Magnet discovery 281 + - Jetstream subscriber for aggregation 282 + 283 + ### Phase 6: Self-Hosted Stack (Planned) 284 + 285 + - Container images 286 + - macOS menu bar app 287 + - Linux Flatpak 288 + 289 + ## Important Files 290 + 291 + **Realm Protocol:** 292 + 293 + - `src/realm/logical-clock.ts` - HLC implementation 294 + - `src/realm/schema/timestamp.ts` - Timestamp schemas 295 + - `src/realm/client/realm.ts` - Client realm connection 296 + - `src/realm/server/driver-realm.ts` - Server realm driver 297 + 298 + **Utilities:** 299 + 300 + - `src/lib/async/` - Async primitives (critical for coordination) 301 + - `src/lib/crypto/` - JWT/JWK for authentication 302 + - `src/lib/schema/` - Zod helpers 303 + 304 + **Tests:** 305 + 306 + - `src/realm/logical-clock.spec.ts` - HLC tests (important!) 307 + - `src/realm/server/` - Server peer tests (need review) 308 + 309 + ## ATProto Integration Notes 310 + 311 + Feedline will use ATProto (feedline.at domain) for: 312 + 313 + - **Discovery** - Find popular feeds, episode magnets 314 + - **Sharing** - Optionally publish your subscriptions/magnets 315 + - **Privacy-first** - Everything private by default, ATProto is opt-in 316 + 317 + ATProto is **not** used for: 318 + 319 + - Primary data storage (all local-first) 320 + - Sync protocol (realm handles that) 321 + - Authentication between your devices (realm uses JWTs) 322 + 323 + Think of ATProto as a public discovery layer on top of a fully private P2P foundation.
+62
README.md
··· 1 + # Feedline 2 + 3 + easily self-hosted, local-first RSS reader and podcast client with p2p sync, and optional ATProto based social discovery. 4 + 5 + - subscriptions, read/play state and other actions sync between devices p2p 6 + - media can be downloaded with analysis for skipping silence, and shared via public or private torrent swarm 7 + - optional atproto integration allows easy on-boarding, and sharing subscriptions/favorites/etc through an open social network 8 + 9 + ### development 10 + 11 + - node.js 24+ 12 + - npm or pnpm 13 + 14 + ```bash 15 + npm install 16 + npm run dev 17 + # - frontend at `http://localhost:4000` (or configured port) 18 + # - backend server at `http://localhost:4001`, `ws://localhost:4001/stream` 19 + 20 + npm test 21 + npm run types 22 + npm run lint -- --fix 23 + 24 + # production (heh) 25 + npm run build 26 + npm run start:prod 27 + ``` 28 + 29 + ## status: **early** 30 + 31 + the core realm protocol is working, but feed/podcast features are still being built. 32 + don't use this yet. 33 + 34 + ## self-hosting 35 + 36 + feedline is designed to be self-hosted: 37 + 38 + 1. **hosted** - run the web app from https://app.feedline.at, and we use the following: 39 + - CORS proxy 40 + - reader-mode proxy 41 + - audio file downloads for analysis (when not marked private) 42 + 2. **home server** - run a local server for your devices (via Docker/Podman) 43 + - should support `mdns`, client connects, gets PWA, server does syncing 44 + - "discovery" and other social features would still come from upstream if that's desired 45 + 46 + ## ATProto integration 47 + 48 + feedline integrates with ATProto for: 49 + 50 + - easy cross-device **bootstrapping** 51 + - if both devices are signed in through ATProto OAuth, we don't have to worry about invitation 52 + 53 + - **social & discovery** 54 + - sharing subscriptions means we can track common ones, trending, all that good stuff 55 + - sharing "shares" or "favorites" or whatever gives nice google-reader vibes 56 + - share to bluesky / some sort of native commenting or whatever would be easy/useful 57 + 58 + ATProto should **never be required** - offline first with a self-hosted server for fetching should always work. 59 + 60 + # license 61 + 62 + AGPL
+3 -53
eslint.config.js
··· 3 3 import json from '@eslint/json' 4 4 import restrictedGlobals from 'confusing-browser-globals' 5 5 import prettier from 'eslint-plugin-prettier/recommended' 6 - import react from 'eslint-plugin-react' 7 - import reactHooks from 'eslint-plugin-react-hooks' 6 + import solid from 'eslint-plugin-solid/configs/typescript' 8 7 import tsdoc from 'eslint-plugin-tsdoc' 9 8 import {defineConfig} from 'eslint/config' 10 9 import globals from 'globals' ··· 83 82 }, 84 83 85 84 { 86 - // mostly cribbed from preact's config, but that's not setup to handle eslint9 87 - // https://github.com/preactjs/eslint-config-preact/blob/master/index.js 88 85 name: 'client files', 89 - files: ['src/client/**/*.@(js|ts)', 'src/**/*.@(jsx|tsx)'], 86 + files: ['src/**/client/**/*.@(js|ts)', 'src/**/*.@(jsx|tsx)'], 87 + ...solid, 90 88 languageOptions: { 91 89 globals: { 92 90 ...globals.es2024, 93 91 ...globals.browser, 94 92 }, 95 - }, 96 - plugins: { 97 - react, 98 - reactHooks, 99 - }, 100 - settings: { 101 - react: { 102 - pragma: 'h', 103 - version: '16.0', 104 - }, 105 - }, 106 - rules: { 107 - // preact / jsx rules 108 - 'react/no-deprecated': 2, 109 - 'react/react-in-jsx-scope': 0, // handled this automatically 110 - 'react/display-name': [1, {ignoreTranspilerName: false}], 111 - 'react/jsx-no-bind': [ 112 - 1, 113 - { 114 - ignoreRefs: true, 115 - allowFunctions: true, 116 - allowArrowFunctions: true, 117 - }, 118 - ], 119 - 'react/jsx-no-comment-textnodes': 2, 120 - 'react/jsx-no-duplicate-props': 2, 121 - 'react/jsx-no-target-blank': 2, 122 - 'react/jsx-no-undef': 2, 123 - 'react/jsx-tag-spacing': [2, {beforeSelfClosing: 'always'}], 124 - 'react/jsx-uses-react': 1, // debatable 125 - 'react/jsx-uses-vars': 2, 126 - 'react/jsx-key': [2, {checkFragmentShorthand: true}], 127 - 'react/self-closing-comp': 2, 128 - 'react/prefer-es6-class': 2, 129 - 'react/prefer-stateless-function': 1, 130 - 'react/require-render-return': 2, 131 - 'react/no-danger': 1, 132 - 133 - // Legacy APIs not supported in Preact: 134 - 'react/no-did-mount-set-state': 2, 135 - 'react/no-did-update-set-state': 2, 136 - 'react/no-find-dom-node': 2, 137 - 'react/no-is-mounted': 2, 138 - 'react/no-string-refs': 2, 139 - 140 - // hooks 141 - 'reactHooks/rules-of-hooks': 2, 142 - 'reactHooks/exhaustive-deps': 1, 143 93 }, 144 94 }, 145 95
+581 -3422
package-lock.json
··· 9 9 "version": "0.0.1", 10 10 "dependencies": { 11 11 "@mozilla/readability": "^0.6.0", 12 - "@preact/signals-react": "^3.4.0", 13 - "@radix-ui/react-dialog": "^1.1.15", 14 - "@radix-ui/react-scroll-area": "^1.2.10", 15 - "@radix-ui/react-separator": "^1.1.8", 16 - "@radix-ui/react-slot": "^1.2.4", 17 - "@radix-ui/react-tooltip": "^1.2.8", 18 - "@react-spring/web": "^10.0.3", 19 12 "@tailwindcss/vite": "^4.1.16", 20 - "@use-gesture/react": "^10.3.1", 21 13 "better-sqlite3": "^12.4.1", 22 - "class-variance-authority": "^0.7.1", 23 14 "clsx": "^2.1.1", 24 15 "dexie": "^4.2.1", 25 16 "express": "^5.1.0", ··· 28 19 "jose": "^6.0.11", 29 20 "level": "^10.0.0", 30 21 "linkedom": "^0.18.12", 31 - "lucide-react": "^0.552.0", 32 22 "nanoid": "^5.1.5", 33 - "react": "19.2.0", 34 - "react-dom": "19.2.0", 35 - "react-error-boundary": "^6.0.0", 36 - "react-router": "^7.9.5", 37 - "simple-peer": "^9.11.1", 23 + "solid-js": "^1.9.5", 24 + "solid-motionone": "^1.0.4", 38 25 "tailwind-merge": "^3.3.1", 39 26 "tailwindcss": "^4.1.16", 40 27 "ts-pattern": "^5.9.0", ··· 51 38 "@eslint/markdown": "~6.5.0", 52 39 "@faker-js/faker": "^9.8.0", 53 40 "@jest/globals": "^30.0.0", 54 - "@preact/signals-react-transform": "^0.6.0", 55 - "@react-router/dev": "^7.9.5", 56 41 "@testing-library/jest-dom": "^6.6.3", 57 - "@testing-library/react": "^16.1.0", 58 42 "@trivago/prettier-plugin-sort-imports": "^6.0.0", 59 43 "@types/better-sqlite3": "^7.6.13", 60 44 "@types/confusing-browser-globals": "^1.0.3", ··· 62 46 "@types/jest": "^30.0.0", 63 47 "@types/level": "^6.0.3", 64 48 "@types/node": "^24.0.1", 65 - "@types/react": "^19.2.2", 66 - "@types/react-dom": "^19.2.2", 67 - "@types/simple-peer": "^9.11.8", 68 49 "@types/ws": "^8.18.1", 69 - "@vitejs/plugin-react": "~5.1", 70 50 "confusing-browser-globals": "^1.0.11", 71 51 "eslint": "^9.28.0", 72 52 "eslint-config-prettier": "^10.1.5", 73 53 "eslint-plugin-prettier": "^5.5.0", 74 - "eslint-plugin-react": "^7.37.5", 75 - "eslint-plugin-react-hooks": "^5.2.0", 54 + "eslint-plugin-solid": "^0.14.5", 76 55 "eslint-plugin-tsdoc": "^0.4.0", 77 56 "glob-to-regexp": "^0.4.1", 78 57 "globals": "^16.2.0", ··· 87 66 "parse-gitignore": "^2.0.0", 88 67 "prettier": "^3.5.3", 89 68 "prettier-plugin-organize-imports": "^4.3.0", 69 + "solid-devtools": "^0.34.3", 90 70 "ts-jest": "^29.4.0", 91 71 "tw-animate-css": "^1.4.0", 92 72 "typedoc": "^0.28.14", ··· 98 78 "typescript-eslint-language-service": "^5.0.5", 99 79 "typescript-language-server": "^5.0.1", 100 80 "vite": "^7.1.12", 81 + "vite-bundle-analyzer": "^1.2.3", 101 82 "vite-plugin-checker": "^0.11.0", 102 83 "vite-plugin-node-polyfills": "^0.24.0", 84 + "vite-plugin-solid": "^2.11.8", 103 85 "wireit": "^0.14.12", 104 86 "zod-schema-faker": "^2.0.0-beta.5" 105 87 } ··· 206 188 "node": ">=6.9.0" 207 189 } 208 190 }, 209 - "node_modules/@babel/helper-annotate-as-pure": { 210 - "version": "7.27.3", 211 - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", 212 - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", 213 - "dev": true, 214 - "license": "MIT", 215 - "dependencies": { 216 - "@babel/types": "^7.27.3" 217 - }, 218 - "engines": { 219 - "node": ">=6.9.0" 220 - } 221 - }, 222 191 "node_modules/@babel/helper-compilation-targets": { 223 192 "version": "7.27.2", 224 193 "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", ··· 236 205 "node": ">=6.9.0" 237 206 } 238 207 }, 239 - "node_modules/@babel/helper-create-class-features-plugin": { 240 - "version": "7.28.5", 241 - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", 242 - "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", 243 - "dev": true, 244 - "license": "MIT", 245 - "dependencies": { 246 - "@babel/helper-annotate-as-pure": "^7.27.3", 247 - "@babel/helper-member-expression-to-functions": "^7.28.5", 248 - "@babel/helper-optimise-call-expression": "^7.27.1", 249 - "@babel/helper-replace-supers": "^7.27.1", 250 - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", 251 - "@babel/traverse": "^7.28.5", 252 - "semver": "^6.3.1" 253 - }, 254 - "engines": { 255 - "node": ">=6.9.0" 256 - }, 257 - "peerDependencies": { 258 - "@babel/core": "^7.0.0" 259 - } 260 - }, 261 208 "node_modules/@babel/helper-globals": { 262 209 "version": "7.28.0", 263 210 "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", 264 211 "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", 265 212 "dev": true, 266 213 "license": "MIT", 267 - "engines": { 268 - "node": ">=6.9.0" 269 - } 270 - }, 271 - "node_modules/@babel/helper-member-expression-to-functions": { 272 - "version": "7.28.5", 273 - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", 274 - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", 275 - "dev": true, 276 - "license": "MIT", 277 - "dependencies": { 278 - "@babel/traverse": "^7.28.5", 279 - "@babel/types": "^7.28.5" 280 - }, 281 214 "engines": { 282 215 "node": ">=6.9.0" 283 216 } ··· 314 247 "@babel/core": "^7.0.0" 315 248 } 316 249 }, 317 - "node_modules/@babel/helper-optimise-call-expression": { 318 - "version": "7.27.1", 319 - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", 320 - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", 321 - "dev": true, 322 - "license": "MIT", 323 - "dependencies": { 324 - "@babel/types": "^7.27.1" 325 - }, 326 - "engines": { 327 - "node": ">=6.9.0" 328 - } 329 - }, 330 250 "node_modules/@babel/helper-plugin-utils": { 331 251 "version": "7.27.1", 332 252 "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", ··· 337 257 "node": ">=6.9.0" 338 258 } 339 259 }, 340 - "node_modules/@babel/helper-replace-supers": { 341 - "version": "7.27.1", 342 - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", 343 - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", 344 - "dev": true, 345 - "license": "MIT", 346 - "dependencies": { 347 - "@babel/helper-member-expression-to-functions": "^7.27.1", 348 - "@babel/helper-optimise-call-expression": "^7.27.1", 349 - "@babel/traverse": "^7.27.1" 350 - }, 351 - "engines": { 352 - "node": ">=6.9.0" 353 - }, 354 - "peerDependencies": { 355 - "@babel/core": "^7.0.0" 356 - } 357 - }, 358 - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { 359 - "version": "7.27.1", 360 - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", 361 - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", 362 - "dev": true, 363 - "license": "MIT", 364 - "dependencies": { 365 - "@babel/traverse": "^7.27.1", 366 - "@babel/types": "^7.27.1" 367 - }, 368 - "engines": { 369 - "node": ">=6.9.0" 370 - } 371 - }, 372 260 "node_modules/@babel/helper-string-parser": { 373 261 "version": "7.27.1", 374 262 "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", ··· 666 554 }, 667 555 "peerDependencies": { 668 556 "@babel/core": "^7.0.0-0" 669 - } 670 - }, 671 - "node_modules/@babel/plugin-transform-modules-commonjs": { 672 - "version": "7.27.1", 673 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", 674 - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", 675 - "dev": true, 676 - "license": "MIT", 677 - "dependencies": { 678 - "@babel/helper-module-transforms": "^7.27.1", 679 - "@babel/helper-plugin-utils": "^7.27.1" 680 - }, 681 - "engines": { 682 - "node": ">=6.9.0" 683 - }, 684 - "peerDependencies": { 685 - "@babel/core": "^7.0.0-0" 686 - } 687 - }, 688 - "node_modules/@babel/plugin-transform-react-jsx-self": { 689 - "version": "7.27.1", 690 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", 691 - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", 692 - "dev": true, 693 - "license": "MIT", 694 - "dependencies": { 695 - "@babel/helper-plugin-utils": "^7.27.1" 696 - }, 697 - "engines": { 698 - "node": ">=6.9.0" 699 - }, 700 - "peerDependencies": { 701 - "@babel/core": "^7.0.0-0" 702 - } 703 - }, 704 - "node_modules/@babel/plugin-transform-react-jsx-source": { 705 - "version": "7.27.1", 706 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", 707 - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", 708 - "dev": true, 709 - "license": "MIT", 710 - "dependencies": { 711 - "@babel/helper-plugin-utils": "^7.27.1" 712 - }, 713 - "engines": { 714 - "node": ">=6.9.0" 715 - }, 716 - "peerDependencies": { 717 - "@babel/core": "^7.0.0-0" 718 - } 719 - }, 720 - "node_modules/@babel/plugin-transform-typescript": { 721 - "version": "7.28.5", 722 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", 723 - "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", 724 - "dev": true, 725 - "license": "MIT", 726 - "dependencies": { 727 - "@babel/helper-annotate-as-pure": "^7.27.3", 728 - "@babel/helper-create-class-features-plugin": "^7.28.5", 729 - "@babel/helper-plugin-utils": "^7.27.1", 730 - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", 731 - "@babel/plugin-syntax-typescript": "^7.27.1" 732 - }, 733 - "engines": { 734 - "node": ">=6.9.0" 735 - }, 736 - "peerDependencies": { 737 - "@babel/core": "^7.0.0-0" 738 - } 739 - }, 740 - "node_modules/@babel/preset-typescript": { 741 - "version": "7.28.5", 742 - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", 743 - "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", 744 - "dev": true, 745 - "license": "MIT", 746 - "dependencies": { 747 - "@babel/helper-plugin-utils": "^7.27.1", 748 - "@babel/helper-validator-option": "^7.27.1", 749 - "@babel/plugin-syntax-jsx": "^7.27.1", 750 - "@babel/plugin-transform-modules-commonjs": "^7.27.1", 751 - "@babel/plugin-transform-typescript": "^7.28.5" 752 - }, 753 - "engines": { 754 - "node": ">=6.9.0" 755 - }, 756 - "peerDependencies": { 757 - "@babel/core": "^7.0.0-0" 758 - } 759 - }, 760 - "node_modules/@babel/runtime": { 761 - "version": "7.28.4", 762 - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", 763 - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", 764 - "license": "MIT", 765 - "engines": { 766 - "node": ">=6.9.0" 767 557 } 768 558 }, 769 559 "node_modules/@babel/template": { ··· 1755 1545 "npm": ">=9.0.0" 1756 1546 } 1757 1547 }, 1758 - "node_modules/@floating-ui/core": { 1759 - "version": "1.7.3", 1760 - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", 1761 - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", 1762 - "license": "MIT", 1763 - "dependencies": { 1764 - "@floating-ui/utils": "^0.2.10" 1765 - } 1766 - }, 1767 - "node_modules/@floating-ui/dom": { 1768 - "version": "1.7.4", 1769 - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", 1770 - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", 1771 - "license": "MIT", 1772 - "dependencies": { 1773 - "@floating-ui/core": "^1.7.3", 1774 - "@floating-ui/utils": "^0.2.10" 1775 - } 1776 - }, 1777 - "node_modules/@floating-ui/react-dom": { 1778 - "version": "2.1.6", 1779 - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", 1780 - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", 1781 - "license": "MIT", 1782 - "dependencies": { 1783 - "@floating-ui/dom": "^1.7.4" 1784 - }, 1785 - "peerDependencies": { 1786 - "react": ">=16.8.0", 1787 - "react-dom": ">=16.8.0" 1788 - } 1789 - }, 1790 - "node_modules/@floating-ui/utils": { 1791 - "version": "0.2.10", 1792 - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", 1793 - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", 1794 - "license": "MIT" 1795 - }, 1796 1548 "node_modules/@gar/promisify": { 1797 1549 "version": "1.1.3", 1798 1550 "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", ··· 2647 2399 "url": "https://github.com/sponsors/ljharb" 2648 2400 } 2649 2401 }, 2650 - "node_modules/@mjackson/node-fetch-server": { 2651 - "version": "0.2.0", 2652 - "resolved": "https://registry.npmjs.org/@mjackson/node-fetch-server/-/node-fetch-server-0.2.0.tgz", 2653 - "integrity": "sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==", 2654 - "dev": true, 2402 + "node_modules/@motionone/animation": { 2403 + "version": "10.18.0", 2404 + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", 2405 + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", 2406 + "license": "MIT", 2407 + "dependencies": { 2408 + "@motionone/easing": "^10.18.0", 2409 + "@motionone/types": "^10.17.1", 2410 + "@motionone/utils": "^10.18.0", 2411 + "tslib": "^2.3.1" 2412 + } 2413 + }, 2414 + "node_modules/@motionone/dom": { 2415 + "version": "10.18.0", 2416 + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", 2417 + "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", 2418 + "license": "MIT", 2419 + "dependencies": { 2420 + "@motionone/animation": "^10.18.0", 2421 + "@motionone/generators": "^10.18.0", 2422 + "@motionone/types": "^10.17.1", 2423 + "@motionone/utils": "^10.18.0", 2424 + "hey-listen": "^1.0.8", 2425 + "tslib": "^2.3.1" 2426 + } 2427 + }, 2428 + "node_modules/@motionone/easing": { 2429 + "version": "10.18.0", 2430 + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", 2431 + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", 2432 + "license": "MIT", 2433 + "dependencies": { 2434 + "@motionone/utils": "^10.18.0", 2435 + "tslib": "^2.3.1" 2436 + } 2437 + }, 2438 + "node_modules/@motionone/generators": { 2439 + "version": "10.18.0", 2440 + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", 2441 + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", 2442 + "license": "MIT", 2443 + "dependencies": { 2444 + "@motionone/types": "^10.17.1", 2445 + "@motionone/utils": "^10.18.0", 2446 + "tslib": "^2.3.1" 2447 + } 2448 + }, 2449 + "node_modules/@motionone/types": { 2450 + "version": "10.17.1", 2451 + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", 2452 + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", 2655 2453 "license": "MIT" 2656 2454 }, 2455 + "node_modules/@motionone/utils": { 2456 + "version": "10.18.0", 2457 + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", 2458 + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", 2459 + "license": "MIT", 2460 + "dependencies": { 2461 + "@motionone/types": "^10.17.1", 2462 + "hey-listen": "^1.0.8", 2463 + "tslib": "^2.3.1" 2464 + } 2465 + }, 2657 2466 "node_modules/@mozilla/readability": { 2658 2467 "version": "0.6.0", 2659 2468 "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.6.0.tgz", ··· 2713 2522 "node": ">= 8" 2714 2523 } 2715 2524 }, 2525 + "node_modules/@nothing-but/utils": { 2526 + "version": "0.17.0", 2527 + "resolved": "https://registry.npmjs.org/@nothing-but/utils/-/utils-0.17.0.tgz", 2528 + "integrity": "sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==", 2529 + "dev": true, 2530 + "license": "MIT" 2531 + }, 2716 2532 "node_modules/@npmcli/fs": { 2717 2533 "version": "1.1.1", 2718 2534 "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", ··· 2739 2555 "node": ">=10" 2740 2556 } 2741 2557 }, 2742 - "node_modules/@npmcli/git": { 2743 - "version": "4.1.0", 2744 - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", 2745 - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", 2746 - "dev": true, 2747 - "license": "ISC", 2748 - "dependencies": { 2749 - "@npmcli/promise-spawn": "^6.0.0", 2750 - "lru-cache": "^7.4.4", 2751 - "npm-pick-manifest": "^8.0.0", 2752 - "proc-log": "^3.0.0", 2753 - "promise-inflight": "^1.0.1", 2754 - "promise-retry": "^2.0.1", 2755 - "semver": "^7.3.5", 2756 - "which": "^3.0.0" 2757 - }, 2758 - "engines": { 2759 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 2760 - } 2761 - }, 2762 - "node_modules/@npmcli/git/node_modules/lru-cache": { 2763 - "version": "7.18.3", 2764 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 2765 - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 2766 - "dev": true, 2767 - "license": "ISC", 2768 - "engines": { 2769 - "node": ">=12" 2770 - } 2771 - }, 2772 - "node_modules/@npmcli/git/node_modules/semver": { 2773 - "version": "7.7.3", 2774 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2775 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2776 - "dev": true, 2777 - "license": "ISC", 2778 - "bin": { 2779 - "semver": "bin/semver.js" 2780 - }, 2781 - "engines": { 2782 - "node": ">=10" 2783 - } 2784 - }, 2785 2558 "node_modules/@npmcli/move-file": { 2786 2559 "version": "1.1.2", 2787 2560 "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", ··· 2798 2571 "node": ">=10" 2799 2572 } 2800 2573 }, 2801 - "node_modules/@npmcli/package-json": { 2802 - "version": "4.0.1", 2803 - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-4.0.1.tgz", 2804 - "integrity": "sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==", 2805 - "dev": true, 2806 - "license": "ISC", 2807 - "dependencies": { 2808 - "@npmcli/git": "^4.1.0", 2809 - "glob": "^10.2.2", 2810 - "hosted-git-info": "^6.1.1", 2811 - "json-parse-even-better-errors": "^3.0.0", 2812 - "normalize-package-data": "^5.0.0", 2813 - "proc-log": "^3.0.0", 2814 - "semver": "^7.5.3" 2815 - }, 2816 - "engines": { 2817 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 2818 - } 2819 - }, 2820 - "node_modules/@npmcli/package-json/node_modules/semver": { 2821 - "version": "7.7.3", 2822 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2823 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2824 - "dev": true, 2825 - "license": "ISC", 2826 - "bin": { 2827 - "semver": "bin/semver.js" 2828 - }, 2829 - "engines": { 2830 - "node": ">=10" 2831 - } 2832 - }, 2833 - "node_modules/@npmcli/promise-spawn": { 2834 - "version": "6.0.2", 2835 - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", 2836 - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", 2837 - "dev": true, 2838 - "license": "ISC", 2839 - "dependencies": { 2840 - "which": "^3.0.0" 2841 - }, 2842 - "engines": { 2843 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 2844 - } 2845 - }, 2846 2574 "node_modules/@pkgjs/parseargs": { 2847 2575 "version": "0.11.0", 2848 2576 "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", ··· 2867 2595 "url": "https://opencollective.com/pkgr" 2868 2596 } 2869 2597 }, 2870 - "node_modules/@preact/signals-core": { 2871 - "version": "1.12.1", 2872 - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.12.1.tgz", 2873 - "integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==", 2874 - "license": "MIT", 2875 - "funding": { 2876 - "type": "opencollective", 2877 - "url": "https://opencollective.com/preact" 2878 - } 2879 - }, 2880 - "node_modules/@preact/signals-react": { 2881 - "version": "3.4.0", 2882 - "resolved": "https://registry.npmjs.org/@preact/signals-react/-/signals-react-3.4.0.tgz", 2883 - "integrity": "sha512-JduUcKC+Fu9BGehV645WpU7ZOjZYb6Yngwi/CoeGmxUA/ZRQEkepxJHh8t+2WJBV2QBTxlFbOnw3UqqHohT0YQ==", 2884 - "license": "MIT", 2885 - "dependencies": { 2886 - "@preact/signals-core": "^1.12.0", 2887 - "use-sync-external-store": "^1.2.0" 2888 - }, 2889 - "funding": { 2890 - "type": "opencollective", 2891 - "url": "https://opencollective.com/preact" 2892 - }, 2893 - "peerDependencies": { 2894 - "react": "^16.14.0 || 17.x || 18.x || 19.x" 2895 - } 2896 - }, 2897 - "node_modules/@preact/signals-react-transform": { 2898 - "version": "0.6.0", 2899 - "resolved": "https://registry.npmjs.org/@preact/signals-react-transform/-/signals-react-transform-0.6.0.tgz", 2900 - "integrity": "sha512-m6swfrzHYZjNKbLGF+n2vI+PdJAjDvVJ1QH+gt5iew9tEybaZcEzXEqNIAZsAXFH38u8L91QK3Xm9C5TvJqYlg==", 2901 - "dev": true, 2902 - "license": "MIT", 2903 - "dependencies": { 2904 - "@babel/helper-module-imports": "^7.22.5", 2905 - "@babel/helper-plugin-utils": "^7.22.5", 2906 - "@preact/signals-react": "^3.3.0", 2907 - "debug": "^4.3.4", 2908 - "use-sync-external-store": "^1.2.0" 2909 - }, 2910 - "funding": { 2911 - "type": "opencollective", 2912 - "url": "https://opencollective.com/preact" 2913 - }, 2914 - "peerDependencies": { 2915 - "@babel/core": "^7.0.0", 2916 - "react": "^16.14.0 || 17.x || 18.x || 19.x" 2917 - } 2918 - }, 2919 - "node_modules/@radix-ui/number": { 2920 - "version": "1.1.1", 2921 - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", 2922 - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", 2923 - "license": "MIT" 2924 - }, 2925 - "node_modules/@radix-ui/primitive": { 2926 - "version": "1.1.3", 2927 - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", 2928 - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", 2929 - "license": "MIT" 2930 - }, 2931 - "node_modules/@radix-ui/react-arrow": { 2932 - "version": "1.1.7", 2933 - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", 2934 - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", 2935 - "license": "MIT", 2936 - "dependencies": { 2937 - "@radix-ui/react-primitive": "2.1.3" 2938 - }, 2939 - "peerDependencies": { 2940 - "@types/react": "*", 2941 - "@types/react-dom": "*", 2942 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 2943 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 2944 - }, 2945 - "peerDependenciesMeta": { 2946 - "@types/react": { 2947 - "optional": true 2948 - }, 2949 - "@types/react-dom": { 2950 - "optional": true 2951 - } 2952 - } 2953 - }, 2954 - "node_modules/@radix-ui/react-compose-refs": { 2955 - "version": "1.1.2", 2956 - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", 2957 - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", 2958 - "license": "MIT", 2959 - "peerDependencies": { 2960 - "@types/react": "*", 2961 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 2962 - }, 2963 - "peerDependenciesMeta": { 2964 - "@types/react": { 2965 - "optional": true 2966 - } 2967 - } 2968 - }, 2969 - "node_modules/@radix-ui/react-context": { 2970 - "version": "1.1.2", 2971 - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", 2972 - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", 2973 - "license": "MIT", 2974 - "peerDependencies": { 2975 - "@types/react": "*", 2976 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 2977 - }, 2978 - "peerDependenciesMeta": { 2979 - "@types/react": { 2980 - "optional": true 2981 - } 2982 - } 2983 - }, 2984 - "node_modules/@radix-ui/react-dialog": { 2985 - "version": "1.1.15", 2986 - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", 2987 - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", 2988 - "license": "MIT", 2989 - "dependencies": { 2990 - "@radix-ui/primitive": "1.1.3", 2991 - "@radix-ui/react-compose-refs": "1.1.2", 2992 - "@radix-ui/react-context": "1.1.2", 2993 - "@radix-ui/react-dismissable-layer": "1.1.11", 2994 - "@radix-ui/react-focus-guards": "1.1.3", 2995 - "@radix-ui/react-focus-scope": "1.1.7", 2996 - "@radix-ui/react-id": "1.1.1", 2997 - "@radix-ui/react-portal": "1.1.9", 2998 - "@radix-ui/react-presence": "1.1.5", 2999 - "@radix-ui/react-primitive": "2.1.3", 3000 - "@radix-ui/react-slot": "1.2.3", 3001 - "@radix-ui/react-use-controllable-state": "1.2.2", 3002 - "aria-hidden": "^1.2.4", 3003 - "react-remove-scroll": "^2.6.3" 3004 - }, 3005 - "peerDependencies": { 3006 - "@types/react": "*", 3007 - "@types/react-dom": "*", 3008 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3009 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3010 - }, 3011 - "peerDependenciesMeta": { 3012 - "@types/react": { 3013 - "optional": true 3014 - }, 3015 - "@types/react-dom": { 3016 - "optional": true 3017 - } 3018 - } 3019 - }, 3020 - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { 3021 - "version": "1.2.3", 3022 - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", 3023 - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", 3024 - "license": "MIT", 3025 - "dependencies": { 3026 - "@radix-ui/react-compose-refs": "1.1.2" 3027 - }, 3028 - "peerDependencies": { 3029 - "@types/react": "*", 3030 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3031 - }, 3032 - "peerDependenciesMeta": { 3033 - "@types/react": { 3034 - "optional": true 3035 - } 3036 - } 3037 - }, 3038 - "node_modules/@radix-ui/react-direction": { 3039 - "version": "1.1.1", 3040 - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", 3041 - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", 3042 - "license": "MIT", 3043 - "peerDependencies": { 3044 - "@types/react": "*", 3045 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3046 - }, 3047 - "peerDependenciesMeta": { 3048 - "@types/react": { 3049 - "optional": true 3050 - } 3051 - } 3052 - }, 3053 - "node_modules/@radix-ui/react-dismissable-layer": { 3054 - "version": "1.1.11", 3055 - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", 3056 - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", 3057 - "license": "MIT", 3058 - "dependencies": { 3059 - "@radix-ui/primitive": "1.1.3", 3060 - "@radix-ui/react-compose-refs": "1.1.2", 3061 - "@radix-ui/react-primitive": "2.1.3", 3062 - "@radix-ui/react-use-callback-ref": "1.1.1", 3063 - "@radix-ui/react-use-escape-keydown": "1.1.1" 3064 - }, 3065 - "peerDependencies": { 3066 - "@types/react": "*", 3067 - "@types/react-dom": "*", 3068 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3069 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3070 - }, 3071 - "peerDependenciesMeta": { 3072 - "@types/react": { 3073 - "optional": true 3074 - }, 3075 - "@types/react-dom": { 3076 - "optional": true 3077 - } 3078 - } 3079 - }, 3080 - "node_modules/@radix-ui/react-focus-guards": { 3081 - "version": "1.1.3", 3082 - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", 3083 - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", 3084 - "license": "MIT", 3085 - "peerDependencies": { 3086 - "@types/react": "*", 3087 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3088 - }, 3089 - "peerDependenciesMeta": { 3090 - "@types/react": { 3091 - "optional": true 3092 - } 3093 - } 3094 - }, 3095 - "node_modules/@radix-ui/react-focus-scope": { 3096 - "version": "1.1.7", 3097 - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", 3098 - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", 3099 - "license": "MIT", 3100 - "dependencies": { 3101 - "@radix-ui/react-compose-refs": "1.1.2", 3102 - "@radix-ui/react-primitive": "2.1.3", 3103 - "@radix-ui/react-use-callback-ref": "1.1.1" 3104 - }, 3105 - "peerDependencies": { 3106 - "@types/react": "*", 3107 - "@types/react-dom": "*", 3108 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3109 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3110 - }, 3111 - "peerDependenciesMeta": { 3112 - "@types/react": { 3113 - "optional": true 3114 - }, 3115 - "@types/react-dom": { 3116 - "optional": true 3117 - } 3118 - } 3119 - }, 3120 - "node_modules/@radix-ui/react-id": { 3121 - "version": "1.1.1", 3122 - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", 3123 - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", 3124 - "license": "MIT", 3125 - "dependencies": { 3126 - "@radix-ui/react-use-layout-effect": "1.1.1" 3127 - }, 3128 - "peerDependencies": { 3129 - "@types/react": "*", 3130 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3131 - }, 3132 - "peerDependenciesMeta": { 3133 - "@types/react": { 3134 - "optional": true 3135 - } 3136 - } 3137 - }, 3138 - "node_modules/@radix-ui/react-popper": { 3139 - "version": "1.2.8", 3140 - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", 3141 - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", 3142 - "license": "MIT", 3143 - "dependencies": { 3144 - "@floating-ui/react-dom": "^2.0.0", 3145 - "@radix-ui/react-arrow": "1.1.7", 3146 - "@radix-ui/react-compose-refs": "1.1.2", 3147 - "@radix-ui/react-context": "1.1.2", 3148 - "@radix-ui/react-primitive": "2.1.3", 3149 - "@radix-ui/react-use-callback-ref": "1.1.1", 3150 - "@radix-ui/react-use-layout-effect": "1.1.1", 3151 - "@radix-ui/react-use-rect": "1.1.1", 3152 - "@radix-ui/react-use-size": "1.1.1", 3153 - "@radix-ui/rect": "1.1.1" 3154 - }, 3155 - "peerDependencies": { 3156 - "@types/react": "*", 3157 - "@types/react-dom": "*", 3158 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3159 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3160 - }, 3161 - "peerDependenciesMeta": { 3162 - "@types/react": { 3163 - "optional": true 3164 - }, 3165 - "@types/react-dom": { 3166 - "optional": true 3167 - } 3168 - } 3169 - }, 3170 - "node_modules/@radix-ui/react-portal": { 3171 - "version": "1.1.9", 3172 - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", 3173 - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", 3174 - "license": "MIT", 3175 - "dependencies": { 3176 - "@radix-ui/react-primitive": "2.1.3", 3177 - "@radix-ui/react-use-layout-effect": "1.1.1" 3178 - }, 3179 - "peerDependencies": { 3180 - "@types/react": "*", 3181 - "@types/react-dom": "*", 3182 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3183 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3184 - }, 3185 - "peerDependenciesMeta": { 3186 - "@types/react": { 3187 - "optional": true 3188 - }, 3189 - "@types/react-dom": { 3190 - "optional": true 3191 - } 3192 - } 3193 - }, 3194 - "node_modules/@radix-ui/react-presence": { 3195 - "version": "1.1.5", 3196 - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", 3197 - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", 3198 - "license": "MIT", 3199 - "dependencies": { 3200 - "@radix-ui/react-compose-refs": "1.1.2", 3201 - "@radix-ui/react-use-layout-effect": "1.1.1" 3202 - }, 3203 - "peerDependencies": { 3204 - "@types/react": "*", 3205 - "@types/react-dom": "*", 3206 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3207 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3208 - }, 3209 - "peerDependenciesMeta": { 3210 - "@types/react": { 3211 - "optional": true 3212 - }, 3213 - "@types/react-dom": { 3214 - "optional": true 3215 - } 3216 - } 3217 - }, 3218 - "node_modules/@radix-ui/react-primitive": { 3219 - "version": "2.1.3", 3220 - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", 3221 - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", 3222 - "license": "MIT", 3223 - "dependencies": { 3224 - "@radix-ui/react-slot": "1.2.3" 3225 - }, 3226 - "peerDependencies": { 3227 - "@types/react": "*", 3228 - "@types/react-dom": "*", 3229 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3230 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3231 - }, 3232 - "peerDependenciesMeta": { 3233 - "@types/react": { 3234 - "optional": true 3235 - }, 3236 - "@types/react-dom": { 3237 - "optional": true 3238 - } 3239 - } 3240 - }, 3241 - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { 3242 - "version": "1.2.3", 3243 - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", 3244 - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", 3245 - "license": "MIT", 3246 - "dependencies": { 3247 - "@radix-ui/react-compose-refs": "1.1.2" 3248 - }, 3249 - "peerDependencies": { 3250 - "@types/react": "*", 3251 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3252 - }, 3253 - "peerDependenciesMeta": { 3254 - "@types/react": { 3255 - "optional": true 3256 - } 3257 - } 3258 - }, 3259 - "node_modules/@radix-ui/react-scroll-area": { 3260 - "version": "1.2.10", 3261 - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", 3262 - "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", 3263 - "license": "MIT", 3264 - "dependencies": { 3265 - "@radix-ui/number": "1.1.1", 3266 - "@radix-ui/primitive": "1.1.3", 3267 - "@radix-ui/react-compose-refs": "1.1.2", 3268 - "@radix-ui/react-context": "1.1.2", 3269 - "@radix-ui/react-direction": "1.1.1", 3270 - "@radix-ui/react-presence": "1.1.5", 3271 - "@radix-ui/react-primitive": "2.1.3", 3272 - "@radix-ui/react-use-callback-ref": "1.1.1", 3273 - "@radix-ui/react-use-layout-effect": "1.1.1" 3274 - }, 3275 - "peerDependencies": { 3276 - "@types/react": "*", 3277 - "@types/react-dom": "*", 3278 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3279 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3280 - }, 3281 - "peerDependenciesMeta": { 3282 - "@types/react": { 3283 - "optional": true 3284 - }, 3285 - "@types/react-dom": { 3286 - "optional": true 3287 - } 3288 - } 3289 - }, 3290 - "node_modules/@radix-ui/react-separator": { 3291 - "version": "1.1.8", 3292 - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", 3293 - "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", 3294 - "license": "MIT", 3295 - "dependencies": { 3296 - "@radix-ui/react-primitive": "2.1.4" 3297 - }, 3298 - "peerDependencies": { 3299 - "@types/react": "*", 3300 - "@types/react-dom": "*", 3301 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3302 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3303 - }, 3304 - "peerDependenciesMeta": { 3305 - "@types/react": { 3306 - "optional": true 3307 - }, 3308 - "@types/react-dom": { 3309 - "optional": true 3310 - } 3311 - } 3312 - }, 3313 - "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { 3314 - "version": "2.1.4", 3315 - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", 3316 - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", 3317 - "license": "MIT", 3318 - "dependencies": { 3319 - "@radix-ui/react-slot": "1.2.4" 3320 - }, 3321 - "peerDependencies": { 3322 - "@types/react": "*", 3323 - "@types/react-dom": "*", 3324 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3325 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3326 - }, 3327 - "peerDependenciesMeta": { 3328 - "@types/react": { 3329 - "optional": true 3330 - }, 3331 - "@types/react-dom": { 3332 - "optional": true 3333 - } 3334 - } 3335 - }, 3336 - "node_modules/@radix-ui/react-slot": { 3337 - "version": "1.2.4", 3338 - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", 3339 - "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", 3340 - "license": "MIT", 3341 - "dependencies": { 3342 - "@radix-ui/react-compose-refs": "1.1.2" 3343 - }, 3344 - "peerDependencies": { 3345 - "@types/react": "*", 3346 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3347 - }, 3348 - "peerDependenciesMeta": { 3349 - "@types/react": { 3350 - "optional": true 3351 - } 3352 - } 3353 - }, 3354 - "node_modules/@radix-ui/react-tooltip": { 3355 - "version": "1.2.8", 3356 - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", 3357 - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", 3358 - "license": "MIT", 3359 - "dependencies": { 3360 - "@radix-ui/primitive": "1.1.3", 3361 - "@radix-ui/react-compose-refs": "1.1.2", 3362 - "@radix-ui/react-context": "1.1.2", 3363 - "@radix-ui/react-dismissable-layer": "1.1.11", 3364 - "@radix-ui/react-id": "1.1.1", 3365 - "@radix-ui/react-popper": "1.2.8", 3366 - "@radix-ui/react-portal": "1.1.9", 3367 - "@radix-ui/react-presence": "1.1.5", 3368 - "@radix-ui/react-primitive": "2.1.3", 3369 - "@radix-ui/react-slot": "1.2.3", 3370 - "@radix-ui/react-use-controllable-state": "1.2.2", 3371 - "@radix-ui/react-visually-hidden": "1.2.3" 3372 - }, 3373 - "peerDependencies": { 3374 - "@types/react": "*", 3375 - "@types/react-dom": "*", 3376 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3377 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3378 - }, 3379 - "peerDependenciesMeta": { 3380 - "@types/react": { 3381 - "optional": true 3382 - }, 3383 - "@types/react-dom": { 3384 - "optional": true 3385 - } 3386 - } 3387 - }, 3388 - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { 3389 - "version": "1.2.3", 3390 - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", 3391 - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", 3392 - "license": "MIT", 3393 - "dependencies": { 3394 - "@radix-ui/react-compose-refs": "1.1.2" 3395 - }, 3396 - "peerDependencies": { 3397 - "@types/react": "*", 3398 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3399 - }, 3400 - "peerDependenciesMeta": { 3401 - "@types/react": { 3402 - "optional": true 3403 - } 3404 - } 3405 - }, 3406 - "node_modules/@radix-ui/react-use-callback-ref": { 3407 - "version": "1.1.1", 3408 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", 3409 - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", 3410 - "license": "MIT", 3411 - "peerDependencies": { 3412 - "@types/react": "*", 3413 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3414 - }, 3415 - "peerDependenciesMeta": { 3416 - "@types/react": { 3417 - "optional": true 3418 - } 3419 - } 3420 - }, 3421 - "node_modules/@radix-ui/react-use-controllable-state": { 3422 - "version": "1.2.2", 3423 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", 3424 - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", 3425 - "license": "MIT", 3426 - "dependencies": { 3427 - "@radix-ui/react-use-effect-event": "0.0.2", 3428 - "@radix-ui/react-use-layout-effect": "1.1.1" 3429 - }, 3430 - "peerDependencies": { 3431 - "@types/react": "*", 3432 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3433 - }, 3434 - "peerDependenciesMeta": { 3435 - "@types/react": { 3436 - "optional": true 3437 - } 3438 - } 3439 - }, 3440 - "node_modules/@radix-ui/react-use-effect-event": { 3441 - "version": "0.0.2", 3442 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", 3443 - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", 3444 - "license": "MIT", 3445 - "dependencies": { 3446 - "@radix-ui/react-use-layout-effect": "1.1.1" 3447 - }, 3448 - "peerDependencies": { 3449 - "@types/react": "*", 3450 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3451 - }, 3452 - "peerDependenciesMeta": { 3453 - "@types/react": { 3454 - "optional": true 3455 - } 3456 - } 3457 - }, 3458 - "node_modules/@radix-ui/react-use-escape-keydown": { 3459 - "version": "1.1.1", 3460 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", 3461 - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", 3462 - "license": "MIT", 3463 - "dependencies": { 3464 - "@radix-ui/react-use-callback-ref": "1.1.1" 3465 - }, 3466 - "peerDependencies": { 3467 - "@types/react": "*", 3468 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3469 - }, 3470 - "peerDependenciesMeta": { 3471 - "@types/react": { 3472 - "optional": true 3473 - } 3474 - } 3475 - }, 3476 - "node_modules/@radix-ui/react-use-layout-effect": { 3477 - "version": "1.1.1", 3478 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", 3479 - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", 3480 - "license": "MIT", 3481 - "peerDependencies": { 3482 - "@types/react": "*", 3483 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3484 - }, 3485 - "peerDependenciesMeta": { 3486 - "@types/react": { 3487 - "optional": true 3488 - } 3489 - } 3490 - }, 3491 - "node_modules/@radix-ui/react-use-rect": { 3492 - "version": "1.1.1", 3493 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", 3494 - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", 3495 - "license": "MIT", 3496 - "dependencies": { 3497 - "@radix-ui/rect": "1.1.1" 3498 - }, 3499 - "peerDependencies": { 3500 - "@types/react": "*", 3501 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3502 - }, 3503 - "peerDependenciesMeta": { 3504 - "@types/react": { 3505 - "optional": true 3506 - } 3507 - } 3508 - }, 3509 - "node_modules/@radix-ui/react-use-size": { 3510 - "version": "1.1.1", 3511 - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", 3512 - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", 3513 - "license": "MIT", 3514 - "dependencies": { 3515 - "@radix-ui/react-use-layout-effect": "1.1.1" 3516 - }, 3517 - "peerDependencies": { 3518 - "@types/react": "*", 3519 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3520 - }, 3521 - "peerDependenciesMeta": { 3522 - "@types/react": { 3523 - "optional": true 3524 - } 3525 - } 3526 - }, 3527 - "node_modules/@radix-ui/react-visually-hidden": { 3528 - "version": "1.2.3", 3529 - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", 3530 - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", 3531 - "license": "MIT", 3532 - "dependencies": { 3533 - "@radix-ui/react-primitive": "2.1.3" 3534 - }, 3535 - "peerDependencies": { 3536 - "@types/react": "*", 3537 - "@types/react-dom": "*", 3538 - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 3539 - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 3540 - }, 3541 - "peerDependenciesMeta": { 3542 - "@types/react": { 3543 - "optional": true 3544 - }, 3545 - "@types/react-dom": { 3546 - "optional": true 3547 - } 3548 - } 3549 - }, 3550 - "node_modules/@radix-ui/rect": { 3551 - "version": "1.1.1", 3552 - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", 3553 - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", 3554 - "license": "MIT" 3555 - }, 3556 - "node_modules/@react-router/dev": { 3557 - "version": "7.9.5", 3558 - "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.9.5.tgz", 3559 - "integrity": "sha512-MkWI4zN7VbQ0tteuJtX5hmDINNS26IW236a8lM8+o1344xdnT/ZsBvcUh8AkzDdCRYEz1blgzgirpj0Wc1gmXg==", 3560 - "dev": true, 3561 - "license": "MIT", 3562 - "dependencies": { 3563 - "@babel/core": "^7.27.7", 3564 - "@babel/generator": "^7.27.5", 3565 - "@babel/parser": "^7.27.7", 3566 - "@babel/plugin-syntax-jsx": "^7.27.1", 3567 - "@babel/preset-typescript": "^7.27.1", 3568 - "@babel/traverse": "^7.27.7", 3569 - "@babel/types": "^7.27.7", 3570 - "@npmcli/package-json": "^4.0.1", 3571 - "@react-router/node": "7.9.5", 3572 - "@remix-run/node-fetch-server": "^0.9.0", 3573 - "arg": "^5.0.1", 3574 - "babel-dead-code-elimination": "^1.0.6", 3575 - "chokidar": "^4.0.0", 3576 - "dedent": "^1.5.3", 3577 - "es-module-lexer": "^1.3.1", 3578 - "exit-hook": "2.2.1", 3579 - "isbot": "^5.1.11", 3580 - "jsesc": "3.0.2", 3581 - "lodash": "^4.17.21", 3582 - "p-map": "^7.0.3", 3583 - "pathe": "^1.1.2", 3584 - "picocolors": "^1.1.1", 3585 - "prettier": "^3.6.2", 3586 - "react-refresh": "^0.14.0", 3587 - "semver": "^7.3.7", 3588 - "tinyglobby": "^0.2.14", 3589 - "valibot": "^1.1.0", 3590 - "vite-node": "^3.2.2" 3591 - }, 3592 - "bin": { 3593 - "react-router": "bin.js" 3594 - }, 3595 - "engines": { 3596 - "node": ">=20.0.0" 3597 - }, 3598 - "peerDependencies": { 3599 - "@react-router/serve": "^7.9.5", 3600 - "@vitejs/plugin-rsc": "*", 3601 - "react-router": "^7.9.5", 3602 - "typescript": "^5.1.0", 3603 - "vite": "^5.1.0 || ^6.0.0 || ^7.0.0", 3604 - "wrangler": "^3.28.2 || ^4.0.0" 3605 - }, 3606 - "peerDependenciesMeta": { 3607 - "@react-router/serve": { 3608 - "optional": true 3609 - }, 3610 - "@vitejs/plugin-rsc": { 3611 - "optional": true 3612 - }, 3613 - "typescript": { 3614 - "optional": true 3615 - }, 3616 - "wrangler": { 3617 - "optional": true 3618 - } 3619 - } 3620 - }, 3621 - "node_modules/@react-router/dev/node_modules/jsesc": { 3622 - "version": "3.0.2", 3623 - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", 3624 - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", 3625 - "dev": true, 3626 - "license": "MIT", 3627 - "bin": { 3628 - "jsesc": "bin/jsesc" 3629 - }, 3630 - "engines": { 3631 - "node": ">=6" 3632 - } 3633 - }, 3634 - "node_modules/@react-router/dev/node_modules/semver": { 3635 - "version": "7.7.3", 3636 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 3637 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 3638 - "dev": true, 3639 - "license": "ISC", 3640 - "bin": { 3641 - "semver": "bin/semver.js" 3642 - }, 3643 - "engines": { 3644 - "node": ">=10" 3645 - } 3646 - }, 3647 - "node_modules/@react-router/node": { 3648 - "version": "7.9.5", 3649 - "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.5.tgz", 3650 - "integrity": "sha512-3mDd32mXh3gEkG0cLPnUaoLkY1pApsTPqn7O1j+P8aLf997uYz5lYDjt33vtMhaotlRM0x+5JziAKtz/76YBpQ==", 3651 - "dev": true, 3652 - "license": "MIT", 3653 - "dependencies": { 3654 - "@mjackson/node-fetch-server": "^0.2.0" 3655 - }, 3656 - "engines": { 3657 - "node": ">=20.0.0" 3658 - }, 3659 - "peerDependencies": { 3660 - "react-router": "7.9.5", 3661 - "typescript": "^5.1.0" 3662 - }, 3663 - "peerDependenciesMeta": { 3664 - "typescript": { 3665 - "optional": true 3666 - } 3667 - } 3668 - }, 3669 - "node_modules/@react-spring/animated": { 3670 - "version": "10.0.3", 3671 - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-10.0.3.tgz", 3672 - "integrity": "sha512-7MrxADV3vaUADn2V9iYhaIL6iOWRx9nCJjYrsk2AHD2kwPr6fg7Pt0v+deX5RnCDmCKNnD6W5fasiyM8D+wzJQ==", 3673 - "license": "MIT", 3674 - "dependencies": { 3675 - "@react-spring/shared": "~10.0.3", 3676 - "@react-spring/types": "~10.0.3" 3677 - }, 3678 - "peerDependencies": { 3679 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3680 - } 3681 - }, 3682 - "node_modules/@react-spring/core": { 3683 - "version": "10.0.3", 3684 - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-10.0.3.tgz", 3685 - "integrity": "sha512-D4DwNO68oohDf/0HG2G0Uragzb9IA1oXblxrd6MZAcBcUQG2EHUWXewjdECMPLNmQvlYVyyBRH6gPxXM5DX7DQ==", 3686 - "license": "MIT", 3687 - "dependencies": { 3688 - "@react-spring/animated": "~10.0.3", 3689 - "@react-spring/shared": "~10.0.3", 3690 - "@react-spring/types": "~10.0.3" 3691 - }, 3692 - "funding": { 3693 - "type": "opencollective", 3694 - "url": "https://opencollective.com/react-spring/donate" 3695 - }, 3696 - "peerDependencies": { 3697 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3698 - } 3699 - }, 3700 - "node_modules/@react-spring/rafz": { 3701 - "version": "10.0.3", 3702 - "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-10.0.3.tgz", 3703 - "integrity": "sha512-Ri2/xqt8OnQ2iFKkxKMSF4Nqv0LSWnxXT4jXFzBDsHgeeH/cHxTLupAWUwmV9hAGgmEhBmh5aONtj3J6R/18wg==", 3704 - "license": "MIT" 3705 - }, 3706 - "node_modules/@react-spring/shared": { 3707 - "version": "10.0.3", 3708 - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-10.0.3.tgz", 3709 - "integrity": "sha512-geCal66nrkaQzUVhPkGomylo+Jpd5VPK8tPMEDevQEfNSWAQP15swHm+MCRG4wVQrQlTi9lOzKzpRoTL3CA84Q==", 3710 - "license": "MIT", 3711 - "dependencies": { 3712 - "@react-spring/rafz": "~10.0.3", 3713 - "@react-spring/types": "~10.0.3" 3714 - }, 3715 - "peerDependencies": { 3716 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3717 - } 3718 - }, 3719 - "node_modules/@react-spring/types": { 3720 - "version": "10.0.3", 3721 - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.0.3.tgz", 3722 - "integrity": "sha512-H5Ixkd2OuSIgHtxuHLTt7aJYfhMXKXT/rK32HPD/kSrOB6q6ooeiWAXkBy7L8F3ZxdkBb9ini9zP9UwnEFzWgQ==", 3723 - "license": "MIT" 3724 - }, 3725 - "node_modules/@react-spring/web": { 3726 - "version": "10.0.3", 3727 - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-10.0.3.tgz", 3728 - "integrity": "sha512-ndU+kWY81rHsT7gTFtCJ6mrVhaJ6grFmgTnENipzmKqot4HGf5smPNK+cZZJqoGeDsj9ZsiWPW4geT/NyD484A==", 3729 - "license": "MIT", 3730 - "dependencies": { 3731 - "@react-spring/animated": "~10.0.3", 3732 - "@react-spring/core": "~10.0.3", 3733 - "@react-spring/shared": "~10.0.3", 3734 - "@react-spring/types": "~10.0.3" 3735 - }, 3736 - "peerDependencies": { 3737 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", 3738 - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3739 - } 3740 - }, 3741 - "node_modules/@remix-run/node-fetch-server": { 3742 - "version": "0.9.0", 3743 - "resolved": "https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.9.0.tgz", 3744 - "integrity": "sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==", 3745 - "dev": true, 3746 - "license": "MIT" 3747 - }, 3748 - "node_modules/@rolldown/pluginutils": { 3749 - "version": "1.0.0-beta.43", 3750 - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz", 3751 - "integrity": "sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==", 3752 - "dev": true, 3753 - "license": "MIT" 3754 - }, 3755 2598 "node_modules/@rollup/plugin-inject": { 3756 2599 "version": "5.0.5", 3757 2600 "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", ··· 4190 3033 "@sinonjs/commons": "^3.0.1" 4191 3034 } 4192 3035 }, 3036 + "node_modules/@solid-devtools/debugger": { 3037 + "version": "0.28.1", 3038 + "resolved": "https://registry.npmjs.org/@solid-devtools/debugger/-/debugger-0.28.1.tgz", 3039 + "integrity": "sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==", 3040 + "dev": true, 3041 + "license": "MIT", 3042 + "dependencies": { 3043 + "@nothing-but/utils": "~0.17.0", 3044 + "@solid-devtools/shared": "^0.20.0", 3045 + "@solid-primitives/bounds": "^0.1.1", 3046 + "@solid-primitives/event-listener": "^2.4.1", 3047 + "@solid-primitives/keyboard": "^1.3.1", 3048 + "@solid-primitives/rootless": "^1.5.1", 3049 + "@solid-primitives/scheduled": "^1.5.1", 3050 + "@solid-primitives/static-store": "^0.1.1", 3051 + "@solid-primitives/utils": "^6.3.1" 3052 + }, 3053 + "peerDependencies": { 3054 + "solid-js": "^1.9.0" 3055 + } 3056 + }, 3057 + "node_modules/@solid-devtools/shared": { 3058 + "version": "0.20.0", 3059 + "resolved": "https://registry.npmjs.org/@solid-devtools/shared/-/shared-0.20.0.tgz", 3060 + "integrity": "sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==", 3061 + "dev": true, 3062 + "license": "MIT", 3063 + "dependencies": { 3064 + "@nothing-but/utils": "~0.17.0", 3065 + "@solid-primitives/event-listener": "^2.4.1", 3066 + "@solid-primitives/media": "^2.3.1", 3067 + "@solid-primitives/refs": "^1.1.1", 3068 + "@solid-primitives/rootless": "^1.5.1", 3069 + "@solid-primitives/scheduled": "^1.5.1", 3070 + "@solid-primitives/static-store": "^0.1.1", 3071 + "@solid-primitives/styles": "^0.1.1", 3072 + "@solid-primitives/utils": "^6.3.1" 3073 + }, 3074 + "peerDependencies": { 3075 + "solid-js": "^1.9.0" 3076 + } 3077 + }, 3078 + "node_modules/@solid-primitives/bounds": { 3079 + "version": "0.1.3", 3080 + "resolved": "https://registry.npmjs.org/@solid-primitives/bounds/-/bounds-0.1.3.tgz", 3081 + "integrity": "sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==", 3082 + "dev": true, 3083 + "license": "MIT", 3084 + "dependencies": { 3085 + "@solid-primitives/event-listener": "^2.4.3", 3086 + "@solid-primitives/resize-observer": "^2.1.3", 3087 + "@solid-primitives/static-store": "^0.1.2", 3088 + "@solid-primitives/utils": "^6.3.2" 3089 + }, 3090 + "peerDependencies": { 3091 + "solid-js": "^1.6.12" 3092 + } 3093 + }, 3094 + "node_modules/@solid-primitives/event-listener": { 3095 + "version": "2.4.3", 3096 + "resolved": "https://registry.npmjs.org/@solid-primitives/event-listener/-/event-listener-2.4.3.tgz", 3097 + "integrity": "sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==", 3098 + "dev": true, 3099 + "license": "MIT", 3100 + "dependencies": { 3101 + "@solid-primitives/utils": "^6.3.2" 3102 + }, 3103 + "peerDependencies": { 3104 + "solid-js": "^1.6.12" 3105 + } 3106 + }, 3107 + "node_modules/@solid-primitives/keyboard": { 3108 + "version": "1.3.3", 3109 + "resolved": "https://registry.npmjs.org/@solid-primitives/keyboard/-/keyboard-1.3.3.tgz", 3110 + "integrity": "sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==", 3111 + "dev": true, 3112 + "license": "MIT", 3113 + "dependencies": { 3114 + "@solid-primitives/event-listener": "^2.4.3", 3115 + "@solid-primitives/rootless": "^1.5.2", 3116 + "@solid-primitives/utils": "^6.3.2" 3117 + }, 3118 + "peerDependencies": { 3119 + "solid-js": "^1.6.12" 3120 + } 3121 + }, 3122 + "node_modules/@solid-primitives/media": { 3123 + "version": "2.3.3", 3124 + "resolved": "https://registry.npmjs.org/@solid-primitives/media/-/media-2.3.3.tgz", 3125 + "integrity": "sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==", 3126 + "dev": true, 3127 + "license": "MIT", 3128 + "dependencies": { 3129 + "@solid-primitives/event-listener": "^2.4.3", 3130 + "@solid-primitives/rootless": "^1.5.2", 3131 + "@solid-primitives/static-store": "^0.1.2", 3132 + "@solid-primitives/utils": "^6.3.2" 3133 + }, 3134 + "peerDependencies": { 3135 + "solid-js": "^1.6.12" 3136 + } 3137 + }, 3138 + "node_modules/@solid-primitives/props": { 3139 + "version": "3.2.2", 3140 + "resolved": "https://registry.npmjs.org/@solid-primitives/props/-/props-3.2.2.tgz", 3141 + "integrity": "sha512-lZOTwFJajBrshSyg14nBMEP0h8MXzPowGO0s3OeiR3z6nXHTfj0FhzDtJMv+VYoRJKQHG2QRnJTgCzK6erARAw==", 3142 + "license": "MIT", 3143 + "dependencies": { 3144 + "@solid-primitives/utils": "^6.3.2" 3145 + }, 3146 + "peerDependencies": { 3147 + "solid-js": "^1.6.12" 3148 + } 3149 + }, 3150 + "node_modules/@solid-primitives/refs": { 3151 + "version": "1.1.2", 3152 + "resolved": "https://registry.npmjs.org/@solid-primitives/refs/-/refs-1.1.2.tgz", 3153 + "integrity": "sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==", 3154 + "license": "MIT", 3155 + "dependencies": { 3156 + "@solid-primitives/utils": "^6.3.2" 3157 + }, 3158 + "peerDependencies": { 3159 + "solid-js": "^1.6.12" 3160 + } 3161 + }, 3162 + "node_modules/@solid-primitives/resize-observer": { 3163 + "version": "2.1.3", 3164 + "resolved": "https://registry.npmjs.org/@solid-primitives/resize-observer/-/resize-observer-2.1.3.tgz", 3165 + "integrity": "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==", 3166 + "dev": true, 3167 + "license": "MIT", 3168 + "dependencies": { 3169 + "@solid-primitives/event-listener": "^2.4.3", 3170 + "@solid-primitives/rootless": "^1.5.2", 3171 + "@solid-primitives/static-store": "^0.1.2", 3172 + "@solid-primitives/utils": "^6.3.2" 3173 + }, 3174 + "peerDependencies": { 3175 + "solid-js": "^1.6.12" 3176 + } 3177 + }, 3178 + "node_modules/@solid-primitives/rootless": { 3179 + "version": "1.5.2", 3180 + "resolved": "https://registry.npmjs.org/@solid-primitives/rootless/-/rootless-1.5.2.tgz", 3181 + "integrity": "sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==", 3182 + "dev": true, 3183 + "license": "MIT", 3184 + "dependencies": { 3185 + "@solid-primitives/utils": "^6.3.2" 3186 + }, 3187 + "peerDependencies": { 3188 + "solid-js": "^1.6.12" 3189 + } 3190 + }, 3191 + "node_modules/@solid-primitives/scheduled": { 3192 + "version": "1.5.2", 3193 + "resolved": "https://registry.npmjs.org/@solid-primitives/scheduled/-/scheduled-1.5.2.tgz", 3194 + "integrity": "sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==", 3195 + "dev": true, 3196 + "license": "MIT", 3197 + "peerDependencies": { 3198 + "solid-js": "^1.6.12" 3199 + } 3200 + }, 3201 + "node_modules/@solid-primitives/static-store": { 3202 + "version": "0.1.2", 3203 + "resolved": "https://registry.npmjs.org/@solid-primitives/static-store/-/static-store-0.1.2.tgz", 3204 + "integrity": "sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==", 3205 + "dev": true, 3206 + "license": "MIT", 3207 + "dependencies": { 3208 + "@solid-primitives/utils": "^6.3.2" 3209 + }, 3210 + "peerDependencies": { 3211 + "solid-js": "^1.6.12" 3212 + } 3213 + }, 3214 + "node_modules/@solid-primitives/styles": { 3215 + "version": "0.1.2", 3216 + "resolved": "https://registry.npmjs.org/@solid-primitives/styles/-/styles-0.1.2.tgz", 3217 + "integrity": "sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==", 3218 + "dev": true, 3219 + "license": "MIT", 3220 + "dependencies": { 3221 + "@solid-primitives/rootless": "^1.5.2", 3222 + "@solid-primitives/utils": "^6.3.2" 3223 + }, 3224 + "peerDependencies": { 3225 + "solid-js": "^1.6.12" 3226 + } 3227 + }, 3228 + "node_modules/@solid-primitives/transition-group": { 3229 + "version": "1.1.2", 3230 + "resolved": "https://registry.npmjs.org/@solid-primitives/transition-group/-/transition-group-1.1.2.tgz", 3231 + "integrity": "sha512-gnHS0OmcdjeoHN9n7Khu8KNrOlRc8a2weETDt2YT6o1zeW/XtUC6Db3Q9pkMU/9cCKdEmN4b0a/41MKAHRhzWA==", 3232 + "license": "MIT", 3233 + "peerDependencies": { 3234 + "solid-js": "^1.6.12" 3235 + } 3236 + }, 3237 + "node_modules/@solid-primitives/utils": { 3238 + "version": "6.3.2", 3239 + "resolved": "https://registry.npmjs.org/@solid-primitives/utils/-/utils-6.3.2.tgz", 3240 + "integrity": "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==", 3241 + "license": "MIT", 3242 + "peerDependencies": { 3243 + "solid-js": "^1.6.12" 3244 + } 3245 + }, 4193 3246 "node_modules/@tailwindcss/node": { 4194 3247 "version": "4.1.16", 4195 3248 "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.16.tgz", ··· 4447 3500 "vite": "^5.2.0 || ^6 || ^7" 4448 3501 } 4449 3502 }, 4450 - "node_modules/@testing-library/dom": { 4451 - "version": "10.4.1", 4452 - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", 4453 - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", 4454 - "dev": true, 4455 - "license": "MIT", 4456 - "peer": true, 4457 - "dependencies": { 4458 - "@babel/code-frame": "^7.10.4", 4459 - "@babel/runtime": "^7.12.5", 4460 - "@types/aria-query": "^5.0.1", 4461 - "aria-query": "5.3.0", 4462 - "dom-accessibility-api": "^0.5.9", 4463 - "lz-string": "^1.5.0", 4464 - "picocolors": "1.1.1", 4465 - "pretty-format": "^27.0.2" 4466 - }, 4467 - "engines": { 4468 - "node": ">=18" 4469 - } 4470 - }, 4471 3503 "node_modules/@testing-library/jest-dom": { 4472 3504 "version": "6.9.1", 4473 3505 "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", ··· 4495 3527 "dev": true, 4496 3528 "license": "MIT" 4497 3529 }, 4498 - "node_modules/@testing-library/react": { 4499 - "version": "16.3.0", 4500 - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", 4501 - "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", 4502 - "dev": true, 4503 - "license": "MIT", 4504 - "dependencies": { 4505 - "@babel/runtime": "^7.12.5" 4506 - }, 4507 - "engines": { 4508 - "node": ">=18" 4509 - }, 4510 - "peerDependencies": { 4511 - "@testing-library/dom": "^10.0.0", 4512 - "@types/react": "^18.0.0 || ^19.0.0", 4513 - "@types/react-dom": "^18.0.0 || ^19.0.0", 4514 - "react": "^18.0.0 || ^19.0.0", 4515 - "react-dom": "^18.0.0 || ^19.0.0" 4516 - }, 4517 - "peerDependenciesMeta": { 4518 - "@types/react": { 4519 - "optional": true 4520 - }, 4521 - "@types/react-dom": { 4522 - "optional": true 4523 - } 4524 - } 4525 - }, 4526 3530 "node_modules/@thaunknown/simple-peer": { 4527 3531 "version": "10.0.12", 4528 3532 "resolved": "https://registry.npmjs.org/@thaunknown/simple-peer/-/simple-peer-10.0.12.tgz", ··· 4633 3637 "version": "7.2.5", 4634 3638 "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz", 4635 3639 "integrity": "sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg==", 4636 - "dev": true, 4637 - "license": "MIT" 4638 - }, 4639 - "node_modules/@types/aria-query": { 4640 - "version": "5.0.4", 4641 - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", 4642 - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", 4643 3640 "dev": true, 4644 3641 "license": "MIT" 4645 3642 }, ··· 4973 3970 "dev": true, 4974 3971 "license": "MIT" 4975 3972 }, 4976 - "node_modules/@types/react": { 4977 - "version": "19.2.2", 4978 - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", 4979 - "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", 4980 - "devOptional": true, 4981 - "license": "MIT", 4982 - "peer": true, 4983 - "dependencies": { 4984 - "csstype": "^3.0.2" 4985 - } 4986 - }, 4987 - "node_modules/@types/react-dom": { 4988 - "version": "19.2.2", 4989 - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", 4990 - "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", 4991 - "devOptional": true, 4992 - "license": "MIT", 4993 - "peer": true, 4994 - "peerDependencies": { 4995 - "@types/react": "^19.2.0" 4996 - } 4997 - }, 4998 3973 "node_modules/@types/send": { 4999 3974 "version": "1.2.1", 5000 3975 "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", ··· 5025 4000 "license": "MIT", 5026 4001 "dependencies": { 5027 4002 "@types/mime": "^1", 5028 - "@types/node": "*" 5029 - } 5030 - }, 5031 - "node_modules/@types/simple-peer": { 5032 - "version": "9.11.9", 5033 - "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.9.tgz", 5034 - "integrity": "sha512-6Gdl7TSS5oh9nuwKD4Pl8cSmaxWycYeZz9HLnJBNvIwWjZuGVsmHe9RwW3+9RxfhC1aIR9Z83DvaJoMw6rhkbg==", 5035 - "dev": true, 5036 - "license": "MIT", 5037 - "dependencies": { 5038 4003 "@types/node": "*" 5039 4004 } 5040 4005 }, ··· 5608 4573 "win32" 5609 4574 ] 5610 4575 }, 5611 - "node_modules/@use-gesture/core": { 5612 - "version": "10.3.1", 5613 - "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", 5614 - "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", 5615 - "license": "MIT" 5616 - }, 5617 - "node_modules/@use-gesture/react": { 5618 - "version": "10.3.1", 5619 - "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", 5620 - "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", 5621 - "license": "MIT", 5622 - "dependencies": { 5623 - "@use-gesture/core": "10.3.1" 5624 - }, 5625 - "peerDependencies": { 5626 - "react": ">= 16.8.0" 5627 - } 5628 - }, 5629 - "node_modules/@vitejs/plugin-react": { 5630 - "version": "5.1.0", 5631 - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.0.tgz", 5632 - "integrity": "sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==", 5633 - "dev": true, 5634 - "license": "MIT", 5635 - "dependencies": { 5636 - "@babel/core": "^7.28.4", 5637 - "@babel/plugin-transform-react-jsx-self": "^7.27.1", 5638 - "@babel/plugin-transform-react-jsx-source": "^7.27.1", 5639 - "@rolldown/pluginutils": "1.0.0-beta.43", 5640 - "@types/babel__core": "^7.20.5", 5641 - "react-refresh": "^0.18.0" 5642 - }, 5643 - "engines": { 5644 - "node": "^20.19.0 || >=22.12.0" 5645 - }, 5646 - "peerDependencies": { 5647 - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" 5648 - } 5649 - }, 5650 - "node_modules/@vitejs/plugin-react/node_modules/react-refresh": { 5651 - "version": "0.18.0", 5652 - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", 5653 - "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", 5654 - "dev": true, 5655 - "license": "MIT", 5656 - "engines": { 5657 - "node": ">=0.10.0" 5658 - } 5659 - }, 5660 4576 "node_modules/@webtorrent/http-node": { 5661 4577 "version": "1.3.0", 5662 4578 "resolved": "https://registry.npmjs.org/@webtorrent/http-node/-/http-node-1.3.0.tgz", ··· 5886 4802 "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 5887 4803 } 5888 4804 }, 5889 - "node_modules/arg": { 5890 - "version": "5.0.2", 5891 - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 5892 - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 5893 - "dev": true, 5894 - "license": "MIT" 5895 - }, 5896 4805 "node_modules/argparse": { 5897 4806 "version": "2.0.1", 5898 4807 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", ··· 5907 4816 "dev": true, 5908 4817 "license": "WTFPL" 5909 4818 }, 5910 - "node_modules/aria-hidden": { 5911 - "version": "1.2.6", 5912 - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", 5913 - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", 5914 - "license": "MIT", 5915 - "dependencies": { 5916 - "tslib": "^2.0.0" 5917 - }, 5918 - "engines": { 5919 - "node": ">=10" 5920 - } 5921 - }, 5922 4819 "node_modules/aria-query": { 5923 4820 "version": "5.3.0", 5924 4821 "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", ··· 5929 4826 "dequal": "^2.0.3" 5930 4827 } 5931 4828 }, 5932 - "node_modules/array-buffer-byte-length": { 5933 - "version": "1.0.2", 5934 - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", 5935 - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", 5936 - "dev": true, 5937 - "license": "MIT", 5938 - "dependencies": { 5939 - "call-bound": "^1.0.3", 5940 - "is-array-buffer": "^3.0.5" 5941 - }, 5942 - "engines": { 5943 - "node": ">= 0.4" 5944 - }, 5945 - "funding": { 5946 - "url": "https://github.com/sponsors/ljharb" 5947 - } 5948 - }, 5949 - "node_modules/array-includes": { 5950 - "version": "3.1.9", 5951 - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", 5952 - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", 5953 - "dev": true, 5954 - "license": "MIT", 5955 - "dependencies": { 5956 - "call-bind": "^1.0.8", 5957 - "call-bound": "^1.0.4", 5958 - "define-properties": "^1.2.1", 5959 - "es-abstract": "^1.24.0", 5960 - "es-object-atoms": "^1.1.1", 5961 - "get-intrinsic": "^1.3.0", 5962 - "is-string": "^1.1.1", 5963 - "math-intrinsics": "^1.1.0" 5964 - }, 5965 - "engines": { 5966 - "node": ">= 0.4" 5967 - }, 5968 - "funding": { 5969 - "url": "https://github.com/sponsors/ljharb" 5970 - } 5971 - }, 5972 - "node_modules/array.prototype.findlast": { 5973 - "version": "1.2.5", 5974 - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", 5975 - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", 5976 - "dev": true, 5977 - "license": "MIT", 5978 - "dependencies": { 5979 - "call-bind": "^1.0.7", 5980 - "define-properties": "^1.2.1", 5981 - "es-abstract": "^1.23.2", 5982 - "es-errors": "^1.3.0", 5983 - "es-object-atoms": "^1.0.0", 5984 - "es-shim-unscopables": "^1.0.2" 5985 - }, 5986 - "engines": { 5987 - "node": ">= 0.4" 5988 - }, 5989 - "funding": { 5990 - "url": "https://github.com/sponsors/ljharb" 5991 - } 5992 - }, 5993 - "node_modules/array.prototype.flat": { 5994 - "version": "1.3.3", 5995 - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", 5996 - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", 5997 - "dev": true, 5998 - "license": "MIT", 5999 - "dependencies": { 6000 - "call-bind": "^1.0.8", 6001 - "define-properties": "^1.2.1", 6002 - "es-abstract": "^1.23.5", 6003 - "es-shim-unscopables": "^1.0.2" 6004 - }, 6005 - "engines": { 6006 - "node": ">= 0.4" 6007 - }, 6008 - "funding": { 6009 - "url": "https://github.com/sponsors/ljharb" 6010 - } 6011 - }, 6012 - "node_modules/array.prototype.flatmap": { 6013 - "version": "1.3.3", 6014 - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", 6015 - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", 6016 - "dev": true, 6017 - "license": "MIT", 6018 - "dependencies": { 6019 - "call-bind": "^1.0.8", 6020 - "define-properties": "^1.2.1", 6021 - "es-abstract": "^1.23.5", 6022 - "es-shim-unscopables": "^1.0.2" 6023 - }, 6024 - "engines": { 6025 - "node": ">= 0.4" 6026 - }, 6027 - "funding": { 6028 - "url": "https://github.com/sponsors/ljharb" 6029 - } 6030 - }, 6031 - "node_modules/array.prototype.tosorted": { 6032 - "version": "1.1.4", 6033 - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", 6034 - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", 6035 - "dev": true, 6036 - "license": "MIT", 6037 - "dependencies": { 6038 - "call-bind": "^1.0.7", 6039 - "define-properties": "^1.2.1", 6040 - "es-abstract": "^1.23.3", 6041 - "es-errors": "^1.3.0", 6042 - "es-shim-unscopables": "^1.0.2" 6043 - }, 6044 - "engines": { 6045 - "node": ">= 0.4" 6046 - } 6047 - }, 6048 - "node_modules/arraybuffer.prototype.slice": { 6049 - "version": "1.0.4", 6050 - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", 6051 - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", 6052 - "dev": true, 6053 - "license": "MIT", 6054 - "dependencies": { 6055 - "array-buffer-byte-length": "^1.0.1", 6056 - "call-bind": "^1.0.8", 6057 - "define-properties": "^1.2.1", 6058 - "es-abstract": "^1.23.5", 6059 - "es-errors": "^1.3.0", 6060 - "get-intrinsic": "^1.2.6", 6061 - "is-array-buffer": "^3.0.4" 6062 - }, 6063 - "engines": { 6064 - "node": ">= 0.4" 6065 - }, 6066 - "funding": { 6067 - "url": "https://github.com/sponsors/ljharb" 6068 - } 6069 - }, 6070 4829 "node_modules/asn1.js": { 6071 4830 "version": "4.10.1", 6072 4831 "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", ··· 6100 4859 "util": "^0.12.5" 6101 4860 } 6102 4861 }, 6103 - "node_modules/async-function": { 6104 - "version": "1.0.0", 6105 - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", 6106 - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", 6107 - "dev": true, 6108 - "license": "MIT", 6109 - "engines": { 6110 - "node": ">= 0.4" 6111 - } 6112 - }, 6113 4862 "node_modules/available-typed-arrays": { 6114 4863 "version": "1.0.7", 6115 4864 "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", ··· 6138 4887 "react-native-b4a": { 6139 4888 "optional": true 6140 4889 } 6141 - } 6142 - }, 6143 - "node_modules/babel-dead-code-elimination": { 6144 - "version": "1.0.10", 6145 - "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.10.tgz", 6146 - "integrity": "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==", 6147 - "dev": true, 6148 - "license": "MIT", 6149 - "dependencies": { 6150 - "@babel/core": "^7.23.7", 6151 - "@babel/parser": "^7.23.6", 6152 - "@babel/traverse": "^7.23.7", 6153 - "@babel/types": "^7.23.6" 6154 4890 } 6155 4891 }, 6156 4892 "node_modules/babel-jest": { ··· 6208 4944 "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" 6209 4945 } 6210 4946 }, 4947 + "node_modules/babel-plugin-jsx-dom-expressions": { 4948 + "version": "0.40.3", 4949 + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.40.3.tgz", 4950 + "integrity": "sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==", 4951 + "dev": true, 4952 + "license": "MIT", 4953 + "dependencies": { 4954 + "@babel/helper-module-imports": "7.18.6", 4955 + "@babel/plugin-syntax-jsx": "^7.18.6", 4956 + "@babel/types": "^7.20.7", 4957 + "html-entities": "2.3.3", 4958 + "parse5": "^7.1.2" 4959 + }, 4960 + "peerDependencies": { 4961 + "@babel/core": "^7.20.12" 4962 + } 4963 + }, 4964 + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { 4965 + "version": "7.18.6", 4966 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", 4967 + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 4968 + "dev": true, 4969 + "license": "MIT", 4970 + "dependencies": { 4971 + "@babel/types": "^7.18.6" 4972 + }, 4973 + "engines": { 4974 + "node": ">=6.9.0" 4975 + } 4976 + }, 6211 4977 "node_modules/babel-preset-current-node-syntax": { 6212 4978 "version": "1.2.0", 6213 4979 "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", ··· 6252 5018 "@babel/core": "^7.11.0 || ^8.0.0-beta.1" 6253 5019 } 6254 5020 }, 5021 + "node_modules/babel-preset-solid": { 5022 + "version": "1.9.10", 5023 + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.9.10.tgz", 5024 + "integrity": "sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==", 5025 + "dev": true, 5026 + "license": "MIT", 5027 + "dependencies": { 5028 + "babel-plugin-jsx-dom-expressions": "^0.40.3" 5029 + }, 5030 + "peerDependencies": { 5031 + "@babel/core": "^7.0.0", 5032 + "solid-js": "^1.9.10" 5033 + }, 5034 + "peerDependenciesMeta": { 5035 + "solid-js": { 5036 + "optional": true 5037 + } 5038 + } 5039 + }, 6255 5040 "node_modules/balanced-match": { 6256 5041 "version": "1.0.2", 6257 5042 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 7075 5860 "license": "MIT", 7076 5861 "engines": { 7077 5862 "node": ">= 0.8" 7078 - } 7079 - }, 7080 - "node_modules/cac": { 7081 - "version": "6.7.14", 7082 - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 7083 - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 7084 - "dev": true, 7085 - "license": "MIT", 7086 - "engines": { 7087 - "node": ">=8" 7088 5863 } 7089 5864 }, 7090 5865 "node_modules/cacache": { ··· 7534 6309 "dev": true, 7535 6310 "license": "MIT" 7536 6311 }, 7537 - "node_modules/class-variance-authority": { 7538 - "version": "0.7.1", 7539 - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", 7540 - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", 7541 - "license": "Apache-2.0", 7542 - "dependencies": { 7543 - "clsx": "^2.1.1" 7544 - }, 7545 - "funding": { 7546 - "url": "https://polar.sh/cva" 7547 - } 7548 - }, 7549 6312 "node_modules/classic-level": { 7550 6313 "version": "3.0.0", 7551 6314 "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-3.0.0.tgz", ··· 8035 6798 "version": "3.1.3", 8036 6799 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 8037 6800 "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 8038 - "devOptional": true, 8039 6801 "license": "MIT" 8040 6802 }, 8041 6803 "node_modules/data-uri-to-buffer": { ··· 8061 6823 "node": ">=18" 8062 6824 } 8063 6825 }, 8064 - "node_modules/data-view-buffer": { 8065 - "version": "1.0.2", 8066 - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", 8067 - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", 8068 - "dev": true, 8069 - "license": "MIT", 8070 - "dependencies": { 8071 - "call-bound": "^1.0.3", 8072 - "es-errors": "^1.3.0", 8073 - "is-data-view": "^1.0.2" 8074 - }, 8075 - "engines": { 8076 - "node": ">= 0.4" 8077 - }, 8078 - "funding": { 8079 - "url": "https://github.com/sponsors/ljharb" 8080 - } 8081 - }, 8082 - "node_modules/data-view-byte-length": { 8083 - "version": "1.0.2", 8084 - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", 8085 - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", 8086 - "dev": true, 8087 - "license": "MIT", 8088 - "dependencies": { 8089 - "call-bound": "^1.0.3", 8090 - "es-errors": "^1.3.0", 8091 - "is-data-view": "^1.0.2" 8092 - }, 8093 - "engines": { 8094 - "node": ">= 0.4" 8095 - }, 8096 - "funding": { 8097 - "url": "https://github.com/sponsors/inspect-js" 8098 - } 8099 - }, 8100 - "node_modules/data-view-byte-offset": { 8101 - "version": "1.0.1", 8102 - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", 8103 - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", 8104 - "dev": true, 8105 - "license": "MIT", 8106 - "dependencies": { 8107 - "call-bound": "^1.0.2", 8108 - "es-errors": "^1.3.0", 8109 - "is-data-view": "^1.0.1" 8110 - }, 8111 - "engines": { 8112 - "node": ">= 0.4" 8113 - }, 8114 - "funding": { 8115 - "url": "https://github.com/sponsors/ljharb" 8116 - } 8117 - }, 8118 6826 "node_modules/debug": { 8119 6827 "version": "4.4.3", 8120 6828 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", ··· 8430 7138 "node": ">=8" 8431 7139 } 8432 7140 }, 8433 - "node_modules/detect-node-es": { 8434 - "version": "1.1.0", 8435 - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", 8436 - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", 8437 - "license": "MIT" 8438 - }, 8439 7141 "node_modules/devlop": { 8440 7142 "version": "1.1.0", 8441 7143 "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", ··· 8485 7187 "dev": true, 8486 7188 "license": "MIT" 8487 7189 }, 8488 - "node_modules/doctrine": { 8489 - "version": "2.1.0", 8490 - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 8491 - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 8492 - "dev": true, 8493 - "license": "Apache-2.0", 8494 - "dependencies": { 8495 - "esutils": "^2.0.2" 8496 - }, 8497 - "engines": { 8498 - "node": ">=0.10.0" 8499 - } 8500 - }, 8501 - "node_modules/dom-accessibility-api": { 8502 - "version": "0.5.16", 8503 - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", 8504 - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", 8505 - "dev": true, 8506 - "license": "MIT" 8507 - }, 8508 7190 "node_modules/dom-serializer": { 8509 7191 "version": "2.0.0", 8510 7192 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", ··· 8742 7424 "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", 8743 7425 "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", 8744 7426 "dev": true, 8745 - "license": "MIT" 7427 + "license": "MIT", 7428 + "optional": true 8746 7429 }, 8747 7430 "node_modules/error-ex": { 8748 7431 "version": "1.3.4", ··· 8754 7437 "is-arrayish": "^0.2.1" 8755 7438 } 8756 7439 }, 8757 - "node_modules/es-abstract": { 8758 - "version": "1.24.0", 8759 - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", 8760 - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", 8761 - "dev": true, 8762 - "license": "MIT", 8763 - "dependencies": { 8764 - "array-buffer-byte-length": "^1.0.2", 8765 - "arraybuffer.prototype.slice": "^1.0.4", 8766 - "available-typed-arrays": "^1.0.7", 8767 - "call-bind": "^1.0.8", 8768 - "call-bound": "^1.0.4", 8769 - "data-view-buffer": "^1.0.2", 8770 - "data-view-byte-length": "^1.0.2", 8771 - "data-view-byte-offset": "^1.0.1", 8772 - "es-define-property": "^1.0.1", 8773 - "es-errors": "^1.3.0", 8774 - "es-object-atoms": "^1.1.1", 8775 - "es-set-tostringtag": "^2.1.0", 8776 - "es-to-primitive": "^1.3.0", 8777 - "function.prototype.name": "^1.1.8", 8778 - "get-intrinsic": "^1.3.0", 8779 - "get-proto": "^1.0.1", 8780 - "get-symbol-description": "^1.1.0", 8781 - "globalthis": "^1.0.4", 8782 - "gopd": "^1.2.0", 8783 - "has-property-descriptors": "^1.0.2", 8784 - "has-proto": "^1.2.0", 8785 - "has-symbols": "^1.1.0", 8786 - "hasown": "^2.0.2", 8787 - "internal-slot": "^1.1.0", 8788 - "is-array-buffer": "^3.0.5", 8789 - "is-callable": "^1.2.7", 8790 - "is-data-view": "^1.0.2", 8791 - "is-negative-zero": "^2.0.3", 8792 - "is-regex": "^1.2.1", 8793 - "is-set": "^2.0.3", 8794 - "is-shared-array-buffer": "^1.0.4", 8795 - "is-string": "^1.1.1", 8796 - "is-typed-array": "^1.1.15", 8797 - "is-weakref": "^1.1.1", 8798 - "math-intrinsics": "^1.1.0", 8799 - "object-inspect": "^1.13.4", 8800 - "object-keys": "^1.1.1", 8801 - "object.assign": "^4.1.7", 8802 - "own-keys": "^1.0.1", 8803 - "regexp.prototype.flags": "^1.5.4", 8804 - "safe-array-concat": "^1.1.3", 8805 - "safe-push-apply": "^1.0.0", 8806 - "safe-regex-test": "^1.1.0", 8807 - "set-proto": "^1.0.0", 8808 - "stop-iteration-iterator": "^1.1.0", 8809 - "string.prototype.trim": "^1.2.10", 8810 - "string.prototype.trimend": "^1.0.9", 8811 - "string.prototype.trimstart": "^1.0.8", 8812 - "typed-array-buffer": "^1.0.3", 8813 - "typed-array-byte-length": "^1.0.3", 8814 - "typed-array-byte-offset": "^1.0.4", 8815 - "typed-array-length": "^1.0.7", 8816 - "unbox-primitive": "^1.1.0", 8817 - "which-typed-array": "^1.1.19" 8818 - }, 8819 - "engines": { 8820 - "node": ">= 0.4" 8821 - }, 8822 - "funding": { 8823 - "url": "https://github.com/sponsors/ljharb" 8824 - } 8825 - }, 8826 7440 "node_modules/es-define-property": { 8827 7441 "version": "1.0.1", 8828 7442 "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", ··· 8841 7455 "node": ">= 0.4" 8842 7456 } 8843 7457 }, 8844 - "node_modules/es-iterator-helpers": { 8845 - "version": "1.2.1", 8846 - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", 8847 - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", 8848 - "dev": true, 8849 - "license": "MIT", 8850 - "dependencies": { 8851 - "call-bind": "^1.0.8", 8852 - "call-bound": "^1.0.3", 8853 - "define-properties": "^1.2.1", 8854 - "es-abstract": "^1.23.6", 8855 - "es-errors": "^1.3.0", 8856 - "es-set-tostringtag": "^2.0.3", 8857 - "function-bind": "^1.1.2", 8858 - "get-intrinsic": "^1.2.6", 8859 - "globalthis": "^1.0.4", 8860 - "gopd": "^1.2.0", 8861 - "has-property-descriptors": "^1.0.2", 8862 - "has-proto": "^1.2.0", 8863 - "has-symbols": "^1.1.0", 8864 - "internal-slot": "^1.1.0", 8865 - "iterator.prototype": "^1.1.4", 8866 - "safe-array-concat": "^1.1.3" 8867 - }, 8868 - "engines": { 8869 - "node": ">= 0.4" 8870 - } 8871 - }, 8872 - "node_modules/es-module-lexer": { 8873 - "version": "1.7.0", 8874 - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", 8875 - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", 8876 - "dev": true, 8877 - "license": "MIT" 8878 - }, 8879 7458 "node_modules/es-object-atoms": { 8880 7459 "version": "1.1.1", 8881 7460 "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", ··· 8888 7467 "node": ">= 0.4" 8889 7468 } 8890 7469 }, 8891 - "node_modules/es-set-tostringtag": { 8892 - "version": "2.1.0", 8893 - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 8894 - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 8895 - "dev": true, 8896 - "license": "MIT", 8897 - "dependencies": { 8898 - "es-errors": "^1.3.0", 8899 - "get-intrinsic": "^1.2.6", 8900 - "has-tostringtag": "^1.0.2", 8901 - "hasown": "^2.0.2" 8902 - }, 8903 - "engines": { 8904 - "node": ">= 0.4" 8905 - } 8906 - }, 8907 - "node_modules/es-shim-unscopables": { 8908 - "version": "1.1.0", 8909 - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", 8910 - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", 8911 - "dev": true, 8912 - "license": "MIT", 8913 - "dependencies": { 8914 - "hasown": "^2.0.2" 8915 - }, 8916 - "engines": { 8917 - "node": ">= 0.4" 8918 - } 8919 - }, 8920 - "node_modules/es-to-primitive": { 8921 - "version": "1.3.0", 8922 - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", 8923 - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", 8924 - "dev": true, 8925 - "license": "MIT", 8926 - "dependencies": { 8927 - "is-callable": "^1.2.7", 8928 - "is-date-object": "^1.0.5", 8929 - "is-symbol": "^1.0.4" 8930 - }, 8931 - "engines": { 8932 - "node": ">= 0.4" 8933 - }, 8934 - "funding": { 8935 - "url": "https://github.com/sponsors/ljharb" 8936 - } 8937 - }, 8938 7470 "node_modules/esbuild": { 8939 7471 "version": "0.25.12", 8940 7472 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", ··· 9114 7646 } 9115 7647 } 9116 7648 }, 9117 - "node_modules/eslint-plugin-react": { 9118 - "version": "7.37.5", 9119 - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", 9120 - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", 7649 + "node_modules/eslint-plugin-solid": { 7650 + "version": "0.14.5", 7651 + "resolved": "https://registry.npmjs.org/eslint-plugin-solid/-/eslint-plugin-solid-0.14.5.tgz", 7652 + "integrity": "sha512-nfuYK09ah5aJG/oEN6P1qziy1zLgW4PDWe75VNPi4CEFYk1x2AEqwFeQfEPR7gNn0F2jOeqKhx2E+5oNCOBYWQ==", 9121 7653 "dev": true, 9122 7654 "license": "MIT", 9123 7655 "dependencies": { 9124 - "array-includes": "^3.1.8", 9125 - "array.prototype.findlast": "^1.2.5", 9126 - "array.prototype.flatmap": "^1.3.3", 9127 - "array.prototype.tosorted": "^1.1.4", 9128 - "doctrine": "^2.1.0", 9129 - "es-iterator-helpers": "^1.2.1", 7656 + "@typescript-eslint/utils": "^7.13.1 || ^8.0.0", 9130 7657 "estraverse": "^5.3.0", 9131 - "hasown": "^2.0.2", 9132 - "jsx-ast-utils": "^2.4.1 || ^3.0.0", 9133 - "minimatch": "^3.1.2", 9134 - "object.entries": "^1.1.9", 9135 - "object.fromentries": "^2.0.8", 9136 - "object.values": "^1.2.1", 9137 - "prop-types": "^15.8.1", 9138 - "resolve": "^2.0.0-next.5", 9139 - "semver": "^6.3.1", 9140 - "string.prototype.matchall": "^4.0.12", 9141 - "string.prototype.repeat": "^1.0.0" 7658 + "is-html": "^2.0.0", 7659 + "kebab-case": "^1.0.2", 7660 + "known-css-properties": "^0.30.0", 7661 + "style-to-object": "^1.0.6" 9142 7662 }, 9143 7663 "engines": { 9144 - "node": ">=4" 7664 + "node": ">=18.0.0" 9145 7665 }, 9146 7666 "peerDependencies": { 9147 - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" 9148 - } 9149 - }, 9150 - "node_modules/eslint-plugin-react-hooks": { 9151 - "version": "5.2.0", 9152 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", 9153 - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", 9154 - "dev": true, 9155 - "license": "MIT", 9156 - "engines": { 9157 - "node": ">=10" 9158 - }, 9159 - "peerDependencies": { 9160 - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 9161 - } 9162 - }, 9163 - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { 9164 - "version": "1.1.12", 9165 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 9166 - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 9167 - "dev": true, 9168 - "license": "MIT", 9169 - "dependencies": { 9170 - "balanced-match": "^1.0.0", 9171 - "concat-map": "0.0.1" 9172 - } 9173 - }, 9174 - "node_modules/eslint-plugin-react/node_modules/minimatch": { 9175 - "version": "3.1.2", 9176 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 9177 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 9178 - "dev": true, 9179 - "license": "ISC", 9180 - "dependencies": { 9181 - "brace-expansion": "^1.1.7" 9182 - }, 9183 - "engines": { 9184 - "node": "*" 7667 + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", 7668 + "typescript": ">=4.8.4" 9185 7669 } 9186 7670 }, 9187 7671 "node_modules/eslint-plugin-tsdoc": { ··· 9453 7937 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 9454 7938 "dev": true, 9455 7939 "license": "ISC" 9456 - }, 9457 - "node_modules/exit-hook": { 9458 - "version": "2.2.1", 9459 - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", 9460 - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", 9461 - "dev": true, 9462 - "license": "MIT", 9463 - "engines": { 9464 - "node": ">=6" 9465 - }, 9466 - "funding": { 9467 - "url": "https://github.com/sponsors/sindresorhus" 9468 - } 9469 7940 }, 9470 7941 "node_modules/exit-x": { 9471 7942 "version": "0.2.2", ··· 10001 8472 "url": "https://github.com/sponsors/ljharb" 10002 8473 } 10003 8474 }, 10004 - "node_modules/function.prototype.name": { 10005 - "version": "1.1.8", 10006 - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", 10007 - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", 10008 - "dev": true, 10009 - "license": "MIT", 10010 - "dependencies": { 10011 - "call-bind": "^1.0.8", 10012 - "call-bound": "^1.0.3", 10013 - "define-properties": "^1.2.1", 10014 - "functions-have-names": "^1.2.3", 10015 - "hasown": "^2.0.2", 10016 - "is-callable": "^1.2.7" 10017 - }, 10018 - "engines": { 10019 - "node": ">= 0.4" 10020 - }, 10021 - "funding": { 10022 - "url": "https://github.com/sponsors/ljharb" 10023 - } 10024 - }, 10025 - "node_modules/functions-have-names": { 10026 - "version": "1.2.3", 10027 - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 10028 - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 10029 - "dev": true, 10030 - "license": "MIT", 10031 - "funding": { 10032 - "url": "https://github.com/sponsors/ljharb" 10033 - } 10034 - }, 10035 8475 "node_modules/gauge": { 10036 8476 "version": "4.0.4", 10037 8477 "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", ··· 10120 8560 "node": ">=6.9.0" 10121 8561 } 10122 8562 }, 10123 - "node_modules/get-browser-rtc": { 10124 - "version": "1.1.0", 10125 - "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", 10126 - "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==", 10127 - "license": "MIT" 10128 - }, 10129 8563 "node_modules/get-caller-file": { 10130 8564 "version": "2.0.5", 10131 8565 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", ··· 10160 8594 "url": "https://github.com/sponsors/ljharb" 10161 8595 } 10162 8596 }, 10163 - "node_modules/get-nonce": { 10164 - "version": "1.0.1", 10165 - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", 10166 - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", 10167 - "license": "MIT", 10168 - "engines": { 10169 - "node": ">=6" 10170 - } 10171 - }, 10172 8597 "node_modules/get-package-type": { 10173 8598 "version": "0.1.0", 10174 8599 "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", ··· 10216 8641 "url": "https://github.com/sponsors/sindresorhus" 10217 8642 } 10218 8643 }, 10219 - "node_modules/get-symbol-description": { 10220 - "version": "1.1.0", 10221 - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", 10222 - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", 10223 - "dev": true, 10224 - "license": "MIT", 10225 - "dependencies": { 10226 - "call-bound": "^1.0.3", 10227 - "es-errors": "^1.3.0", 10228 - "get-intrinsic": "^1.2.6" 10229 - }, 10230 - "engines": { 10231 - "node": ">= 0.4" 10232 - }, 10233 - "funding": { 10234 - "url": "https://github.com/sponsors/ljharb" 10235 - } 10236 - }, 10237 8644 "node_modules/get-tsconfig": { 10238 8645 "version": "4.13.0", 10239 8646 "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", ··· 10323 8730 "url": "https://github.com/sponsors/sindresorhus" 10324 8731 } 10325 8732 }, 10326 - "node_modules/globalthis": { 10327 - "version": "1.0.4", 10328 - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", 10329 - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", 10330 - "dev": true, 10331 - "license": "MIT", 10332 - "dependencies": { 10333 - "define-properties": "^1.2.1", 10334 - "gopd": "^1.0.1" 10335 - }, 10336 - "engines": { 10337 - "node": ">= 0.4" 10338 - }, 10339 - "funding": { 10340 - "url": "https://github.com/sponsors/ljharb" 10341 - } 10342 - }, 10343 8733 "node_modules/gopd": { 10344 8734 "version": "1.2.0", 10345 8735 "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", ··· 10394 8784 "dev": true, 10395 8785 "license": "(Apache-2.0 OR MPL-1.1)" 10396 8786 }, 10397 - "node_modules/has-bigints": { 10398 - "version": "1.1.0", 10399 - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", 10400 - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", 10401 - "dev": true, 10402 - "license": "MIT", 10403 - "engines": { 10404 - "node": ">= 0.4" 10405 - }, 10406 - "funding": { 10407 - "url": "https://github.com/sponsors/ljharb" 10408 - } 10409 - }, 10410 8787 "node_modules/has-flag": { 10411 8788 "version": "4.0.0", 10412 8789 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ··· 10425 8802 "license": "MIT", 10426 8803 "dependencies": { 10427 8804 "es-define-property": "^1.0.0" 10428 - }, 10429 - "funding": { 10430 - "url": "https://github.com/sponsors/ljharb" 10431 - } 10432 - }, 10433 - "node_modules/has-proto": { 10434 - "version": "1.2.0", 10435 - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", 10436 - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", 10437 - "dev": true, 10438 - "license": "MIT", 10439 - "dependencies": { 10440 - "dunder-proto": "^1.0.0" 10441 - }, 10442 - "engines": { 10443 - "node": ">= 0.4" 10444 8805 }, 10445 8806 "funding": { 10446 8807 "url": "https://github.com/sponsors/ljharb" ··· 10519 8880 "node": ">= 0.4" 10520 8881 } 10521 8882 }, 8883 + "node_modules/hey-listen": { 8884 + "version": "1.0.8", 8885 + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", 8886 + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", 8887 + "license": "MIT" 8888 + }, 10522 8889 "node_modules/hmac-drbg": { 10523 8890 "version": "1.0.1", 10524 8891 "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", ··· 10531 8898 "minimalistic-crypto-utils": "^1.0.1" 10532 8899 } 10533 8900 }, 10534 - "node_modules/hosted-git-info": { 10535 - "version": "6.1.3", 10536 - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", 10537 - "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", 10538 - "dev": true, 10539 - "license": "ISC", 10540 - "dependencies": { 10541 - "lru-cache": "^7.5.1" 10542 - }, 10543 - "engines": { 10544 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 10545 - } 10546 - }, 10547 - "node_modules/hosted-git-info/node_modules/lru-cache": { 10548 - "version": "7.18.3", 10549 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 10550 - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 10551 - "dev": true, 10552 - "license": "ISC", 10553 - "engines": { 10554 - "node": ">=12" 10555 - } 10556 - }, 10557 8901 "node_modules/html-encoding-sniffer": { 10558 8902 "version": "4.0.0", 10559 8903 "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", ··· 10566 8910 "engines": { 10567 8911 "node": ">=18" 10568 8912 } 8913 + }, 8914 + "node_modules/html-entities": { 8915 + "version": "2.3.3", 8916 + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", 8917 + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", 8918 + "dev": true, 8919 + "license": "MIT" 10569 8920 }, 10570 8921 "node_modules/html-escaper": { 10571 8922 "version": "2.0.2", ··· 10574 8925 "dev": true, 10575 8926 "license": "MIT" 10576 8927 }, 8928 + "node_modules/html-tags": { 8929 + "version": "3.3.1", 8930 + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", 8931 + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", 8932 + "dev": true, 8933 + "license": "MIT", 8934 + "engines": { 8935 + "node": ">=8" 8936 + }, 8937 + "funding": { 8938 + "url": "https://github.com/sponsors/sindresorhus" 8939 + } 8940 + }, 10577 8941 "node_modules/htmlparser2": { 10578 8942 "version": "10.0.0", 10579 8943 "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", ··· 10902 9266 "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 10903 9267 "license": "ISC" 10904 9268 }, 10905 - "node_modules/internal-slot": { 10906 - "version": "1.1.0", 10907 - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", 10908 - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", 9269 + "node_modules/inline-style-parser": { 9270 + "version": "0.2.6", 9271 + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.6.tgz", 9272 + "integrity": "sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==", 10909 9273 "dev": true, 10910 - "license": "MIT", 10911 - "dependencies": { 10912 - "es-errors": "^1.3.0", 10913 - "hasown": "^2.0.2", 10914 - "side-channel": "^1.1.0" 10915 - }, 10916 - "engines": { 10917 - "node": ">= 0.4" 10918 - } 9274 + "license": "MIT" 10919 9275 }, 10920 9276 "node_modules/ip": { 10921 9277 "version": "2.0.1", ··· 10967 9323 "url": "https://github.com/sponsors/ljharb" 10968 9324 } 10969 9325 }, 10970 - "node_modules/is-array-buffer": { 10971 - "version": "3.0.5", 10972 - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", 10973 - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", 10974 - "dev": true, 10975 - "license": "MIT", 10976 - "dependencies": { 10977 - "call-bind": "^1.0.8", 10978 - "call-bound": "^1.0.3", 10979 - "get-intrinsic": "^1.2.6" 10980 - }, 10981 - "engines": { 10982 - "node": ">= 0.4" 10983 - }, 10984 - "funding": { 10985 - "url": "https://github.com/sponsors/ljharb" 10986 - } 10987 - }, 10988 9326 "node_modules/is-arrayish": { 10989 9327 "version": "0.2.1", 10990 9328 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", ··· 10992 9330 "dev": true, 10993 9331 "license": "MIT" 10994 9332 }, 10995 - "node_modules/is-async-function": { 10996 - "version": "2.1.1", 10997 - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", 10998 - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", 10999 - "dev": true, 11000 - "license": "MIT", 11001 - "dependencies": { 11002 - "async-function": "^1.0.0", 11003 - "call-bound": "^1.0.3", 11004 - "get-proto": "^1.0.1", 11005 - "has-tostringtag": "^1.0.2", 11006 - "safe-regex-test": "^1.1.0" 11007 - }, 11008 - "engines": { 11009 - "node": ">= 0.4" 11010 - }, 11011 - "funding": { 11012 - "url": "https://github.com/sponsors/ljharb" 11013 - } 11014 - }, 11015 - "node_modules/is-bigint": { 11016 - "version": "1.1.0", 11017 - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", 11018 - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", 11019 - "dev": true, 11020 - "license": "MIT", 11021 - "dependencies": { 11022 - "has-bigints": "^1.0.2" 11023 - }, 11024 - "engines": { 11025 - "node": ">= 0.4" 11026 - }, 11027 - "funding": { 11028 - "url": "https://github.com/sponsors/ljharb" 11029 - } 11030 - }, 11031 9333 "node_modules/is-binary-path": { 11032 9334 "version": "2.1.0", 11033 9335 "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", ··· 11039 9341 }, 11040 9342 "engines": { 11041 9343 "node": ">=8" 11042 - } 11043 - }, 11044 - "node_modules/is-boolean-object": { 11045 - "version": "1.2.2", 11046 - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", 11047 - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", 11048 - "dev": true, 11049 - "license": "MIT", 11050 - "dependencies": { 11051 - "call-bound": "^1.0.3", 11052 - "has-tostringtag": "^1.0.2" 11053 - }, 11054 - "engines": { 11055 - "node": ">= 0.4" 11056 - }, 11057 - "funding": { 11058 - "url": "https://github.com/sponsors/ljharb" 11059 9344 } 11060 9345 }, 11061 9346 "node_modules/is-buffer": { ··· 11110 9395 "url": "https://github.com/sponsors/ljharb" 11111 9396 } 11112 9397 }, 11113 - "node_modules/is-data-view": { 11114 - "version": "1.0.2", 11115 - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", 11116 - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", 11117 - "dev": true, 11118 - "license": "MIT", 11119 - "dependencies": { 11120 - "call-bound": "^1.0.2", 11121 - "get-intrinsic": "^1.2.6", 11122 - "is-typed-array": "^1.1.13" 11123 - }, 11124 - "engines": { 11125 - "node": ">= 0.4" 11126 - }, 11127 - "funding": { 11128 - "url": "https://github.com/sponsors/ljharb" 11129 - } 11130 - }, 11131 - "node_modules/is-date-object": { 11132 - "version": "1.1.0", 11133 - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", 11134 - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", 11135 - "dev": true, 11136 - "license": "MIT", 11137 - "dependencies": { 11138 - "call-bound": "^1.0.2", 11139 - "has-tostringtag": "^1.0.2" 11140 - }, 11141 - "engines": { 11142 - "node": ">= 0.4" 11143 - }, 11144 - "funding": { 11145 - "url": "https://github.com/sponsors/ljharb" 11146 - } 11147 - }, 11148 9398 "node_modules/is-extglob": { 11149 9399 "version": "2.1.1", 11150 9400 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", ··· 11160 9410 "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", 11161 9411 "integrity": "sha512-ZGMuc+xA8mRnrXtmtf2l/EkIW2zaD2LSBWlaOVEF6yH4RTndHob65V4SwWWdtGKVthQfXPVKsXqw4TDUjbVxVQ==", 11162 9412 "license": "MIT" 11163 - }, 11164 - "node_modules/is-finalizationregistry": { 11165 - "version": "1.1.1", 11166 - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", 11167 - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", 11168 - "dev": true, 11169 - "license": "MIT", 11170 - "dependencies": { 11171 - "call-bound": "^1.0.3" 11172 - }, 11173 - "engines": { 11174 - "node": ">= 0.4" 11175 - }, 11176 - "funding": { 11177 - "url": "https://github.com/sponsors/ljharb" 11178 - } 11179 9413 }, 11180 9414 "node_modules/is-fullwidth-code-point": { 11181 9415 "version": "3.0.0", ··· 11230 9464 "node": ">=0.10.0" 11231 9465 } 11232 9466 }, 9467 + "node_modules/is-html": { 9468 + "version": "2.0.0", 9469 + "resolved": "https://registry.npmjs.org/is-html/-/is-html-2.0.0.tgz", 9470 + "integrity": "sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==", 9471 + "dev": true, 9472 + "license": "MIT", 9473 + "dependencies": { 9474 + "html-tags": "^3.0.0" 9475 + }, 9476 + "engines": { 9477 + "node": ">=8" 9478 + } 9479 + }, 11233 9480 "node_modules/is-lambda": { 11234 9481 "version": "1.0.1", 11235 9482 "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", ··· 11238 9485 "license": "MIT", 11239 9486 "optional": true 11240 9487 }, 11241 - "node_modules/is-map": { 11242 - "version": "2.0.3", 11243 - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", 11244 - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", 11245 - "dev": true, 11246 - "license": "MIT", 11247 - "engines": { 11248 - "node": ">= 0.4" 11249 - }, 11250 - "funding": { 11251 - "url": "https://github.com/sponsors/ljharb" 11252 - } 11253 - }, 11254 9488 "node_modules/is-nan": { 11255 9489 "version": "1.3.2", 11256 9490 "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", ··· 11268 9502 "url": "https://github.com/sponsors/ljharb" 11269 9503 } 11270 9504 }, 11271 - "node_modules/is-negative-zero": { 11272 - "version": "2.0.3", 11273 - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", 11274 - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", 11275 - "dev": true, 11276 - "license": "MIT", 11277 - "engines": { 11278 - "node": ">= 0.4" 11279 - }, 11280 - "funding": { 11281 - "url": "https://github.com/sponsors/ljharb" 11282 - } 11283 - }, 11284 9505 "node_modules/is-number": { 11285 9506 "version": "7.0.0", 11286 9507 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", ··· 11291 9512 "node": ">=0.12.0" 11292 9513 } 11293 9514 }, 11294 - "node_modules/is-number-object": { 11295 - "version": "1.1.1", 11296 - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", 11297 - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", 11298 - "dev": true, 11299 - "license": "MIT", 11300 - "dependencies": { 11301 - "call-bound": "^1.0.3", 11302 - "has-tostringtag": "^1.0.2" 11303 - }, 11304 - "engines": { 11305 - "node": ">= 0.4" 11306 - }, 11307 - "funding": { 11308 - "url": "https://github.com/sponsors/ljharb" 11309 - } 11310 - }, 11311 9515 "node_modules/is-potential-custom-element-name": { 11312 9516 "version": "1.0.1", 11313 9517 "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", ··· 11340 9544 "url": "https://github.com/sponsors/ljharb" 11341 9545 } 11342 9546 }, 11343 - "node_modules/is-set": { 11344 - "version": "2.0.3", 11345 - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", 11346 - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", 11347 - "dev": true, 11348 - "license": "MIT", 11349 - "engines": { 11350 - "node": ">= 0.4" 11351 - }, 11352 - "funding": { 11353 - "url": "https://github.com/sponsors/ljharb" 11354 - } 11355 - }, 11356 - "node_modules/is-shared-array-buffer": { 11357 - "version": "1.0.4", 11358 - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", 11359 - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", 11360 - "dev": true, 11361 - "license": "MIT", 11362 - "dependencies": { 11363 - "call-bound": "^1.0.3" 11364 - }, 11365 - "engines": { 11366 - "node": ">= 0.4" 11367 - }, 11368 - "funding": { 11369 - "url": "https://github.com/sponsors/ljharb" 11370 - } 11371 - }, 11372 9547 "node_modules/is-stream": { 11373 9548 "version": "2.0.1", 11374 9549 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", ··· 11382 9557 "url": "https://github.com/sponsors/sindresorhus" 11383 9558 } 11384 9559 }, 11385 - "node_modules/is-string": { 11386 - "version": "1.1.1", 11387 - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", 11388 - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", 11389 - "dev": true, 11390 - "license": "MIT", 11391 - "dependencies": { 11392 - "call-bound": "^1.0.3", 11393 - "has-tostringtag": "^1.0.2" 11394 - }, 11395 - "engines": { 11396 - "node": ">= 0.4" 11397 - }, 11398 - "funding": { 11399 - "url": "https://github.com/sponsors/ljharb" 11400 - } 11401 - }, 11402 - "node_modules/is-symbol": { 11403 - "version": "1.1.1", 11404 - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", 11405 - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", 11406 - "dev": true, 11407 - "license": "MIT", 11408 - "dependencies": { 11409 - "call-bound": "^1.0.2", 11410 - "has-symbols": "^1.1.0", 11411 - "safe-regex-test": "^1.1.0" 11412 - }, 11413 - "engines": { 11414 - "node": ">= 0.4" 11415 - }, 11416 - "funding": { 11417 - "url": "https://github.com/sponsors/ljharb" 11418 - } 11419 - }, 11420 9560 "node_modules/is-typed-array": { 11421 9561 "version": "1.1.15", 11422 9562 "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", ··· 11433 9573 "url": "https://github.com/sponsors/ljharb" 11434 9574 } 11435 9575 }, 11436 - "node_modules/is-weakmap": { 11437 - "version": "2.0.2", 11438 - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", 11439 - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", 9576 + "node_modules/is-what": { 9577 + "version": "4.1.16", 9578 + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", 9579 + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", 11440 9580 "dev": true, 11441 9581 "license": "MIT", 11442 9582 "engines": { 11443 - "node": ">= 0.4" 9583 + "node": ">=12.13" 11444 9584 }, 11445 9585 "funding": { 11446 - "url": "https://github.com/sponsors/ljharb" 11447 - } 11448 - }, 11449 - "node_modules/is-weakref": { 11450 - "version": "1.1.1", 11451 - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", 11452 - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", 11453 - "dev": true, 11454 - "license": "MIT", 11455 - "dependencies": { 11456 - "call-bound": "^1.0.3" 11457 - }, 11458 - "engines": { 11459 - "node": ">= 0.4" 11460 - }, 11461 - "funding": { 11462 - "url": "https://github.com/sponsors/ljharb" 11463 - } 11464 - }, 11465 - "node_modules/is-weakset": { 11466 - "version": "2.0.4", 11467 - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", 11468 - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", 11469 - "dev": true, 11470 - "license": "MIT", 11471 - "dependencies": { 11472 - "call-bound": "^1.0.3", 11473 - "get-intrinsic": "^1.2.6" 11474 - }, 11475 - "engines": { 11476 - "node": ">= 0.4" 11477 - }, 11478 - "funding": { 11479 - "url": "https://github.com/sponsors/ljharb" 9586 + "url": "https://github.com/sponsors/mesqueeb" 11480 9587 } 11481 9588 }, 11482 9589 "node_modules/isarray": { ··· 11485 9592 "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 11486 9593 "dev": true, 11487 9594 "license": "MIT" 11488 - }, 11489 - "node_modules/isbot": { 11490 - "version": "5.1.32", 11491 - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.32.tgz", 11492 - "integrity": "sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==", 11493 - "dev": true, 11494 - "license": "Unlicense", 11495 - "engines": { 11496 - "node": ">=18" 11497 - } 11498 9595 }, 11499 9596 "node_modules/isexe": { 11500 9597 "version": "2.0.0", ··· 11603 9700 }, 11604 9701 "engines": { 11605 9702 "node": ">=8" 11606 - } 11607 - }, 11608 - "node_modules/iterator.prototype": { 11609 - "version": "1.1.5", 11610 - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", 11611 - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", 11612 - "dev": true, 11613 - "license": "MIT", 11614 - "dependencies": { 11615 - "define-data-property": "^1.1.4", 11616 - "es-object-atoms": "^1.0.0", 11617 - "get-intrinsic": "^1.2.6", 11618 - "get-proto": "^1.0.0", 11619 - "has-symbols": "^1.1.0", 11620 - "set-function-name": "^2.0.2" 11621 - }, 11622 - "engines": { 11623 - "node": ">= 0.4" 11624 9703 } 11625 9704 }, 11626 9705 "node_modules/jackspeak": { ··· 12811 10890 "dev": true, 12812 10891 "license": "MIT" 12813 10892 }, 12814 - "node_modules/json-parse-even-better-errors": { 12815 - "version": "3.0.2", 12816 - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", 12817 - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", 12818 - "dev": true, 12819 - "license": "MIT", 12820 - "engines": { 12821 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 12822 - } 12823 - }, 12824 10893 "node_modules/json-schema-traverse": { 12825 10894 "version": "0.4.1", 12826 10895 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", ··· 12855 10924 "dev": true, 12856 10925 "license": "MIT" 12857 10926 }, 12858 - "node_modules/jsx-ast-utils": { 12859 - "version": "3.3.5", 12860 - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", 12861 - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", 12862 - "dev": true, 12863 - "license": "MIT", 12864 - "dependencies": { 12865 - "array-includes": "^3.1.6", 12866 - "array.prototype.flat": "^1.3.1", 12867 - "object.assign": "^4.1.4", 12868 - "object.values": "^1.1.6" 12869 - }, 12870 - "engines": { 12871 - "node": ">=4.0" 12872 - } 12873 - }, 12874 10927 "node_modules/junk": { 12875 10928 "version": "4.0.1", 12876 10929 "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", ··· 12921 10974 "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==", 12922 10975 "license": "MIT" 12923 10976 }, 10977 + "node_modules/kebab-case": { 10978 + "version": "1.0.2", 10979 + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.2.tgz", 10980 + "integrity": "sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==", 10981 + "dev": true, 10982 + "license": "MIT" 10983 + }, 12924 10984 "node_modules/keyv": { 12925 10985 "version": "4.5.4", 12926 10986 "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", ··· 12931 10991 "json-buffer": "3.0.1" 12932 10992 } 12933 10993 }, 10994 + "node_modules/known-css-properties": { 10995 + "version": "0.30.0", 10996 + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz", 10997 + "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==", 10998 + "dev": true, 10999 + "license": "MIT" 11000 + }, 12934 11001 "node_modules/last-one-wins": { 12935 11002 "version": "1.0.4", 12936 11003 "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", ··· 13349 11416 "url": "https://github.com/sponsors/sindresorhus" 13350 11417 } 13351 11418 }, 13352 - "node_modules/lodash": { 13353 - "version": "4.17.21", 13354 - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 13355 - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 13356 - "dev": true, 13357 - "license": "MIT" 13358 - }, 13359 11419 "node_modules/lodash-es": { 13360 11420 "version": "4.17.21", 13361 11421 "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", ··· 13386 11446 "funding": { 13387 11447 "type": "github", 13388 11448 "url": "https://github.com/sponsors/wooorm" 13389 - } 13390 - }, 13391 - "node_modules/loose-envify": { 13392 - "version": "1.4.0", 13393 - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 13394 - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 13395 - "dev": true, 13396 - "license": "MIT", 13397 - "dependencies": { 13398 - "js-tokens": "^3.0.0 || ^4.0.0" 13399 - }, 13400 - "bin": { 13401 - "loose-envify": "cli.js" 13402 11449 } 13403 11450 }, 13404 11451 "node_modules/lru": { ··· 13450 11497 "node": ">=12.20.0" 13451 11498 } 13452 11499 }, 13453 - "node_modules/lucide-react": { 13454 - "version": "0.552.0", 13455 - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.552.0.tgz", 13456 - "integrity": "sha512-g9WCjmfwqbexSnZE+2cl21PCfXOcqnGeWeMTNAOGEfpPbm/ZF4YIq77Z8qWrxbu660EKuLB4nSLggoKnCb+isw==", 13457 - "license": "ISC", 13458 - "peerDependencies": { 13459 - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" 13460 - } 13461 - }, 13462 11500 "node_modules/lunr": { 13463 11501 "version": "2.3.9", 13464 11502 "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", 13465 11503 "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", 13466 11504 "dev": true, 13467 11505 "license": "MIT" 13468 - }, 13469 - "node_modules/lz-string": { 13470 - "version": "1.5.0", 13471 - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", 13472 - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", 13473 - "dev": true, 13474 - "license": "MIT", 13475 - "bin": { 13476 - "lz-string": "bin/bin.js" 13477 - } 13478 11506 }, 13479 11507 "node_modules/magic-string": { 13480 11508 "version": "0.30.21", ··· 14046 12074 "license": "MIT", 14047 12075 "dependencies": { 14048 12076 "queue-microtask": "^1.2.3" 12077 + } 12078 + }, 12079 + "node_modules/merge-anything": { 12080 + "version": "5.1.7", 12081 + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", 12082 + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", 12083 + "dev": true, 12084 + "license": "MIT", 12085 + "dependencies": { 12086 + "is-what": "^4.1.8" 12087 + }, 12088 + "engines": { 12089 + "node": ">=12.13" 12090 + }, 12091 + "funding": { 12092 + "url": "https://github.com/sponsors/mesqueeb" 14049 12093 } 14050 12094 }, 14051 12095 "node_modules/merge-descriptors": { ··· 15520 13564 "node": ">=6" 15521 13565 } 15522 13566 }, 15523 - "node_modules/normalize-package-data": { 15524 - "version": "5.0.0", 15525 - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", 15526 - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", 15527 - "dev": true, 15528 - "license": "BSD-2-Clause", 15529 - "dependencies": { 15530 - "hosted-git-info": "^6.0.0", 15531 - "is-core-module": "^2.8.1", 15532 - "semver": "^7.3.5", 15533 - "validate-npm-package-license": "^3.0.4" 15534 - }, 15535 - "engines": { 15536 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 15537 - } 15538 - }, 15539 - "node_modules/normalize-package-data/node_modules/semver": { 15540 - "version": "7.7.3", 15541 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 15542 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 15543 - "dev": true, 15544 - "license": "ISC", 15545 - "bin": { 15546 - "semver": "bin/semver.js" 15547 - }, 15548 - "engines": { 15549 - "node": ">=10" 15550 - } 15551 - }, 15552 13567 "node_modules/normalize-path": { 15553 13568 "version": "3.0.0", 15554 13569 "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", ··· 15559 13574 "node": ">=0.10.0" 15560 13575 } 15561 13576 }, 15562 - "node_modules/npm-install-checks": { 15563 - "version": "6.3.0", 15564 - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", 15565 - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", 15566 - "dev": true, 15567 - "license": "BSD-2-Clause", 15568 - "dependencies": { 15569 - "semver": "^7.1.1" 15570 - }, 15571 - "engines": { 15572 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 15573 - } 15574 - }, 15575 - "node_modules/npm-install-checks/node_modules/semver": { 15576 - "version": "7.7.3", 15577 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 15578 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 15579 - "dev": true, 15580 - "license": "ISC", 15581 - "bin": { 15582 - "semver": "bin/semver.js" 15583 - }, 15584 - "engines": { 15585 - "node": ">=10" 15586 - } 15587 - }, 15588 - "node_modules/npm-normalize-package-bin": { 15589 - "version": "3.0.1", 15590 - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", 15591 - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", 15592 - "dev": true, 15593 - "license": "ISC", 15594 - "engines": { 15595 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 15596 - } 15597 - }, 15598 - "node_modules/npm-package-arg": { 15599 - "version": "10.1.0", 15600 - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", 15601 - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", 15602 - "dev": true, 15603 - "license": "ISC", 15604 - "dependencies": { 15605 - "hosted-git-info": "^6.0.0", 15606 - "proc-log": "^3.0.0", 15607 - "semver": "^7.3.5", 15608 - "validate-npm-package-name": "^5.0.0" 15609 - }, 15610 - "engines": { 15611 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 15612 - } 15613 - }, 15614 - "node_modules/npm-package-arg/node_modules/semver": { 15615 - "version": "7.7.3", 15616 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 15617 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 15618 - "dev": true, 15619 - "license": "ISC", 15620 - "bin": { 15621 - "semver": "bin/semver.js" 15622 - }, 15623 - "engines": { 15624 - "node": ">=10" 15625 - } 15626 - }, 15627 - "node_modules/npm-pick-manifest": { 15628 - "version": "8.0.2", 15629 - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", 15630 - "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", 15631 - "dev": true, 15632 - "license": "ISC", 15633 - "dependencies": { 15634 - "npm-install-checks": "^6.0.0", 15635 - "npm-normalize-package-bin": "^3.0.0", 15636 - "npm-package-arg": "^10.0.0", 15637 - "semver": "^7.3.5" 15638 - }, 15639 - "engines": { 15640 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 15641 - } 15642 - }, 15643 - "node_modules/npm-pick-manifest/node_modules/semver": { 15644 - "version": "7.7.3", 15645 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 15646 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 15647 - "dev": true, 15648 - "license": "ISC", 15649 - "bin": { 15650 - "semver": "bin/semver.js" 15651 - }, 15652 - "engines": { 15653 - "node": ">=10" 15654 - } 15655 - }, 15656 13577 "node_modules/npm-run-path": { 15657 13578 "version": "4.0.1", 15658 13579 "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", ··· 15703 13624 "dev": true, 15704 13625 "license": "MIT" 15705 13626 }, 15706 - "node_modules/object-assign": { 15707 - "version": "4.1.1", 15708 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 15709 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 15710 - "dev": true, 15711 - "license": "MIT", 15712 - "engines": { 15713 - "node": ">=0.10.0" 15714 - } 15715 - }, 15716 13627 "node_modules/object-inspect": { 15717 13628 "version": "1.13.4", 15718 13629 "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", ··· 15773 13684 "url": "https://github.com/sponsors/ljharb" 15774 13685 } 15775 13686 }, 15776 - "node_modules/object.entries": { 15777 - "version": "1.1.9", 15778 - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", 15779 - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", 15780 - "dev": true, 15781 - "license": "MIT", 15782 - "dependencies": { 15783 - "call-bind": "^1.0.8", 15784 - "call-bound": "^1.0.4", 15785 - "define-properties": "^1.2.1", 15786 - "es-object-atoms": "^1.1.1" 15787 - }, 15788 - "engines": { 15789 - "node": ">= 0.4" 15790 - } 15791 - }, 15792 - "node_modules/object.fromentries": { 15793 - "version": "2.0.8", 15794 - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", 15795 - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", 15796 - "dev": true, 15797 - "license": "MIT", 15798 - "dependencies": { 15799 - "call-bind": "^1.0.7", 15800 - "define-properties": "^1.2.1", 15801 - "es-abstract": "^1.23.2", 15802 - "es-object-atoms": "^1.0.0" 15803 - }, 15804 - "engines": { 15805 - "node": ">= 0.4" 15806 - }, 15807 - "funding": { 15808 - "url": "https://github.com/sponsors/ljharb" 15809 - } 15810 - }, 15811 - "node_modules/object.values": { 15812 - "version": "1.2.1", 15813 - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", 15814 - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", 15815 - "dev": true, 15816 - "license": "MIT", 15817 - "dependencies": { 15818 - "call-bind": "^1.0.8", 15819 - "call-bound": "^1.0.3", 15820 - "define-properties": "^1.2.1", 15821 - "es-object-atoms": "^1.0.0" 15822 - }, 15823 - "engines": { 15824 - "node": ">= 0.4" 15825 - }, 15826 - "funding": { 15827 - "url": "https://github.com/sponsors/ljharb" 15828 - } 15829 - }, 15830 13687 "node_modules/on-finished": { 15831 13688 "version": "2.4.1", 15832 13689 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", ··· 15889 13746 "dev": true, 15890 13747 "license": "MIT" 15891 13748 }, 15892 - "node_modules/own-keys": { 15893 - "version": "1.0.1", 15894 - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", 15895 - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", 15896 - "dev": true, 15897 - "license": "MIT", 15898 - "dependencies": { 15899 - "get-intrinsic": "^1.2.6", 15900 - "object-keys": "^1.1.1", 15901 - "safe-push-apply": "^1.0.0" 15902 - }, 15903 - "engines": { 15904 - "node": ">= 0.4" 15905 - }, 15906 - "funding": { 15907 - "url": "https://github.com/sponsors/ljharb" 15908 - } 15909 - }, 15910 13749 "node_modules/p-limit": { 15911 13750 "version": "3.1.0", 15912 13751 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", ··· 15934 13773 }, 15935 13774 "engines": { 15936 13775 "node": ">=10" 15937 - }, 15938 - "funding": { 15939 - "url": "https://github.com/sponsors/sindresorhus" 15940 - } 15941 - }, 15942 - "node_modules/p-map": { 15943 - "version": "7.0.3", 15944 - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", 15945 - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", 15946 - "dev": true, 15947 - "license": "MIT", 15948 - "engines": { 15949 - "node": ">=18" 15950 13776 }, 15951 13777 "funding": { 15952 13778 "url": "https://github.com/sponsors/sindresorhus" ··· 16205 14031 "url": "https://opencollective.com/express" 16206 14032 } 16207 14033 }, 16208 - "node_modules/pathe": { 16209 - "version": "1.1.2", 16210 - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 16211 - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 16212 - "dev": true, 16213 - "license": "MIT" 16214 - }, 16215 14034 "node_modules/pbkdf2": { 16216 14035 "version": "3.1.5", 16217 14036 "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", ··· 16473 14292 } 16474 14293 } 16475 14294 }, 16476 - "node_modules/pretty-format": { 16477 - "version": "27.5.1", 16478 - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 16479 - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 16480 - "dev": true, 16481 - "license": "MIT", 16482 - "dependencies": { 16483 - "ansi-regex": "^5.0.1", 16484 - "ansi-styles": "^5.0.0", 16485 - "react-is": "^17.0.1" 16486 - }, 16487 - "engines": { 16488 - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" 16489 - } 16490 - }, 16491 - "node_modules/pretty-format/node_modules/ansi-styles": { 16492 - "version": "5.2.0", 16493 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 16494 - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 16495 - "dev": true, 16496 - "license": "MIT", 16497 - "engines": { 16498 - "node": ">=10" 16499 - }, 16500 - "funding": { 16501 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 16502 - } 16503 - }, 16504 - "node_modules/proc-log": { 16505 - "version": "3.0.0", 16506 - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", 16507 - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", 16508 - "dev": true, 16509 - "license": "ISC", 16510 - "engines": { 16511 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 16512 - } 16513 - }, 16514 14295 "node_modules/process": { 16515 14296 "version": "0.11.10", 16516 14297 "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ··· 16533 14314 "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", 16534 14315 "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", 16535 14316 "dev": true, 16536 - "license": "ISC" 14317 + "license": "ISC", 14318 + "optional": true 16537 14319 }, 16538 14320 "node_modules/promise-retry": { 16539 14321 "version": "2.0.1", ··· 16541 14323 "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", 16542 14324 "dev": true, 16543 14325 "license": "MIT", 14326 + "optional": true, 16544 14327 "dependencies": { 16545 14328 "err-code": "^2.0.2", 16546 14329 "retry": "^0.12.0" ··· 16548 14331 "engines": { 16549 14332 "node": ">=10" 16550 14333 } 16551 - }, 16552 - "node_modules/prop-types": { 16553 - "version": "15.8.1", 16554 - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 16555 - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 16556 - "dev": true, 16557 - "license": "MIT", 16558 - "dependencies": { 16559 - "loose-envify": "^1.4.0", 16560 - "object-assign": "^4.1.1", 16561 - "react-is": "^16.13.1" 16562 - } 16563 - }, 16564 - "node_modules/prop-types/node_modules/react-is": { 16565 - "version": "16.13.1", 16566 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 16567 - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 16568 - "dev": true, 16569 - "license": "MIT" 16570 14334 }, 16571 14335 "node_modules/proper-lockfile": { 16572 14336 "version": "4.1.2", ··· 16856 14620 "node": ">=0.10.0" 16857 14621 } 16858 14622 }, 16859 - "node_modules/react": { 16860 - "version": "19.2.0", 16861 - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", 16862 - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", 16863 - "license": "MIT", 16864 - "peer": true, 16865 - "engines": { 16866 - "node": ">=0.10.0" 16867 - } 16868 - }, 16869 - "node_modules/react-dom": { 16870 - "version": "19.2.0", 16871 - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", 16872 - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", 16873 - "license": "MIT", 16874 - "peer": true, 16875 - "dependencies": { 16876 - "scheduler": "^0.27.0" 16877 - }, 16878 - "peerDependencies": { 16879 - "react": "^19.2.0" 16880 - } 16881 - }, 16882 - "node_modules/react-error-boundary": { 16883 - "version": "6.0.0", 16884 - "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-6.0.0.tgz", 16885 - "integrity": "sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==", 16886 - "license": "MIT", 16887 - "dependencies": { 16888 - "@babel/runtime": "^7.12.5" 16889 - }, 16890 - "peerDependencies": { 16891 - "react": ">=16.13.1" 16892 - } 16893 - }, 16894 - "node_modules/react-is": { 16895 - "version": "17.0.2", 16896 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 16897 - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 16898 - "dev": true, 16899 - "license": "MIT" 16900 - }, 16901 - "node_modules/react-refresh": { 16902 - "version": "0.14.2", 16903 - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", 16904 - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", 16905 - "dev": true, 16906 - "license": "MIT", 16907 - "engines": { 16908 - "node": ">=0.10.0" 16909 - } 16910 - }, 16911 - "node_modules/react-remove-scroll": { 16912 - "version": "2.7.1", 16913 - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", 16914 - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", 16915 - "license": "MIT", 16916 - "dependencies": { 16917 - "react-remove-scroll-bar": "^2.3.7", 16918 - "react-style-singleton": "^2.2.3", 16919 - "tslib": "^2.1.0", 16920 - "use-callback-ref": "^1.3.3", 16921 - "use-sidecar": "^1.1.3" 16922 - }, 16923 - "engines": { 16924 - "node": ">=10" 16925 - }, 16926 - "peerDependencies": { 16927 - "@types/react": "*", 16928 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 16929 - }, 16930 - "peerDependenciesMeta": { 16931 - "@types/react": { 16932 - "optional": true 16933 - } 16934 - } 16935 - }, 16936 - "node_modules/react-remove-scroll-bar": { 16937 - "version": "2.3.8", 16938 - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", 16939 - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", 16940 - "license": "MIT", 16941 - "dependencies": { 16942 - "react-style-singleton": "^2.2.2", 16943 - "tslib": "^2.0.0" 16944 - }, 16945 - "engines": { 16946 - "node": ">=10" 16947 - }, 16948 - "peerDependencies": { 16949 - "@types/react": "*", 16950 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 16951 - }, 16952 - "peerDependenciesMeta": { 16953 - "@types/react": { 16954 - "optional": true 16955 - } 16956 - } 16957 - }, 16958 - "node_modules/react-router": { 16959 - "version": "7.9.5", 16960 - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz", 16961 - "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==", 16962 - "license": "MIT", 16963 - "dependencies": { 16964 - "cookie": "^1.0.1", 16965 - "set-cookie-parser": "^2.6.0" 16966 - }, 16967 - "engines": { 16968 - "node": ">=20.0.0" 16969 - }, 16970 - "peerDependencies": { 16971 - "react": ">=18", 16972 - "react-dom": ">=18" 16973 - }, 16974 - "peerDependenciesMeta": { 16975 - "react-dom": { 16976 - "optional": true 16977 - } 16978 - } 16979 - }, 16980 - "node_modules/react-router/node_modules/cookie": { 16981 - "version": "1.0.2", 16982 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", 16983 - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", 16984 - "license": "MIT", 16985 - "engines": { 16986 - "node": ">=18" 16987 - } 16988 - }, 16989 - "node_modules/react-style-singleton": { 16990 - "version": "2.2.3", 16991 - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", 16992 - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", 16993 - "license": "MIT", 16994 - "dependencies": { 16995 - "get-nonce": "^1.0.0", 16996 - "tslib": "^2.0.0" 16997 - }, 16998 - "engines": { 16999 - "node": ">=10" 17000 - }, 17001 - "peerDependencies": { 17002 - "@types/react": "*", 17003 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 17004 - }, 17005 - "peerDependenciesMeta": { 17006 - "@types/react": { 17007 - "optional": true 17008 - } 17009 - } 17010 - }, 17011 14623 "node_modules/readable-stream": { 17012 14624 "version": "3.6.2", 17013 14625 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", ··· 17059 14671 "node": ">=8" 17060 14672 } 17061 14673 }, 17062 - "node_modules/reflect.getprototypeof": { 17063 - "version": "1.0.10", 17064 - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", 17065 - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", 17066 - "dev": true, 17067 - "license": "MIT", 17068 - "dependencies": { 17069 - "call-bind": "^1.0.8", 17070 - "define-properties": "^1.2.1", 17071 - "es-abstract": "^1.23.9", 17072 - "es-errors": "^1.3.0", 17073 - "es-object-atoms": "^1.0.0", 17074 - "get-intrinsic": "^1.2.7", 17075 - "get-proto": "^1.0.1", 17076 - "which-builtin-type": "^1.2.1" 17077 - }, 17078 - "engines": { 17079 - "node": ">= 0.4" 17080 - }, 17081 - "funding": { 17082 - "url": "https://github.com/sponsors/ljharb" 17083 - } 17084 - }, 17085 - "node_modules/regexp.prototype.flags": { 17086 - "version": "1.5.4", 17087 - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", 17088 - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", 17089 - "dev": true, 17090 - "license": "MIT", 17091 - "dependencies": { 17092 - "call-bind": "^1.0.8", 17093 - "define-properties": "^1.2.1", 17094 - "es-errors": "^1.3.0", 17095 - "get-proto": "^1.0.1", 17096 - "gopd": "^1.2.0", 17097 - "set-function-name": "^2.0.2" 17098 - }, 17099 - "engines": { 17100 - "node": ">= 0.4" 17101 - }, 17102 - "funding": { 17103 - "url": "https://github.com/sponsors/ljharb" 17104 - } 17105 - }, 17106 14674 "node_modules/require-addon": { 17107 14675 "version": "1.1.0", 17108 14676 "resolved": "https://registry.npmjs.org/require-addon/-/require-addon-1.1.0.tgz", ··· 17135 14703 "license": "MIT", 17136 14704 "engines": { 17137 14705 "node": ">=0.10.0" 17138 - } 17139 - }, 17140 - "node_modules/resolve": { 17141 - "version": "2.0.0-next.5", 17142 - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", 17143 - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", 17144 - "dev": true, 17145 - "license": "MIT", 17146 - "dependencies": { 17147 - "is-core-module": "^2.13.0", 17148 - "path-parse": "^1.0.7", 17149 - "supports-preserve-symlinks-flag": "^1.0.0" 17150 - }, 17151 - "bin": { 17152 - "resolve": "bin/resolve" 17153 - }, 17154 - "funding": { 17155 - "url": "https://github.com/sponsors/ljharb" 17156 14706 } 17157 14707 }, 17158 14708 "node_modules/resolve-cwd": { ··· 17377 14927 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", 17378 14928 "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", 17379 14929 "license": "MIT", 14930 + "peer": true, 17380 14931 "dependencies": { 17381 14932 "@types/estree": "1.0.8" 17382 14933 }, ··· 17502 15053 ], 17503 15054 "license": "MIT" 17504 15055 }, 17505 - "node_modules/safe-array-concat": { 17506 - "version": "1.1.3", 17507 - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", 17508 - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", 17509 - "dev": true, 17510 - "license": "MIT", 17511 - "dependencies": { 17512 - "call-bind": "^1.0.8", 17513 - "call-bound": "^1.0.2", 17514 - "get-intrinsic": "^1.2.6", 17515 - "has-symbols": "^1.1.0", 17516 - "isarray": "^2.0.5" 17517 - }, 17518 - "engines": { 17519 - "node": ">=0.4" 17520 - }, 17521 - "funding": { 17522 - "url": "https://github.com/sponsors/ljharb" 17523 - } 17524 - }, 17525 15056 "node_modules/safe-buffer": { 17526 15057 "version": "5.2.1", 17527 15058 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", ··· 17542 15073 ], 17543 15074 "license": "MIT" 17544 15075 }, 17545 - "node_modules/safe-push-apply": { 17546 - "version": "1.0.0", 17547 - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", 17548 - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", 17549 - "dev": true, 17550 - "license": "MIT", 17551 - "dependencies": { 17552 - "es-errors": "^1.3.0", 17553 - "isarray": "^2.0.5" 17554 - }, 17555 - "engines": { 17556 - "node": ">= 0.4" 17557 - }, 17558 - "funding": { 17559 - "url": "https://github.com/sponsors/ljharb" 17560 - } 17561 - }, 17562 15076 "node_modules/safe-regex-test": { 17563 15077 "version": "1.1.0", 17564 15078 "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", ··· 17602 15116 "node": ">=v12.22.7" 17603 15117 } 17604 15118 }, 17605 - "node_modules/scheduler": { 17606 - "version": "0.27.0", 17607 - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", 17608 - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", 17609 - "license": "MIT" 17610 - }, 17611 15119 "node_modules/semver": { 17612 15120 "version": "6.3.1", 17613 15121 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", ··· 17638 15146 }, 17639 15147 "engines": { 17640 15148 "node": ">= 18" 15149 + } 15150 + }, 15151 + "node_modules/seroval": { 15152 + "version": "1.3.2", 15153 + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", 15154 + "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", 15155 + "license": "MIT", 15156 + "peer": true, 15157 + "engines": { 15158 + "node": ">=10" 15159 + } 15160 + }, 15161 + "node_modules/seroval-plugins": { 15162 + "version": "1.3.3", 15163 + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", 15164 + "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", 15165 + "license": "MIT", 15166 + "engines": { 15167 + "node": ">=10" 15168 + }, 15169 + "peerDependencies": { 15170 + "seroval": "^1.0" 17641 15171 } 17642 15172 }, 17643 15173 "node_modules/serve-static": { ··· 17663 15193 "license": "ISC", 17664 15194 "optional": true 17665 15195 }, 17666 - "node_modules/set-cookie-parser": { 17667 - "version": "2.7.2", 17668 - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", 17669 - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", 17670 - "license": "MIT" 17671 - }, 17672 15196 "node_modules/set-function-length": { 17673 15197 "version": "1.2.2", 17674 15198 "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", ··· 17682 15206 "get-intrinsic": "^1.2.4", 17683 15207 "gopd": "^1.0.1", 17684 15208 "has-property-descriptors": "^1.0.2" 17685 - }, 17686 - "engines": { 17687 - "node": ">= 0.4" 17688 - } 17689 - }, 17690 - "node_modules/set-function-name": { 17691 - "version": "2.0.2", 17692 - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", 17693 - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", 17694 - "dev": true, 17695 - "license": "MIT", 17696 - "dependencies": { 17697 - "define-data-property": "^1.1.4", 17698 - "es-errors": "^1.3.0", 17699 - "functions-have-names": "^1.2.3", 17700 - "has-property-descriptors": "^1.0.2" 17701 - }, 17702 - "engines": { 17703 - "node": ">= 0.4" 17704 - } 17705 - }, 17706 - "node_modules/set-proto": { 17707 - "version": "1.0.0", 17708 - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", 17709 - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", 17710 - "dev": true, 17711 - "license": "MIT", 17712 - "dependencies": { 17713 - "dunder-proto": "^1.0.1", 17714 - "es-errors": "^1.3.0", 17715 - "es-object-atoms": "^1.0.0" 17716 15209 }, 17717 15210 "engines": { 17718 15211 "node": ">= 0.4" ··· 17903 15396 "simple-concat": "^1.0.0" 17904 15397 } 17905 15398 }, 17906 - "node_modules/simple-peer": { 17907 - "version": "9.11.1", 17908 - "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", 17909 - "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", 17910 - "funding": [ 17911 - { 17912 - "type": "github", 17913 - "url": "https://github.com/sponsors/feross" 17914 - }, 17915 - { 17916 - "type": "patreon", 17917 - "url": "https://www.patreon.com/feross" 17918 - }, 17919 - { 17920 - "type": "consulting", 17921 - "url": "https://feross.org/support" 17922 - } 17923 - ], 17924 - "license": "MIT", 17925 - "dependencies": { 17926 - "buffer": "^6.0.3", 17927 - "debug": "^4.3.2", 17928 - "err-code": "^3.0.1", 17929 - "get-browser-rtc": "^1.1.0", 17930 - "queue-microtask": "^1.2.3", 17931 - "randombytes": "^2.1.0", 17932 - "readable-stream": "^3.6.0" 17933 - } 17934 - }, 17935 - "node_modules/simple-peer/node_modules/err-code": { 17936 - "version": "3.0.1", 17937 - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 17938 - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", 17939 - "license": "MIT" 17940 - }, 17941 15399 "node_modules/slash": { 17942 15400 "version": "3.0.0", 17943 15401 "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", ··· 18002 15460 "node": ">= 6.0.0" 18003 15461 } 18004 15462 }, 15463 + "node_modules/solid-devtools": { 15464 + "version": "0.34.4", 15465 + "resolved": "https://registry.npmjs.org/solid-devtools/-/solid-devtools-0.34.4.tgz", 15466 + "integrity": "sha512-/s/pPTLvTkuXGZhLfsuvp7ge/cdpEwrUPoRwoJPYgz74GTUSb5Ozi2V6Z6HkO0ILT7hXB04j16HbH1aaP5VFOA==", 15467 + "dev": true, 15468 + "license": "MIT", 15469 + "dependencies": { 15470 + "@babel/core": "^7.27.4", 15471 + "@babel/plugin-syntax-typescript": "^7.27.1", 15472 + "@babel/types": "^7.27.6", 15473 + "@solid-devtools/debugger": "^0.28.1", 15474 + "@solid-devtools/shared": "^0.20.0" 15475 + }, 15476 + "peerDependencies": { 15477 + "solid-js": "^1.9.0", 15478 + "vite": "^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" 15479 + }, 15480 + "peerDependenciesMeta": { 15481 + "vite": { 15482 + "optional": true 15483 + } 15484 + } 15485 + }, 15486 + "node_modules/solid-js": { 15487 + "version": "1.9.10", 15488 + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz", 15489 + "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", 15490 + "license": "MIT", 15491 + "peer": true, 15492 + "dependencies": { 15493 + "csstype": "^3.1.0", 15494 + "seroval": "~1.3.0", 15495 + "seroval-plugins": "~1.3.0" 15496 + } 15497 + }, 15498 + "node_modules/solid-motionone": { 15499 + "version": "1.0.4", 15500 + "resolved": "https://registry.npmjs.org/solid-motionone/-/solid-motionone-1.0.4.tgz", 15501 + "integrity": "sha512-aqEjgecoO9raDFznu/dEci7ORSmA26Kjj9J4Cn1Gyr0GZuOVdvsNxdxClTL9J40Aq/uYFx4GLwC8n70fMLHiuA==", 15502 + "license": "MIT", 15503 + "dependencies": { 15504 + "@motionone/dom": "^10.17.0", 15505 + "@motionone/utils": "^10.17.0", 15506 + "@solid-primitives/props": "^3.1.11", 15507 + "@solid-primitives/refs": "^1.0.8", 15508 + "@solid-primitives/transition-group": "^1.0.5", 15509 + "csstype": "^3.1.3" 15510 + }, 15511 + "peerDependencies": { 15512 + "solid-js": "^1.8.0" 15513 + } 15514 + }, 15515 + "node_modules/solid-refresh": { 15516 + "version": "0.6.3", 15517 + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.6.3.tgz", 15518 + "integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==", 15519 + "dev": true, 15520 + "license": "MIT", 15521 + "dependencies": { 15522 + "@babel/generator": "^7.23.6", 15523 + "@babel/helper-module-imports": "^7.22.15", 15524 + "@babel/types": "^7.23.6" 15525 + }, 15526 + "peerDependencies": { 15527 + "solid-js": "^1.3" 15528 + } 15529 + }, 18005 15530 "node_modules/source-map": { 18006 15531 "version": "0.6.1", 18007 15532 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", ··· 18031 15556 "buffer-from": "^1.0.0", 18032 15557 "source-map": "^0.6.0" 18033 15558 } 18034 - }, 18035 - "node_modules/spdx-correct": { 18036 - "version": "3.2.0", 18037 - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", 18038 - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", 18039 - "dev": true, 18040 - "license": "Apache-2.0", 18041 - "dependencies": { 18042 - "spdx-expression-parse": "^3.0.0", 18043 - "spdx-license-ids": "^3.0.0" 18044 - } 18045 - }, 18046 - "node_modules/spdx-exceptions": { 18047 - "version": "2.5.0", 18048 - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", 18049 - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", 18050 - "dev": true, 18051 - "license": "CC-BY-3.0" 18052 - }, 18053 - "node_modules/spdx-expression-parse": { 18054 - "version": "3.0.1", 18055 - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 18056 - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 18057 - "dev": true, 18058 - "license": "MIT", 18059 - "dependencies": { 18060 - "spdx-exceptions": "^2.1.0", 18061 - "spdx-license-ids": "^3.0.0" 18062 - } 18063 - }, 18064 - "node_modules/spdx-license-ids": { 18065 - "version": "3.0.22", 18066 - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", 18067 - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", 18068 - "dev": true, 18069 - "license": "CC0-1.0" 18070 15559 }, 18071 15560 "node_modules/speed-limiter": { 18072 15561 "version": "1.0.2", ··· 18191 15680 "node": ">= 0.8" 18192 15681 } 18193 15682 }, 18194 - "node_modules/stop-iteration-iterator": { 18195 - "version": "1.1.0", 18196 - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", 18197 - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", 18198 - "dev": true, 18199 - "license": "MIT", 18200 - "dependencies": { 18201 - "es-errors": "^1.3.0", 18202 - "internal-slot": "^1.1.0" 18203 - }, 18204 - "engines": { 18205 - "node": ">= 0.4" 18206 - } 18207 - }, 18208 15683 "node_modules/stream-browserify": { 18209 15684 "version": "3.0.0", 18210 15685 "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", ··· 18332 15807 "node": ">=8" 18333 15808 } 18334 15809 }, 18335 - "node_modules/string.prototype.matchall": { 18336 - "version": "4.0.12", 18337 - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", 18338 - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", 18339 - "dev": true, 18340 - "license": "MIT", 18341 - "dependencies": { 18342 - "call-bind": "^1.0.8", 18343 - "call-bound": "^1.0.3", 18344 - "define-properties": "^1.2.1", 18345 - "es-abstract": "^1.23.6", 18346 - "es-errors": "^1.3.0", 18347 - "es-object-atoms": "^1.0.0", 18348 - "get-intrinsic": "^1.2.6", 18349 - "gopd": "^1.2.0", 18350 - "has-symbols": "^1.1.0", 18351 - "internal-slot": "^1.1.0", 18352 - "regexp.prototype.flags": "^1.5.3", 18353 - "set-function-name": "^2.0.2", 18354 - "side-channel": "^1.1.0" 18355 - }, 18356 - "engines": { 18357 - "node": ">= 0.4" 18358 - }, 18359 - "funding": { 18360 - "url": "https://github.com/sponsors/ljharb" 18361 - } 18362 - }, 18363 - "node_modules/string.prototype.repeat": { 18364 - "version": "1.0.0", 18365 - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", 18366 - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", 18367 - "dev": true, 18368 - "license": "MIT", 18369 - "dependencies": { 18370 - "define-properties": "^1.1.3", 18371 - "es-abstract": "^1.17.5" 18372 - } 18373 - }, 18374 - "node_modules/string.prototype.trim": { 18375 - "version": "1.2.10", 18376 - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", 18377 - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", 18378 - "dev": true, 18379 - "license": "MIT", 18380 - "dependencies": { 18381 - "call-bind": "^1.0.8", 18382 - "call-bound": "^1.0.2", 18383 - "define-data-property": "^1.1.4", 18384 - "define-properties": "^1.2.1", 18385 - "es-abstract": "^1.23.5", 18386 - "es-object-atoms": "^1.0.0", 18387 - "has-property-descriptors": "^1.0.2" 18388 - }, 18389 - "engines": { 18390 - "node": ">= 0.4" 18391 - }, 18392 - "funding": { 18393 - "url": "https://github.com/sponsors/ljharb" 18394 - } 18395 - }, 18396 - "node_modules/string.prototype.trimend": { 18397 - "version": "1.0.9", 18398 - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", 18399 - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", 18400 - "dev": true, 18401 - "license": "MIT", 18402 - "dependencies": { 18403 - "call-bind": "^1.0.8", 18404 - "call-bound": "^1.0.2", 18405 - "define-properties": "^1.2.1", 18406 - "es-object-atoms": "^1.0.0" 18407 - }, 18408 - "engines": { 18409 - "node": ">= 0.4" 18410 - }, 18411 - "funding": { 18412 - "url": "https://github.com/sponsors/ljharb" 18413 - } 18414 - }, 18415 - "node_modules/string.prototype.trimstart": { 18416 - "version": "1.0.8", 18417 - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", 18418 - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", 18419 - "dev": true, 18420 - "license": "MIT", 18421 - "dependencies": { 18422 - "call-bind": "^1.0.7", 18423 - "define-properties": "^1.2.1", 18424 - "es-object-atoms": "^1.0.0" 18425 - }, 18426 - "engines": { 18427 - "node": ">= 0.4" 18428 - }, 18429 - "funding": { 18430 - "url": "https://github.com/sponsors/ljharb" 18431 - } 18432 - }, 18433 15810 "node_modules/string2compact": { 18434 15811 "version": "2.0.1", 18435 15812 "resolved": "https://registry.npmjs.org/string2compact/-/string2compact-2.0.1.tgz", ··· 18552 15929 } 18553 15930 ], 18554 15931 "license": "MIT" 15932 + }, 15933 + "node_modules/style-to-object": { 15934 + "version": "1.0.12", 15935 + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.12.tgz", 15936 + "integrity": "sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==", 15937 + "dev": true, 15938 + "license": "MIT", 15939 + "dependencies": { 15940 + "inline-style-parser": "0.2.6" 15941 + } 18555 15942 }, 18556 15943 "node_modules/supports-color": { 18557 15944 "version": "7.2.0", ··· 19285 16672 "node": ">= 0.4" 19286 16673 } 19287 16674 }, 19288 - "node_modules/typed-array-byte-length": { 19289 - "version": "1.0.3", 19290 - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", 19291 - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", 19292 - "dev": true, 19293 - "license": "MIT", 19294 - "dependencies": { 19295 - "call-bind": "^1.0.8", 19296 - "for-each": "^0.3.3", 19297 - "gopd": "^1.2.0", 19298 - "has-proto": "^1.2.0", 19299 - "is-typed-array": "^1.1.14" 19300 - }, 19301 - "engines": { 19302 - "node": ">= 0.4" 19303 - }, 19304 - "funding": { 19305 - "url": "https://github.com/sponsors/ljharb" 19306 - } 19307 - }, 19308 - "node_modules/typed-array-byte-offset": { 19309 - "version": "1.0.4", 19310 - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", 19311 - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", 19312 - "dev": true, 19313 - "license": "MIT", 19314 - "dependencies": { 19315 - "available-typed-arrays": "^1.0.7", 19316 - "call-bind": "^1.0.8", 19317 - "for-each": "^0.3.3", 19318 - "gopd": "^1.2.0", 19319 - "has-proto": "^1.2.0", 19320 - "is-typed-array": "^1.1.15", 19321 - "reflect.getprototypeof": "^1.0.9" 19322 - }, 19323 - "engines": { 19324 - "node": ">= 0.4" 19325 - }, 19326 - "funding": { 19327 - "url": "https://github.com/sponsors/ljharb" 19328 - } 19329 - }, 19330 - "node_modules/typed-array-length": { 19331 - "version": "1.0.7", 19332 - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", 19333 - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", 19334 - "dev": true, 19335 - "license": "MIT", 19336 - "dependencies": { 19337 - "call-bind": "^1.0.7", 19338 - "for-each": "^0.3.3", 19339 - "gopd": "^1.0.1", 19340 - "is-typed-array": "^1.1.13", 19341 - "possible-typed-array-names": "^1.0.0", 19342 - "reflect.getprototypeof": "^1.0.6" 19343 - }, 19344 - "engines": { 19345 - "node": ">= 0.4" 19346 - }, 19347 - "funding": { 19348 - "url": "https://github.com/sponsors/ljharb" 19349 - } 19350 - }, 19351 16675 "node_modules/typedoc": { 19352 16676 "version": "0.28.14", 19353 16677 "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.14.tgz", ··· 19531 16855 "base64-arraybuffer": "^1.0.2" 19532 16856 } 19533 16857 }, 19534 - "node_modules/unbox-primitive": { 19535 - "version": "1.1.0", 19536 - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", 19537 - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", 19538 - "dev": true, 19539 - "license": "MIT", 19540 - "dependencies": { 19541 - "call-bound": "^1.0.3", 19542 - "has-bigints": "^1.0.2", 19543 - "has-symbols": "^1.1.0", 19544 - "which-boxed-primitive": "^1.1.1" 19545 - }, 19546 - "engines": { 19547 - "node": ">= 0.4" 19548 - }, 19549 - "funding": { 19550 - "url": "https://github.com/sponsors/ljharb" 19551 - } 19552 - }, 19553 16858 "node_modules/undici-types": { 19554 16859 "version": "7.16.0", 19555 16860 "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", ··· 19770 17075 "dev": true, 19771 17076 "license": "MIT" 19772 17077 }, 19773 - "node_modules/use-callback-ref": { 19774 - "version": "1.3.3", 19775 - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", 19776 - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", 19777 - "license": "MIT", 19778 - "dependencies": { 19779 - "tslib": "^2.0.0" 19780 - }, 19781 - "engines": { 19782 - "node": ">=10" 19783 - }, 19784 - "peerDependencies": { 19785 - "@types/react": "*", 19786 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 19787 - }, 19788 - "peerDependenciesMeta": { 19789 - "@types/react": { 19790 - "optional": true 19791 - } 19792 - } 19793 - }, 19794 - "node_modules/use-sidecar": { 19795 - "version": "1.1.3", 19796 - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", 19797 - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", 19798 - "license": "MIT", 19799 - "dependencies": { 19800 - "detect-node-es": "^1.1.0", 19801 - "tslib": "^2.0.0" 19802 - }, 19803 - "engines": { 19804 - "node": ">=10" 19805 - }, 19806 - "peerDependencies": { 19807 - "@types/react": "*", 19808 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 19809 - }, 19810 - "peerDependenciesMeta": { 19811 - "@types/react": { 19812 - "optional": true 19813 - } 19814 - } 19815 - }, 19816 - "node_modules/use-sync-external-store": { 19817 - "version": "1.6.0", 19818 - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", 19819 - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", 19820 - "license": "MIT", 19821 - "peerDependencies": { 19822 - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 19823 - } 19824 - }, 19825 17078 "node_modules/ut_metadata": { 19826 17079 "version": "4.0.3", 19827 17080 "resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-4.0.3.tgz", ··· 19949 17202 "node": ">=10.12.0" 19950 17203 } 19951 17204 }, 19952 - "node_modules/valibot": { 19953 - "version": "1.1.0", 19954 - "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", 19955 - "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", 19956 - "dev": true, 19957 - "license": "MIT", 19958 - "peerDependencies": { 19959 - "typescript": ">=5" 19960 - }, 19961 - "peerDependenciesMeta": { 19962 - "typescript": { 19963 - "optional": true 19964 - } 19965 - } 19966 - }, 19967 - "node_modules/validate-npm-package-license": { 19968 - "version": "3.0.4", 19969 - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 19970 - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 19971 - "dev": true, 19972 - "license": "Apache-2.0", 19973 - "dependencies": { 19974 - "spdx-correct": "^3.0.0", 19975 - "spdx-expression-parse": "^3.0.0" 19976 - } 19977 - }, 19978 - "node_modules/validate-npm-package-name": { 19979 - "version": "5.0.1", 19980 - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", 19981 - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", 19982 - "dev": true, 19983 - "license": "ISC", 19984 - "engines": { 19985 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 19986 - } 19987 - }, 19988 17205 "node_modules/vary": { 19989 17206 "version": "1.1.2", 19990 17207 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", ··· 20069 17286 } 20070 17287 } 20071 17288 }, 20072 - "node_modules/vite-node": { 20073 - "version": "3.2.4", 20074 - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", 20075 - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", 17289 + "node_modules/vite-bundle-analyzer": { 17290 + "version": "1.2.3", 17291 + "resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.2.3.tgz", 17292 + "integrity": "sha512-8nhwDGHWMKKgg6oegAOpDgTT7/yzTVzeYzLF4y8WBJoYu9gO7h29UpHiQnXD2rAvfQzDy5Wqe/Za5cgqhnxi5g==", 20076 17293 "dev": true, 20077 17294 "license": "MIT", 20078 - "dependencies": { 20079 - "cac": "^6.7.14", 20080 - "debug": "^4.4.1", 20081 - "es-module-lexer": "^1.7.0", 20082 - "pathe": "^2.0.3", 20083 - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" 20084 - }, 20085 17295 "bin": { 20086 - "vite-node": "vite-node.mjs" 20087 - }, 20088 - "engines": { 20089 - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 20090 - }, 20091 - "funding": { 20092 - "url": "https://opencollective.com/vitest" 17296 + "analyze": "dist/bin.js" 20093 17297 } 20094 - }, 20095 - "node_modules/vite-node/node_modules/pathe": { 20096 - "version": "2.0.3", 20097 - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 20098 - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 20099 - "dev": true, 20100 - "license": "MIT" 20101 17298 }, 20102 17299 "node_modules/vite-plugin-checker": { 20103 17300 "version": "0.11.0", ··· 20224 17421 "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" 20225 17422 } 20226 17423 }, 17424 + "node_modules/vite-plugin-solid": { 17425 + "version": "2.11.10", 17426 + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.11.10.tgz", 17427 + "integrity": "sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==", 17428 + "dev": true, 17429 + "license": "MIT", 17430 + "dependencies": { 17431 + "@babel/core": "^7.23.3", 17432 + "@types/babel__core": "^7.20.4", 17433 + "babel-preset-solid": "^1.8.4", 17434 + "merge-anything": "^5.1.7", 17435 + "solid-refresh": "^0.6.3", 17436 + "vitefu": "^1.0.4" 17437 + }, 17438 + "peerDependencies": { 17439 + "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", 17440 + "solid-js": "^1.7.2", 17441 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" 17442 + }, 17443 + "peerDependenciesMeta": { 17444 + "@testing-library/jest-dom": { 17445 + "optional": true 17446 + } 17447 + } 17448 + }, 20227 17449 "node_modules/vite/node_modules/fdir": { 20228 17450 "version": "6.5.0", 20229 17451 "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", ··· 20252 17474 }, 20253 17475 "funding": { 20254 17476 "url": "https://github.com/sponsors/jonschlinkert" 17477 + } 17478 + }, 17479 + "node_modules/vitefu": { 17480 + "version": "1.1.1", 17481 + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", 17482 + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", 17483 + "dev": true, 17484 + "license": "MIT", 17485 + "workspaces": [ 17486 + "tests/deps/*", 17487 + "tests/projects/*", 17488 + "tests/projects/workspace/packages/*" 17489 + ], 17490 + "peerDependencies": { 17491 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" 17492 + }, 17493 + "peerDependenciesMeta": { 17494 + "vite": { 17495 + "optional": true 17496 + } 20255 17497 } 20256 17498 }, 20257 17499 "node_modules/vm-browserify": { ··· 20441 17683 }, 20442 17684 "engines": { 20443 17685 "node": ">=18" 20444 - } 20445 - }, 20446 - "node_modules/which": { 20447 - "version": "3.0.1", 20448 - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", 20449 - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", 20450 - "dev": true, 20451 - "license": "ISC", 20452 - "dependencies": { 20453 - "isexe": "^2.0.0" 20454 - }, 20455 - "bin": { 20456 - "node-which": "bin/which.js" 20457 - }, 20458 - "engines": { 20459 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 20460 - } 20461 - }, 20462 - "node_modules/which-boxed-primitive": { 20463 - "version": "1.1.1", 20464 - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", 20465 - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", 20466 - "dev": true, 20467 - "license": "MIT", 20468 - "dependencies": { 20469 - "is-bigint": "^1.1.0", 20470 - "is-boolean-object": "^1.2.1", 20471 - "is-number-object": "^1.1.1", 20472 - "is-string": "^1.1.1", 20473 - "is-symbol": "^1.1.1" 20474 - }, 20475 - "engines": { 20476 - "node": ">= 0.4" 20477 - }, 20478 - "funding": { 20479 - "url": "https://github.com/sponsors/ljharb" 20480 - } 20481 - }, 20482 - "node_modules/which-builtin-type": { 20483 - "version": "1.2.1", 20484 - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", 20485 - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", 20486 - "dev": true, 20487 - "license": "MIT", 20488 - "dependencies": { 20489 - "call-bound": "^1.0.2", 20490 - "function.prototype.name": "^1.1.6", 20491 - "has-tostringtag": "^1.0.2", 20492 - "is-async-function": "^2.0.0", 20493 - "is-date-object": "^1.1.0", 20494 - "is-finalizationregistry": "^1.1.0", 20495 - "is-generator-function": "^1.0.10", 20496 - "is-regex": "^1.2.1", 20497 - "is-weakref": "^1.0.2", 20498 - "isarray": "^2.0.5", 20499 - "which-boxed-primitive": "^1.1.0", 20500 - "which-collection": "^1.0.2", 20501 - "which-typed-array": "^1.1.16" 20502 - }, 20503 - "engines": { 20504 - "node": ">= 0.4" 20505 - }, 20506 - "funding": { 20507 - "url": "https://github.com/sponsors/ljharb" 20508 - } 20509 - }, 20510 - "node_modules/which-collection": { 20511 - "version": "1.0.2", 20512 - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", 20513 - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", 20514 - "dev": true, 20515 - "license": "MIT", 20516 - "dependencies": { 20517 - "is-map": "^2.0.3", 20518 - "is-set": "^2.0.3", 20519 - "is-weakmap": "^2.0.2", 20520 - "is-weakset": "^2.0.3" 20521 - }, 20522 - "engines": { 20523 - "node": ">= 0.4" 20524 - }, 20525 - "funding": { 20526 - "url": "https://github.com/sponsors/ljharb" 20527 17686 } 20528 17687 }, 20529 17688 "node_modules/which-runtime": {
+6 -24
package.json
··· 22 22 }, 23 23 "dependencies": { 24 24 "@mozilla/readability": "^0.6.0", 25 - "@preact/signals-react": "^3.4.0", 26 - "@radix-ui/react-dialog": "^1.1.15", 27 - "@radix-ui/react-scroll-area": "^1.2.10", 28 - "@radix-ui/react-separator": "^1.1.8", 29 - "@radix-ui/react-slot": "^1.2.4", 30 - "@radix-ui/react-tooltip": "^1.2.8", 31 - "@react-spring/web": "^10.0.3", 32 25 "@tailwindcss/vite": "^4.1.16", 33 - "@use-gesture/react": "^10.3.1", 34 26 "better-sqlite3": "^12.4.1", 35 - "class-variance-authority": "^0.7.1", 36 27 "clsx": "^2.1.1", 37 28 "dexie": "^4.2.1", 38 29 "express": "^5.1.0", ··· 41 32 "jose": "^6.0.11", 42 33 "level": "^10.0.0", 43 34 "linkedom": "^0.18.12", 44 - "lucide-react": "^0.552.0", 45 35 "nanoid": "^5.1.5", 46 - "react": "19.2.0", 47 - "react-dom": "19.2.0", 48 - "react-error-boundary": "^6.0.0", 49 - "react-router": "^7.9.5", 50 - "simple-peer": "^9.11.1", 36 + "solid-js": "^1.9.5", 37 + "solid-motionone": "^1.0.4", 51 38 "tailwind-merge": "^3.3.1", 52 39 "tailwindcss": "^4.1.16", 53 40 "ts-pattern": "^5.9.0", ··· 64 51 "@eslint/markdown": "~6.5.0", 65 52 "@faker-js/faker": "^9.8.0", 66 53 "@jest/globals": "^30.0.0", 67 - "@preact/signals-react-transform": "^0.6.0", 68 - "@react-router/dev": "^7.9.5", 69 54 "@testing-library/jest-dom": "^6.6.3", 70 - "@testing-library/react": "^16.1.0", 71 55 "@trivago/prettier-plugin-sort-imports": "^6.0.0", 72 56 "@types/better-sqlite3": "^7.6.13", 73 57 "@types/confusing-browser-globals": "^1.0.3", ··· 75 59 "@types/jest": "^30.0.0", 76 60 "@types/level": "^6.0.3", 77 61 "@types/node": "^24.0.1", 78 - "@types/react": "^19.2.2", 79 - "@types/react-dom": "^19.2.2", 80 - "@types/simple-peer": "^9.11.8", 81 62 "@types/ws": "^8.18.1", 82 - "@vitejs/plugin-react": "~5.1", 83 63 "confusing-browser-globals": "^1.0.11", 84 64 "eslint": "^9.28.0", 85 65 "eslint-config-prettier": "^10.1.5", 86 66 "eslint-plugin-prettier": "^5.5.0", 87 - "eslint-plugin-react": "^7.37.5", 88 - "eslint-plugin-react-hooks": "^5.2.0", 67 + "eslint-plugin-solid": "^0.14.5", 89 68 "eslint-plugin-tsdoc": "^0.4.0", 90 69 "glob-to-regexp": "^0.4.1", 91 70 "globals": "^16.2.0", ··· 100 79 "parse-gitignore": "^2.0.0", 101 80 "prettier": "^3.5.3", 102 81 "prettier-plugin-organize-imports": "^4.3.0", 82 + "solid-devtools": "^0.34.3", 103 83 "ts-jest": "^29.4.0", 104 84 "tw-animate-css": "^1.4.0", 105 85 "typedoc": "^0.28.14", ··· 111 91 "typescript-eslint-language-service": "^5.0.5", 112 92 "typescript-language-server": "^5.0.1", 113 93 "vite": "^7.1.12", 94 + "vite-bundle-analyzer": "^1.2.3", 114 95 "vite-plugin-checker": "^0.11.0", 115 96 "vite-plugin-node-polyfills": "^0.24.0", 97 + "vite-plugin-solid": "^2.11.8", 116 98 "wireit": "^0.14.12", 117 99 "zod-schema-faker": "^2.0.0-beta.5" 118 100 },
src/feedline/client/App.tsx

This is a binary file and will not be displayed.

-53
src/feedline/client/atoms/button.tsx
··· 1 - import * as React from 'react' 2 - import {Slot} from '@radix-ui/react-slot' 3 - import {type VariantProps, cva} from 'class-variance-authority' 4 - 5 - import {cn} from '#feedline/client/lib/utils' 6 - 7 - const buttonVariants = cva( 8 - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", 9 - { 10 - variants: { 11 - variant: { 12 - default: 'bg-primary text-primary-foreground hover:bg-primary/90', 13 - destructive: 14 - 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', 15 - outline: 16 - 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', 17 - secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', 18 - ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', 19 - link: 'text-primary underline-offset-4 hover:underline', 20 - }, 21 - size: { 22 - default: 'h-9 px-4 py-2 has-[>svg]:px-3', 23 - sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', 24 - lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', 25 - icon: 'size-9', 26 - 'icon-sm': 'size-8', 27 - 'icon-lg': 'size-10', 28 - }, 29 - }, 30 - defaultVariants: { 31 - variant: 'default', 32 - size: 'default', 33 - }, 34 - }, 35 - ) 36 - 37 - function Button({ 38 - className, 39 - variant, 40 - size, 41 - asChild = false, 42 - ...props 43 - }: React.ComponentProps<'button'> & 44 - VariantProps<typeof buttonVariants> & { 45 - asChild?: boolean 46 - }) { 47 - const Comp = asChild ? Slot : 'button' 48 - const variants = buttonVariants({variant, size, className}) 49 - 50 - return <Comp data-slot="button" className={cn(variants)} {...props} /> 51 - } 52 - 53 - export {Button, buttonVariants}
-65
src/feedline/client/atoms/card.tsx
··· 1 - import * as React from 'react' 2 - 3 - import {cn} from '#feedline/client/lib/utils' 4 - 5 - function Card({className, ...props}: React.ComponentProps<'div'>) { 6 - return ( 7 - <div 8 - data-slot="card" 9 - className={cn( 10 - 'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm', 11 - className, 12 - )} 13 - {...props} 14 - /> 15 - ) 16 - } 17 - 18 - function CardHeader({className, ...props}: React.ComponentProps<'div'>) { 19 - return ( 20 - <div 21 - data-slot="card-header" 22 - className={cn( 23 - '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6', 24 - className, 25 - )} 26 - {...props} 27 - /> 28 - ) 29 - } 30 - 31 - function CardTitle({className, ...props}: React.ComponentProps<'div'>) { 32 - return <div data-slot="card-title" className={cn('leading-none font-semibold', className)} {...props} /> 33 - } 34 - 35 - function CardDescription({className, ...props}: React.ComponentProps<'div'>) { 36 - return ( 37 - <div data-slot="card-description" className={cn('text-muted-foreground text-sm', className)} {...props} /> 38 - ) 39 - } 40 - 41 - function CardAction({className, ...props}: React.ComponentProps<'div'>) { 42 - return ( 43 - <div 44 - data-slot="card-action" 45 - className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)} 46 - {...props} 47 - /> 48 - ) 49 - } 50 - 51 - function CardContent({className, ...props}: React.ComponentProps<'div'>) { 52 - return <div data-slot="card-content" className={cn('px-6', className)} {...props} /> 53 - } 54 - 55 - function CardFooter({className, ...props}: React.ComponentProps<'div'>) { 56 - return ( 57 - <div 58 - data-slot="card-footer" 59 - className={cn('flex items-center px-6 [.border-t]:pt-6', className)} 60 - {...props} 61 - /> 62 - ) 63 - } 64 - 65 - export {Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent}
-21
src/feedline/client/atoms/input.tsx
··· 1 - import * as React from 'react' 2 - 3 - import {cn} from '#feedline/client/lib/utils' 4 - 5 - function Input({className, type, ...props}: React.ComponentProps<'input'>) { 6 - return ( 7 - <input 8 - type={type} 9 - data-slot="input" 10 - className={cn( 11 - 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 12 - 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 13 - 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', 14 - className, 15 - )} 16 - {...props} 17 - /> 18 - ) 19 - } 20 - 21 - export {Input}
-26
src/feedline/client/atoms/separator.tsx
··· 1 - import * as SeparatorPrimitive from '@radix-ui/react-separator' 2 - import * as React from 'react' 3 - 4 - import {cn} from '#feedline/client/lib/utils' 5 - 6 - function Separator({ 7 - className, 8 - orientation = 'horizontal', 9 - decorative = true, 10 - ...props 11 - }: React.ComponentProps<typeof SeparatorPrimitive.Root>) { 12 - return ( 13 - <SeparatorPrimitive.Root 14 - data-slot="separator" 15 - decorative={decorative} 16 - orientation={orientation} 17 - className={cn( 18 - 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px', 19 - className, 20 - )} 21 - {...props} 22 - /> 23 - ) 24 - } 25 - 26 - export {Separator}
-105
src/feedline/client/atoms/sheet.tsx
··· 1 - 'use client' 2 - 3 - import * as SheetPrimitive from '@radix-ui/react-dialog' 4 - import * as React from 'react' 5 - import {XIcon} from 'lucide-react' 6 - 7 - import {cn} from '#feedline/client/lib/utils' 8 - 9 - function Sheet({...props}: React.ComponentProps<typeof SheetPrimitive.Root>) { 10 - return <SheetPrimitive.Root data-slot="sheet" {...props} /> 11 - } 12 - 13 - function SheetTrigger({...props}: React.ComponentProps<typeof SheetPrimitive.Trigger>) { 14 - return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} /> 15 - } 16 - 17 - function SheetClose({...props}: React.ComponentProps<typeof SheetPrimitive.Close>) { 18 - return <SheetPrimitive.Close data-slot="sheet-close" {...props} /> 19 - } 20 - 21 - function SheetPortal({...props}: React.ComponentProps<typeof SheetPrimitive.Portal>) { 22 - return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} /> 23 - } 24 - 25 - function SheetOverlay({className, ...props}: React.ComponentProps<typeof SheetPrimitive.Overlay>) { 26 - return ( 27 - <SheetPrimitive.Overlay 28 - data-slot="sheet-overlay" 29 - className={cn( 30 - 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50', 31 - className, 32 - )} 33 - {...props} 34 - /> 35 - ) 36 - } 37 - 38 - function SheetContent({ 39 - className, 40 - children, 41 - side = 'right', 42 - ...props 43 - }: React.ComponentProps<typeof SheetPrimitive.Content> & { 44 - side?: 'top' | 'right' | 'bottom' | 'left' 45 - }) { 46 - return ( 47 - <SheetPortal> 48 - <SheetOverlay /> 49 - <SheetPrimitive.Content 50 - data-slot="sheet-content" 51 - className={cn( 52 - 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500', 53 - side === 'right' && 54 - 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm', 55 - side === 'left' && 56 - 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm', 57 - side === 'top' && 58 - 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b', 59 - side === 'bottom' && 60 - 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t', 61 - className, 62 - )} 63 - {...props} 64 - > 65 - {children} 66 - <SheetPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none"> 67 - <XIcon className="size-4" /> 68 - <span className="sr-only">Close</span> 69 - </SheetPrimitive.Close> 70 - </SheetPrimitive.Content> 71 - </SheetPortal> 72 - ) 73 - } 74 - 75 - function SheetHeader({className, ...props}: React.ComponentProps<'div'>) { 76 - return <div data-slot="sheet-header" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} /> 77 - } 78 - 79 - function SheetFooter({className, ...props}: React.ComponentProps<'div'>) { 80 - return ( 81 - <div data-slot="sheet-footer" className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} /> 82 - ) 83 - } 84 - 85 - function SheetTitle({className, ...props}: React.ComponentProps<typeof SheetPrimitive.Title>) { 86 - return ( 87 - <SheetPrimitive.Title 88 - data-slot="sheet-title" 89 - className={cn('text-foreground font-semibold', className)} 90 - {...props} 91 - /> 92 - ) 93 - } 94 - 95 - function SheetDescription({className, ...props}: React.ComponentProps<typeof SheetPrimitive.Description>) { 96 - return ( 97 - <SheetPrimitive.Description 98 - data-slot="sheet-description" 99 - className={cn('text-muted-foreground text-sm', className)} 100 - {...props} 101 - /> 102 - ) 103 - } 104 - 105 - export {Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription}
-689
src/feedline/client/atoms/sidebar.tsx
··· 1 - 'use client' 2 - 3 - import * as React from 'react' 4 - import {Slot} from '@radix-ui/react-slot' 5 - import {type VariantProps, cva} from 'class-variance-authority' 6 - import {PanelLeftIcon} from 'lucide-react' 7 - 8 - import {Button} from '#feedline/client/atoms/button' 9 - import {Input} from '#feedline/client/atoms/input' 10 - import {Separator} from '#feedline/client/atoms/separator' 11 - import {Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle} from '#feedline/client/atoms/sheet' 12 - import {Skeleton} from '#feedline/client/atoms/skeleton' 13 - import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from '#feedline/client/atoms/tooltip' 14 - import {useIsMobile} from '#feedline/client/hooks/use-mobile' 15 - import {cn} from '#feedline/client/lib/utils' 16 - 17 - const SIDEBAR_COOKIE_NAME = 'sidebar_state' 18 - const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 19 - const SIDEBAR_WIDTH = '16rem' 20 - const SIDEBAR_WIDTH_MOBILE = '18rem' 21 - const SIDEBAR_WIDTH_ICON = '3rem' 22 - const SIDEBAR_KEYBOARD_SHORTCUT = 'b' 23 - 24 - type SidebarContextProps = { 25 - state: 'expanded' | 'collapsed' 26 - open: boolean 27 - setOpen: (open: boolean) => void 28 - openMobile: boolean 29 - setOpenMobile: (open: boolean) => void 30 - isMobile: boolean 31 - toggleSidebar: () => void 32 - } 33 - 34 - const SidebarContext = React.createContext<SidebarContextProps | null>(null) 35 - 36 - function useSidebar() { 37 - const context = React.useContext(SidebarContext) 38 - if (!context) { 39 - throw new Error('useSidebar must be used within a SidebarProvider.') 40 - } 41 - 42 - return context 43 - } 44 - 45 - function SidebarProvider({ 46 - defaultOpen = true, 47 - open: openProp, 48 - onOpenChange: setOpenProp, 49 - className, 50 - style, 51 - children, 52 - ...props 53 - }: React.ComponentProps<'div'> & { 54 - defaultOpen?: boolean 55 - open?: boolean 56 - onOpenChange?: (open: boolean) => void 57 - }) { 58 - const isMobile = useIsMobile() 59 - const [openMobile, setOpenMobile] = React.useState(false) 60 - 61 - // This is the internal state of the sidebar. 62 - // We use openProp and setOpenProp for control from outside the component. 63 - const [_open, _setOpen] = React.useState(defaultOpen) 64 - const open = openProp ?? _open 65 - const setOpen = React.useCallback( 66 - (value: boolean | ((value: boolean) => boolean)) => { 67 - const openState = typeof value === 'function' ? value(open) : value 68 - if (setOpenProp) { 69 - setOpenProp(openState) 70 - } else { 71 - _setOpen(openState) 72 - } 73 - 74 - // This sets the cookie to keep the sidebar state. 75 - document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}` 76 - }, 77 - [setOpenProp, open], 78 - ) 79 - 80 - // Helper to toggle the sidebar. 81 - const toggleSidebar = React.useCallback(() => { 82 - if (isMobile) { 83 - setOpenMobile((open) => !open) 84 - } else { 85 - setOpen((open) => !open) 86 - } 87 - }, [isMobile, setOpen, setOpenMobile]) 88 - 89 - // Adds a keyboard shortcut to toggle the sidebar. 90 - React.useEffect(() => { 91 - const handleKeyDown = (event: KeyboardEvent) => { 92 - if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) { 93 - event.preventDefault() 94 - toggleSidebar() 95 - } 96 - } 97 - 98 - window.addEventListener('keydown', handleKeyDown) 99 - return () => { 100 - window.removeEventListener('keydown', handleKeyDown) 101 - } 102 - }, [toggleSidebar]) 103 - 104 - // We add a state so that we can do data-state="expanded" or "collapsed". 105 - // This makes it easier to style the sidebar with Tailwind classes. 106 - const state = open ? 'expanded' : 'collapsed' 107 - 108 - const contextValue = React.useMemo<SidebarContextProps>( 109 - () => ({ 110 - state, 111 - open, 112 - setOpen, 113 - isMobile, 114 - openMobile, 115 - setOpenMobile, 116 - toggleSidebar, 117 - }), 118 - [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar], 119 - ) 120 - 121 - return ( 122 - <SidebarContext.Provider value={contextValue}> 123 - <TooltipProvider delayDuration={0}> 124 - <div 125 - data-slot="sidebar-wrapper" 126 - style={ 127 - { 128 - '--sidebar-width': SIDEBAR_WIDTH, 129 - '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, 130 - ...style, 131 - } as React.CSSProperties 132 - } 133 - className={cn( 134 - 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', 135 - className, 136 - )} 137 - {...props} 138 - > 139 - {children} 140 - </div> 141 - </TooltipProvider> 142 - </SidebarContext.Provider> 143 - ) 144 - } 145 - 146 - function Sidebar({ 147 - side = 'left', 148 - variant = 'sidebar', 149 - collapsible = 'offcanvas', 150 - className, 151 - children, 152 - ...props 153 - }: React.ComponentProps<'div'> & { 154 - side?: 'left' | 'right' 155 - variant?: 'sidebar' | 'floating' | 'inset' 156 - collapsible?: 'offcanvas' | 'icon' | 'none' 157 - }) { 158 - const {isMobile, state, openMobile, setOpenMobile} = useSidebar() 159 - 160 - if (collapsible === 'none') { 161 - return ( 162 - <div 163 - data-slot="sidebar" 164 - className={cn( 165 - 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col', 166 - className, 167 - )} 168 - {...props} 169 - > 170 - {children} 171 - </div> 172 - ) 173 - } 174 - 175 - if (isMobile) { 176 - return ( 177 - <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}> 178 - <SheetContent 179 - data-sidebar="sidebar" 180 - data-slot="sidebar" 181 - data-mobile="true" 182 - className="bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden" 183 - style={ 184 - { 185 - '--sidebar-width': SIDEBAR_WIDTH_MOBILE, 186 - } as React.CSSProperties 187 - } 188 - side={side} 189 - > 190 - <SheetHeader className="sr-only"> 191 - <SheetTitle>Sidebar</SheetTitle> 192 - <SheetDescription>Displays the mobile sidebar.</SheetDescription> 193 - </SheetHeader> 194 - <div className="flex h-full w-full flex-col">{children}</div> 195 - </SheetContent> 196 - </Sheet> 197 - ) 198 - } 199 - 200 - return ( 201 - <div 202 - className="group peer text-sidebar-foreground hidden md:block" 203 - data-state={state} 204 - data-collapsible={state === 'collapsed' ? collapsible : ''} 205 - data-variant={variant} 206 - data-side={side} 207 - data-slot="sidebar" 208 - > 209 - {/* This is what handles the sidebar gap on desktop */} 210 - <div 211 - data-slot="sidebar-gap" 212 - className={cn( 213 - 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear', 214 - 'group-data-[collapsible=offcanvas]:w-0', 215 - 'group-data-[side=right]:rotate-180', 216 - variant === 'floating' || variant === 'inset' 217 - ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]' 218 - : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)', 219 - )} 220 - /> 221 - <div 222 - data-slot="sidebar-container" 223 - className={cn( 224 - 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex', 225 - side === 'left' 226 - ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]' 227 - : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]', 228 - // Adjust the padding for floating and inset variants. 229 - variant === 'floating' || variant === 'inset' 230 - ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]' 231 - : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l', 232 - className, 233 - )} 234 - {...props} 235 - > 236 - <div 237 - data-sidebar="sidebar" 238 - data-slot="sidebar-inner" 239 - className="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm" 240 - > 241 - {children} 242 - </div> 243 - </div> 244 - </div> 245 - ) 246 - } 247 - 248 - function SidebarTrigger({className, onClick, ...props}: React.ComponentProps<typeof Button>) { 249 - const {toggleSidebar} = useSidebar() 250 - 251 - return ( 252 - <Button 253 - data-sidebar="trigger" 254 - data-slot="sidebar-trigger" 255 - variant="ghost" 256 - size="icon" 257 - className={cn('size-7', className)} 258 - onClick={(event) => { 259 - onClick?.(event) 260 - toggleSidebar() 261 - }} 262 - {...props} 263 - > 264 - <PanelLeftIcon /> 265 - <span className="sr-only">Toggle Sidebar</span> 266 - </Button> 267 - ) 268 - } 269 - 270 - function SidebarRail({className, ...props}: React.ComponentProps<'button'>) { 271 - const {toggleSidebar} = useSidebar() 272 - 273 - return ( 274 - <button 275 - data-sidebar="rail" 276 - data-slot="sidebar-rail" 277 - aria-label="Toggle Sidebar" 278 - tabIndex={-1} 279 - onClick={toggleSidebar} 280 - title="Toggle Sidebar" 281 - className={cn( 282 - 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex', 283 - 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize', 284 - '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize', 285 - 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full', 286 - '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2', 287 - '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2', 288 - className, 289 - )} 290 - {...props} 291 - /> 292 - ) 293 - } 294 - 295 - function SidebarInset({className, ...props}: React.ComponentProps<'main'>) { 296 - return ( 297 - <main 298 - data-slot="sidebar-inset" 299 - className={cn( 300 - 'bg-background relative flex w-full flex-1 flex-col', 301 - 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2', 302 - className, 303 - )} 304 - {...props} 305 - /> 306 - ) 307 - } 308 - 309 - function SidebarInput({className, ...props}: React.ComponentProps<typeof Input>) { 310 - return ( 311 - <Input 312 - data-slot="sidebar-input" 313 - data-sidebar="input" 314 - className={cn('bg-background h-8 w-full shadow-none', className)} 315 - {...props} 316 - /> 317 - ) 318 - } 319 - 320 - function SidebarHeader({className, ...props}: React.ComponentProps<'div'>) { 321 - return ( 322 - <div 323 - data-slot="sidebar-header" 324 - data-sidebar="header" 325 - className={cn('flex flex-col gap-2 p-2', className)} 326 - {...props} 327 - /> 328 - ) 329 - } 330 - 331 - function SidebarFooter({className, ...props}: React.ComponentProps<'div'>) { 332 - return ( 333 - <div 334 - data-slot="sidebar-footer" 335 - data-sidebar="footer" 336 - className={cn('flex flex-col gap-2 p-2', className)} 337 - {...props} 338 - /> 339 - ) 340 - } 341 - 342 - function SidebarSeparator({className, ...props}: React.ComponentProps<typeof Separator>) { 343 - return ( 344 - <Separator 345 - data-slot="sidebar-separator" 346 - data-sidebar="separator" 347 - className={cn('bg-sidebar-border mx-2 w-auto', className)} 348 - {...props} 349 - /> 350 - ) 351 - } 352 - 353 - function SidebarContent({className, ...props}: React.ComponentProps<'div'>) { 354 - return ( 355 - <div 356 - data-slot="sidebar-content" 357 - data-sidebar="content" 358 - className={cn( 359 - 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', 360 - className, 361 - )} 362 - {...props} 363 - /> 364 - ) 365 - } 366 - 367 - function SidebarGroup({className, ...props}: React.ComponentProps<'div'>) { 368 - return ( 369 - <div 370 - data-slot="sidebar-group" 371 - data-sidebar="group" 372 - className={cn('relative flex w-full min-w-0 flex-col p-2', className)} 373 - {...props} 374 - /> 375 - ) 376 - } 377 - 378 - function SidebarGroupLabel({ 379 - className, 380 - asChild = false, 381 - ...props 382 - }: React.ComponentProps<'div'> & {asChild?: boolean}) { 383 - const Comp = asChild ? Slot : 'div' 384 - 385 - return ( 386 - <Comp 387 - data-slot="sidebar-group-label" 388 - data-sidebar="group-label" 389 - className={cn( 390 - 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0', 391 - 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0', 392 - className, 393 - )} 394 - {...props} 395 - /> 396 - ) 397 - } 398 - 399 - function SidebarGroupAction({ 400 - className, 401 - asChild = false, 402 - ...props 403 - }: React.ComponentProps<'button'> & {asChild?: boolean}) { 404 - const Comp = asChild ? Slot : 'button' 405 - 406 - return ( 407 - <Comp 408 - data-slot="sidebar-group-action" 409 - data-sidebar="group-action" 410 - className={cn( 411 - 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0', 412 - // Increases the hit area of the button on mobile. 413 - 'after:absolute after:-inset-2 md:after:hidden', 414 - 'group-data-[collapsible=icon]:hidden', 415 - className, 416 - )} 417 - {...props} 418 - /> 419 - ) 420 - } 421 - 422 - function SidebarGroupContent({className, ...props}: React.ComponentProps<'div'>) { 423 - return ( 424 - <div 425 - data-slot="sidebar-group-content" 426 - data-sidebar="group-content" 427 - className={cn('w-full text-sm', className)} 428 - {...props} 429 - /> 430 - ) 431 - } 432 - 433 - function SidebarMenu({className, ...props}: React.ComponentProps<'ul'>) { 434 - return ( 435 - <ul 436 - data-slot="sidebar-menu" 437 - data-sidebar="menu" 438 - className={cn('flex w-full min-w-0 flex-col gap-1', className)} 439 - {...props} 440 - /> 441 - ) 442 - } 443 - 444 - function SidebarMenuItem({className, ...props}: React.ComponentProps<'li'>) { 445 - return ( 446 - <li 447 - data-slot="sidebar-menu-item" 448 - data-sidebar="menu-item" 449 - className={cn('group/menu-item relative', className)} 450 - {...props} 451 - /> 452 - ) 453 - } 454 - 455 - const sidebarMenuButtonVariants = cva( 456 - 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 457 - { 458 - variants: { 459 - variant: { 460 - default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', 461 - outline: 462 - 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', 463 - }, 464 - size: { 465 - default: 'h-8 text-sm', 466 - sm: 'h-7 text-xs', 467 - lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!', 468 - }, 469 - }, 470 - defaultVariants: { 471 - variant: 'default', 472 - size: 'default', 473 - }, 474 - }, 475 - ) 476 - 477 - function SidebarMenuButton({ 478 - asChild = false, 479 - isActive = false, 480 - variant = 'default', 481 - size = 'default', 482 - tooltip, 483 - className, 484 - ...props 485 - }: React.ComponentProps<'button'> & { 486 - asChild?: boolean 487 - isActive?: boolean 488 - tooltip?: string | React.ComponentProps<typeof TooltipContent> 489 - } & VariantProps<typeof sidebarMenuButtonVariants>) { 490 - const Comp = asChild ? Slot : 'button' 491 - const {isMobile, state} = useSidebar() 492 - 493 - const button = ( 494 - <Comp 495 - data-slot="sidebar-menu-button" 496 - data-sidebar="menu-button" 497 - data-size={size} 498 - data-active={isActive} 499 - className={cn(sidebarMenuButtonVariants({variant, size}), className)} 500 - {...props} 501 - /> 502 - ) 503 - 504 - if (!tooltip) { 505 - return button 506 - } 507 - 508 - if (typeof tooltip === 'string') { 509 - tooltip = { 510 - children: tooltip, 511 - } 512 - } 513 - 514 - return ( 515 - <Tooltip> 516 - <TooltipTrigger asChild>{button}</TooltipTrigger> 517 - <TooltipContent side="right" align="center" hidden={state !== 'collapsed' || isMobile} {...tooltip} /> 518 - </Tooltip> 519 - ) 520 - } 521 - 522 - function SidebarMenuAction({ 523 - className, 524 - asChild = false, 525 - showOnHover = false, 526 - ...props 527 - }: React.ComponentProps<'button'> & { 528 - asChild?: boolean 529 - showOnHover?: boolean 530 - }) { 531 - const Comp = asChild ? Slot : 'button' 532 - 533 - return ( 534 - <Comp 535 - data-slot="sidebar-menu-action" 536 - data-sidebar="menu-action" 537 - className={cn( 538 - 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0', 539 - // Increases the hit area of the button on mobile. 540 - 'after:absolute after:-inset-2 md:after:hidden', 541 - 'peer-data-[size=sm]/menu-button:top-1', 542 - 'peer-data-[size=default]/menu-button:top-1.5', 543 - 'peer-data-[size=lg]/menu-button:top-2.5', 544 - 'group-data-[collapsible=icon]:hidden', 545 - showOnHover && 546 - 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0', 547 - className, 548 - )} 549 - {...props} 550 - /> 551 - ) 552 - } 553 - 554 - function SidebarMenuBadge({className, ...props}: React.ComponentProps<'div'>) { 555 - return ( 556 - <div 557 - data-slot="sidebar-menu-badge" 558 - data-sidebar="menu-badge" 559 - className={cn( 560 - 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none', 561 - 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground', 562 - 'peer-data-[size=sm]/menu-button:top-1', 563 - 'peer-data-[size=default]/menu-button:top-1.5', 564 - 'peer-data-[size=lg]/menu-button:top-2.5', 565 - 'group-data-[collapsible=icon]:hidden', 566 - className, 567 - )} 568 - {...props} 569 - /> 570 - ) 571 - } 572 - 573 - function SidebarMenuSkeleton({ 574 - className, 575 - showIcon = false, 576 - ...props 577 - }: React.ComponentProps<'div'> & { 578 - showIcon?: boolean 579 - }) { 580 - // Random width between 50 to 90%. 581 - const width = React.useMemo(() => { 582 - return `${Math.floor(Math.random() * 40) + 50}%` 583 - }, []) 584 - 585 - return ( 586 - <div 587 - data-slot="sidebar-menu-skeleton" 588 - data-sidebar="menu-skeleton" 589 - className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} 590 - {...props} 591 - > 592 - {showIcon && <Skeleton className="size-4 rounded-md" data-sidebar="menu-skeleton-icon" />} 593 - <Skeleton 594 - className="h-4 max-w-(--skeleton-width) flex-1" 595 - data-sidebar="menu-skeleton-text" 596 - style={ 597 - { 598 - '--skeleton-width': width, 599 - } as React.CSSProperties 600 - } 601 - /> 602 - </div> 603 - ) 604 - } 605 - 606 - function SidebarMenuSub({className, ...props}: React.ComponentProps<'ul'>) { 607 - return ( 608 - <ul 609 - data-slot="sidebar-menu-sub" 610 - data-sidebar="menu-sub" 611 - className={cn( 612 - 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5', 613 - 'group-data-[collapsible=icon]:hidden', 614 - className, 615 - )} 616 - {...props} 617 - /> 618 - ) 619 - } 620 - 621 - function SidebarMenuSubItem({className, ...props}: React.ComponentProps<'li'>) { 622 - return ( 623 - <li 624 - data-slot="sidebar-menu-sub-item" 625 - data-sidebar="menu-sub-item" 626 - className={cn('group/menu-sub-item relative', className)} 627 - {...props} 628 - /> 629 - ) 630 - } 631 - 632 - function SidebarMenuSubButton({ 633 - asChild = false, 634 - size = 'md', 635 - isActive = false, 636 - className, 637 - ...props 638 - }: React.ComponentProps<'a'> & { 639 - asChild?: boolean 640 - size?: 'sm' | 'md' 641 - isActive?: boolean 642 - }) { 643 - const Comp = asChild ? Slot : 'a' 644 - 645 - return ( 646 - <Comp 647 - data-slot="sidebar-menu-sub-button" 648 - data-sidebar="menu-sub-button" 649 - data-size={size} 650 - data-active={isActive} 651 - className={cn( 652 - 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 653 - 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground', 654 - size === 'sm' && 'text-xs', 655 - size === 'md' && 'text-sm', 656 - 'group-data-[collapsible=icon]:hidden', 657 - className, 658 - )} 659 - {...props} 660 - /> 661 - ) 662 - } 663 - 664 - export { 665 - Sidebar, 666 - SidebarContent, 667 - SidebarFooter, 668 - SidebarGroup, 669 - SidebarGroupAction, 670 - SidebarGroupContent, 671 - SidebarGroupLabel, 672 - SidebarHeader, 673 - SidebarInput, 674 - SidebarInset, 675 - SidebarMenu, 676 - SidebarMenuAction, 677 - SidebarMenuBadge, 678 - SidebarMenuButton, 679 - SidebarMenuItem, 680 - SidebarMenuSkeleton, 681 - SidebarMenuSub, 682 - SidebarMenuSubButton, 683 - SidebarMenuSubItem, 684 - SidebarProvider, 685 - SidebarRail, 686 - SidebarSeparator, 687 - SidebarTrigger, 688 - useSidebar, 689 - }
-9
src/feedline/client/atoms/skeleton.tsx
··· 1 - import {cn} from '#feedline/client/lib/utils' 2 - 3 - function Skeleton({className, ...props}: React.ComponentProps<'div'>) { 4 - return ( 5 - <div data-slot="skeleton" className={cn('bg-accent animate-pulse rounded-md', className)} {...props} /> 6 - ) 7 - } 8 - 9 - export {Skeleton}
-49
src/feedline/client/atoms/tooltip.tsx
··· 1 - import * as TooltipPrimitive from '@radix-ui/react-tooltip' 2 - import * as React from 'react' 3 - 4 - import {cn} from '#feedline/client/lib/utils' 5 - 6 - function TooltipProvider({ 7 - delayDuration = 0, 8 - ...props 9 - }: React.ComponentProps<typeof TooltipPrimitive.Provider>) { 10 - return <TooltipPrimitive.Provider data-slot="tooltip-provider" delayDuration={delayDuration} {...props} /> 11 - } 12 - 13 - function Tooltip({...props}: React.ComponentProps<typeof TooltipPrimitive.Root>) { 14 - return ( 15 - <TooltipProvider> 16 - <TooltipPrimitive.Root data-slot="tooltip" {...props} /> 17 - </TooltipProvider> 18 - ) 19 - } 20 - 21 - function TooltipTrigger({...props}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) { 22 - return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} /> 23 - } 24 - 25 - function TooltipContent({ 26 - className, 27 - sideOffset = 0, 28 - children, 29 - ...props 30 - }: React.ComponentProps<typeof TooltipPrimitive.Content>) { 31 - return ( 32 - <TooltipPrimitive.Portal> 33 - <TooltipPrimitive.Content 34 - data-slot="tooltip-content" 35 - sideOffset={sideOffset} 36 - className={cn( 37 - 'bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance', 38 - className, 39 - )} 40 - {...props} 41 - > 42 - {children} 43 - <TooltipPrimitive.Arrow className="bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" /> 44 - </TooltipPrimitive.Content> 45 - </TooltipPrimitive.Portal> 46 - ) 47 - } 48 - 49 - export {Tooltip, TooltipTrigger, TooltipContent, TooltipProvider}
-54
src/feedline/client/components/layout.tsx
··· 1 - import {ChartNoAxesCombinedIcon} from 'lucide-react' 2 - import {PropsWithChildren} from 'react' 3 - import {Link} from 'react-router' 4 - 5 - import {Separator} from '#feedline/client/atoms/separator' 6 - import { 7 - Sidebar, 8 - SidebarContent, 9 - SidebarGroup, 10 - SidebarMenu, 11 - SidebarMenuButton, 12 - SidebarMenuItem, 13 - SidebarProvider, 14 - SidebarTrigger, 15 - } from '#feedline/client/atoms/sidebar' 16 - 17 - export default function Layout(props: PropsWithChildren) { 18 - return ( 19 - <div className="flex min-h-dvh w-full"> 20 - <SidebarProvider> 21 - <Sidebar> 22 - <SidebarContent> 23 - <SidebarGroup> 24 - <SidebarMenu> 25 - <SidebarMenuItem> 26 - <SidebarMenuButton asChild> 27 - <Link to="/"> 28 - <ChartNoAxesCombinedIcon /> 29 - <span>Dashboard</span> 30 - </Link> 31 - </SidebarMenuButton> 32 - </SidebarMenuItem> 33 - </SidebarMenu> 34 - </SidebarGroup> 35 - </SidebarContent> 36 - </Sidebar> 37 - <div className="flex flex-1 flex-col"> 38 - <header className="bg-card sticky top-0 z-50 border-b"> 39 - <div className="mx-auto flex max-w-7xl items-center justify-between gap-6 pl-2 pr-4 py-2"> 40 - <div className="flex items-center gap-2"> 41 - <SidebarTrigger /> 42 - <Separator orientation="vertical" className="!h-4 hidden sm:block" /> 43 - </div> 44 - <div className="flex items-center gap-1.5"> 45 - <code>beep boop</code> 46 - </div> 47 - </div> 48 - </header> 49 - <main className="mx-auto size-full max-w-7xl flex-1 px-4 py-6">{props.children}</main> 50 - </div> 51 - </SidebarProvider> 52 - </div> 53 - ) 54 - }
+25
src/feedline/client/context/identity.tsx
··· 1 + import {ParentProps, createContext, createMemo, createResource, useContext} from 'solid-js' 2 + 3 + import {RealmIdentityStore} from '#realm/client/identity-store.js' 4 + 5 + const makeIdentityContext = () => { 6 + const store = createMemo(() => new RealmIdentityStore()) 7 + const [identity] = createResource(() => store().ensure()) 8 + return identity 9 + } 10 + 11 + export type IdentityContext = ReturnType<typeof makeIdentityContext> 12 + export const IdentityContext = createContext<IdentityContext>() 13 + 14 + export const IdentityProvider = (props: ParentProps) => { 15 + const context = makeIdentityContext() 16 + 17 + return <IdentityContext.Provider value={context}>{props.children}</IdentityContext.Provider> 18 + } 19 + 20 + export function useIdentityContext(): IdentityContext { 21 + const context = useContext(IdentityContext) 22 + if (context == null) throw new Error('expected to be under an identity context!') 23 + 24 + return context 25 + }
-21
src/feedline/client/hooks/use-mobile.ts
··· 1 - import * as React from 'react' 2 - 3 - const MOBILE_BREAKPOINT = 768 4 - 5 - export function useIsMobile() { 6 - const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined) 7 - 8 - React.useEffect(() => { 9 - const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 - const onChange = () => { 11 - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 - } 13 - mql.addEventListener('change', onChange) 14 - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 - return () => { 16 - mql.removeEventListener('change', onChange) 17 - } 18 - }, []) 19 - 20 - return !!isMobile 21 - }
-86
src/feedline/client/index.css
··· 1 - @import 'tailwindcss'; 2 - @import 'tw-animate-css'; 3 - 4 - @custom-variant dark (&:is(.dark *)); 5 - 6 - :root { 7 - --radius: 0.625rem; 8 - --background: oklch(1 0 0); 9 - --foreground: oklch(0.141 0.005 285.823); 10 - --card: oklch(1 0 0); 11 - --card-foreground: oklch(0.141 0.005 285.823); 12 - --popover: oklch(1 0 0); 13 - --popover-foreground: oklch(0.141 0.005 285.823); 14 - --primary: oklch(0.21 0.006 285.885); 15 - --primary-foreground: oklch(0.985 0 0); 16 - --secondary: oklch(0.967 0.001 286.375); 17 - --secondary-foreground: oklch(0.21 0.006 285.885); 18 - --muted: oklch(0.967 0.001 286.375); 19 - --muted-foreground: oklch(0.552 0.016 285.938); 20 - --accent: oklch(0.967 0.001 286.375); 21 - --accent-foreground: oklch(0.21 0.006 285.885); 22 - --destructive: oklch(0.577 0.245 27.325); 23 - --border: oklch(0.92 0.004 286.32); 24 - --input: oklch(0.92 0.004 286.32); 25 - --ring: oklch(0.705 0.015 286.067); 26 - --chart-1: oklch(0.646 0.222 41.116); 27 - --chart-2: oklch(0.6 0.118 184.704); 28 - --chart-3: oklch(0.398 0.07 227.392); 29 - --chart-4: oklch(0.828 0.189 84.429); 30 - --chart-5: oklch(0.769 0.188 70.08); 31 - --sidebar: oklch(0.985 0 0); 32 - --sidebar-foreground: oklch(0.141 0.005 285.823); 33 - --sidebar-primary: oklch(0.21 0.006 285.885); 34 - --sidebar-primary-foreground: oklch(0.985 0 0); 35 - --sidebar-accent: oklch(0.967 0.001 286.375); 36 - --sidebar-accent-foreground: oklch(0.21 0.006 285.885); 37 - --sidebar-border: oklch(0.92 0.004 286.32); 38 - --sidebar-ring: oklch(0.705 0.015 286.067); 39 - } 40 - 41 - .dark { 42 - --background: oklch(0.141 0.005 285.823); 43 - --foreground: oklch(0.985 0 0); 44 - --card: oklch(0.21 0.006 285.885); 45 - --card-foreground: oklch(0.985 0 0); 46 - --popover: oklch(0.21 0.006 285.885); 47 - --popover-foreground: oklch(0.985 0 0); 48 - --primary: oklch(0.92 0.004 286.32); 49 - --primary-foreground: oklch(0.21 0.006 285.885); 50 - --secondary: oklch(0.274 0.006 286.033); 51 - --secondary-foreground: oklch(0.985 0 0); 52 - --muted: oklch(0.274 0.006 286.033); 53 - --muted-foreground: oklch(0.705 0.015 286.067); 54 - --accent: oklch(0.274 0.006 286.033); 55 - --accent-foreground: oklch(0.985 0 0); 56 - --destructive: oklch(0.704 0.191 22.216); 57 - --border: oklch(1 0 0 / 10%); 58 - --input: oklch(1 0 0 / 15%); 59 - --ring: oklch(0.552 0.016 285.938); 60 - --chart-1: oklch(0.488 0.243 264.376); 61 - --chart-2: oklch(0.696 0.17 162.48); 62 - --chart-3: oklch(0.769 0.188 70.08); 63 - --chart-4: oklch(0.627 0.265 303.9); 64 - --chart-5: oklch(0.645 0.246 16.439); 65 - --sidebar: oklch(0.21 0.006 285.885); 66 - --sidebar-foreground: oklch(0.985 0 0); 67 - --sidebar-primary: oklch(0.488 0.243 264.376); 68 - --sidebar-primary-foreground: oklch(0.985 0 0); 69 - --sidebar-accent: oklch(0.274 0.006 286.033); 70 - --sidebar-accent-foreground: oklch(0.985 0 0); 71 - --sidebar-border: oklch(1 0 0 / 10%); 72 - --sidebar-ring: oklch(0.552 0.016 285.938); 73 - } 74 - 75 - @theme inline { 76 - --color-border: var(--border); 77 - 78 - --color-sidebar: var(--sidebar); 79 - --color-sidebar-foreground: var(--sidebar-foreground); 80 - --color-sidebar-primary: var(--sidebar-primary); 81 - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); 82 - --color-sidebar-accent: var(--sidebar-accent); 83 - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); 84 - --color-sidebar-border: var(--sidebar-border); 85 - --color-sidebar-ring: var(--sidebar-ring); 86 - }
+4 -3
src/feedline/client/index.html
··· 3 3 <head> 4 4 <meta charset="UTF-8" /> 5 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 - <title>feedline</title> 6 + <meta name="color-scheme" content="light dark" /> 7 + <title>feedline.at</title> 7 8 </head> 8 9 <body> 9 - <div id="app"></div> 10 - <script type="module" src="/index.jsx"></script> 10 + <div id="root"></div> 11 + <script type="module" src="index.tsx"></script> 11 12 </body> 12 13 </html>
+40 -14
src/feedline/client/index.tsx
··· 1 - import {createRoot} from 'react-dom/client' 2 - import {createBrowserRouter} from 'react-router' 3 - import {RouterProvider} from 'react-router/dom' 1 + import {createEffect} from 'solid-js' 2 + import {render} from 'solid-js/web' 3 + import {z} from 'zod/v4' 4 4 5 - import './index.css' 5 + import {makeActionSchema} from '#realm/schema' 6 + import {IdentBrand} from '#realm/schema/brands' 7 + 8 + import {IdentityProvider, useIdentityContext} from './context/identity' 6 9 import Layout from './layout' 7 - import Dashboard from './pages/dashboard' 8 10 9 - const router = createBrowserRouter([ 10 - { 11 - Component: Layout, 12 - children: [{index: true, Component: Dashboard}], 13 - }, 14 - ]) 11 + const myActionSchema = makeActionSchema('my-action', IdentBrand.schema) 12 + type MyAction = z.infer<typeof myActionSchema> 15 13 16 - const root = document.getElementById('app') 17 - if (root == null) throw new TypeError("root isn't present?") 14 + function Name() { 15 + createEffect(() => { 16 + console.log('identity:', identity.loading, identity.error, identity()) 17 + }) 18 18 19 - createRoot(root).render(<RouterProvider router={router} />) 19 + const identity = useIdentityContext() 20 + const addAction = async () => { 21 + await identity()?.dispatchAction<MyAction>('my-action', identity()?.identid ?? IdentBrand.generate()) 22 + } 23 + 24 + return ( 25 + <> 26 + <h2>loading: {identity.loading}</h2> 27 + <h2>error: {identity.error}</h2> 28 + <button onClick={addAction}>Add</button> 29 + </> 30 + ) 31 + } 32 + 33 + export function App() { 34 + return ( 35 + <IdentityProvider> 36 + <Layout> 37 + <h2>Hi</h2> 38 + </Layout> 39 + </IdentityProvider> 40 + ) 41 + } 42 + 43 + const root = document.getElementById('root') 44 + if (!root) throw new Error('Root element not found') 45 + render(() => <App />, root)
+16 -19
src/feedline/client/layout.tsx
··· 1 - import {StrictMode} from 'react' 2 - import {Outlet} from 'react-router' 3 - 4 - import {RealmContextProvider} from '#realm/client/context.js' 1 + import {ParentProps} from 'solid-js' 5 2 6 - import {default as UILayout} from './components/layout' 7 - 8 - function websocketUrl() { 9 - const wshost = window.location.host 10 - const wsproto = window.location.protocol === 'https:' ? 'wss' : 'ws' 11 - return `${wsproto}://${wshost}/stream` 12 - } 3 + import {useIdentityContext} from './context/identity' 13 4 14 - export default function Layout() { 5 + export default function Layout(props: ParentProps) { 6 + const identity = useIdentityContext() 15 7 return ( 16 - <RealmContextProvider url={websocketUrl()}> 17 - <StrictMode> 18 - <UILayout> 19 - <Outlet /> 20 - </UILayout> 21 - </StrictMode> 22 - </RealmContextProvider> 8 + <> 9 + <header> 10 + <span>feedline</span> 11 + <span>{identity()?.identid}</span> 12 + </header> 13 + <nav>sidebar nav in desktop</nav> 14 + <main> 15 + main 16 + {props.children} 17 + </main> 18 + <footer>Footer</footer> 19 + </> 23 20 ) 24 21 }
-6
src/feedline/client/lib/utils.ts
··· 1 - import {type ClassValue, clsx} from 'clsx' 2 - import {twMerge} from 'tailwind-merge' 3 - 4 - export function cn(...inputs: ClassValue[]) { 5 - return twMerge(clsx(inputs)) 6 - }
-14
src/feedline/client/pages/dashboard.tsx
··· 1 - import {useRealmContext} from '#realm/client/context' 2 - 3 - export default function Dashboard() { 4 - const context = useRealmContext() 5 - 6 - return ( 7 - <div> 8 - <h2>Dashboard</h2> 9 - <p>Hey, what's up</p> 10 - <hr /> 11 - <pre>{JSON.stringify(context.state, null, 2)}</pre> 12 - </div> 13 - ) 14 - }
-3
src/feedline/client/routes.tsx
··· 1 - import {RouteConfig, index, layout} from '@react-router/dev/routes' 2 - 3 - export default [layout('./layout.tsx', [index('./pages/dashboard.tsx')])] satisfies RouteConfig
+5 -4
tsconfig.json
··· 17 17 "strictNullChecks": true, 18 18 "strictFunctionTypes": true, 19 19 20 - // JSX support for React 21 - "jsx": "react-jsx", 22 - "jsxImportSource": "react", 20 + // JSX support for Solid 21 + "jsx": "preserve", 22 + "jsxImportSource": "solid-js", 23 23 24 24 // Path mapping to match Vite config 25 25 "baseUrl": ".", ··· 44 44 "types": ["node"], 45 45 "lib": ["es2024", "DOM", "DOM.Iterable", "DOM.AsyncIterable"] 46 46 }, 47 - "include": ["src/**/*", "vite.config.js", "eslint.config.js"], 47 + 48 + "include": ["src/**/*", "node_modules/vite/client.d.ts", "vite.config.js", "eslint.config.js"], 48 49 "exclude": ["node_modules", "dist", "docs", "tmp"] 49 50 }
+8 -13
vite.config.js
··· 1 1 import tailwind from '@tailwindcss/vite' 2 - import react from '@vitejs/plugin-react' 2 + import devtools from 'solid-devtools/vite' 3 3 import {defineConfig} from 'vite' 4 - import {nodePolyfills} from 'vite-plugin-node-polyfills' 4 + import {analyzer} from 'vite-bundle-analyzer' 5 + import solidPlugin from 'vite-plugin-solid' 5 6 6 7 // https://vite.dev/config/ 7 8 ··· 12 13 outDir: '../../../dist', 13 14 copyPublicDir: true, 14 15 emptyOutDir: true, 16 + target: 'esnext', 15 17 }, 16 - plugins: [ 17 - react({ 18 - babel: { 19 - // inserts `useSignals()` 20 - // https://github.com/preactjs/signals/blob/HEAD/packages/react-transform/README.md 21 - plugins: [['module:@preact/signals-react-transform']], 22 - }, 23 - }), 24 - nodePolyfills(), 25 - tailwind(), 26 - ], 18 + define: { 19 + global: {}, 20 + }, 21 + plugins: [devtools(), analyzer({analyzerMode: 'static'}), solidPlugin(), tailwind()], 27 22 28 23 clearScreen: false, 29 24 server: {